# Godot Engine Documentation in Vietnamese # Copyright (C) 2014-present, 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. # # 01lifeleft <01lifeleft@gmail.com>, 2018. # 38569459 , 2018. # Bế Trọng Nghĩa , 2023. # 「ĐOÀN THÀNH LONG」 <2k9longdoan@gmail.com>, 2023. # Dũng Đinh , 2019. # Giacat Buile , 2021. # Hai Long Nguyen Vu , 2020. # Hà Quang Dũng , 2021. # Hung , 2021. # IoeCmcomc , 2021-2022. # Kê Luyện , 2019. # MInhTriet , 2022-2023. # mth2610 , 2018. # Nguyen Mao , 2021. # Peter Anh , 2019. # plantcraft94 , 2023. # Quân Phạm Viết , 2023. # Rev , 2021. # Steve Dang , 2019-2020. # SyliawDeV , 2021. # Ta Anh , 2020. # Telerzine , 2023, 2024. # Trần Văn Luyện , 2023. # TrieuPhong , 2022. # TyTYct Hihi , 2019. # Nguyễn Hữu Trung Chiến , 2023, 2024. # NGUYEN THANH VAN , 2024. # Trần Đức Minh Nhật , 2024. # Lê Văn Hiếu , 2024. # ThanhCj , 2024. # duyanh0511 , 2024. # Đức Anh Nguyễn , 2024. # xanhAD , 2024, 2025. # RinXe , 2025. # Thong Nguyen , 2025. # Đức Anh Nguyễn , 2025. # Fatty Ng , 2025. # Dao Duy Tin , 2025. # Orus Or , 2025. msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" "POT-Creation-Date: 2025-12-19 15:00+0100\n" "PO-Revision-Date: 2025-11-09 20:51+0000\n" "Last-Translator: Orus Or \n" "Language-Team: Vietnamese \n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.15-dev\n" #: ../../docs/_templates/layout.html:58 msgid "Previous" msgstr "Cửa sổ trước" #: ../../docs/_templates/layout.html:61 msgid "Next" msgstr "Cửa sổ tiếp theo" #: ../../docs/_templates/versions.html:26 #: ../../docs/tutorials/performance/cpu_optimization.rst:160 msgid "Languages" msgstr "Các ngôn ngữ" #: ../../docs/_templates/versions.html:32 msgid "Versions" msgstr "Các phiên bản" #: ../../docs/_templates/versions.html:39 msgid "On Read the Docs" msgstr "Khi đọc tài liệu" #: ../../docs/_templates/versions.html:41 msgid "Project Home" msgstr "Trang chủ dự án" #: ../../docs/_templates/versions.html:44 msgid "Builds" msgstr "Các bản build" #: ../../docs/_templates/versions.html:47 msgid "Downloads" msgstr "Tải xuống" #: ../../docs/index.rst:65 ../../docs/about/docs_changelog.rst:99 #: ../../docs/about/docs_changelog.rst:295 #: ../../docs/tutorials/inputs/mouse_and_input_coordinates.rst:7 #: ../../docs/tutorials/scripting/gdscript/gdscript_advanced.rst:7 #: ../../docs/engine_details/architecture/variant_class.rst:7 msgid "About" msgstr "Giới thiệu" #: ../../docs/index.rst:79 ../../docs/tutorials/2d/2d_parallax.rst:20 #: ../../docs/tutorials/platform/android/android_in_app_purchases.rst:13 #: ../../docs/tutorials/scripting/cpp/gdextension_cpp_example.rst:4 #: ../../docs/tutorials/scripting/cpp/build_system/scons.rst:14 msgid "Getting started" msgstr "Căn bản" #: ../../docs/index.rst:94 msgid "Manual" msgstr "Hướng dẫn" #: ../../docs/index.rst:128 msgid "Engine details" msgstr "Chi tiết về Engine" #: ../../docs/index.rst:141 msgid "Community" msgstr "Cộng đồng" #: ../../docs/index.rst:152 msgid "Class reference" msgstr "Tham khảo Class" #: ../../docs/index.rst:4 #, fuzzy msgid "Godot Docs – *master* branch" msgstr "Tài liệu Godot - nhánh *4.5*" #: ../../docs/index.rst:8 msgid "" "Godot's documentation is available in various languages and versions. Expand " "the \"Read the Docs\" panel at the bottom of the sidebar to see the list." msgstr "" "Tài liệu hướng dẫn của Godot hiện hỗ trợ nhiều ngôn ngữ và phiên bản khác " "nhau. Bấm vào \"Đọc tài liệu\" ở dưới cùng bên trái để xem danh sách." #: ../../docs/index.rst:14 msgid "" "This documentation is translated from the `original English one `_ by community members on `Weblate `_." msgstr "" "Tài liệu này được dịch từ `bản gốc Tiếng Anh `_ bởi các thành viên cộng đồng trên `Weblate `_." #: ../../docs/index.rst:18 msgid "" "Depending on the translation effort's completion level, you may find " "paragraphs or whole pages which are still in English. You can help the " "community by providing new translations or reviewing existing ones on " "Weblate." msgstr "" "Tùy thuộc vào mức độ hoàn thành của bản dịch, bạn có thể tìm thấy vài đoạn " "văn hoặc toàn bộ trang vẫn còn bằng tiếng Anh. Bạn có thể giúp cộng đồng " "bằng cách cung cấp các bản dịch mới hoặc xem xét lại các bản dịch hiện có " "trên Weblate." #: ../../docs/index.rst:23 msgid "" "For the time being, localized translations are only available for the " "\"stable\" branch. You can still view the English documentation for other " "engine versions using the \"Read the Docs\" panel at the bottom of the " "sidebar." msgstr "" "Hiện tại chỉ có phiên bản \"stable\" mới có bản dịch Tiếng Việt. Bạn vẫn có " "thể xem các phiên bản khác nhưng bằng tiếng Anh với nút \"Read the Docs\" ở " "dưới cùng bên trái." #: ../../docs/index.rst:28 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 "" "Chào mừng đến với tài liệu chính thức của `Godot Engine `__, game engine 2D/3D tự do và mã nguồn mở được phát triển " "bởi cộng đồng! Nếu mới tới đây lần đầu, bạn nên đọc qua :ref:`trang giới " "thiệu ` để có cái nhìn tổng quan về những gì tài liệu này " "cung cấp." #: ../../docs/index.rst:34 msgid "" "The table of contents 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 "" "Phần mục lục ở bên trái sẽ giúp bạn dễ dàng tiếp cận những chủ đề mình quan " "tâm. Bạn cũng có thể dùng chức năng tìm kiếm ở góc trên bên trái." #: ../../docs/index.rst:38 msgid "Get involved" msgstr "Tham gia" #: ../../docs/index.rst:40 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 "" "Godot Engine là một dự án mã nguồn mở được phát triển bởi cộng đồng các tình " "nguyện viên. Đội ngũ chuyên trách tài liệu luôn biết ơn ý kiến đóng góp của " "bạn, để từ đó cải thiện các bài hướng dẫn và tham khảo. Nếu bạn xem mà không " "hiểu, khó hiểu hoặc không tìm thấy giải pháp bạn cần trong tài liệu này, hãy " "cho bọn mình biết nha!" #: ../../docs/index.rst:46 msgid "" "Submit an issue or pull request on the `GitHub repository `_, help us `translate the " "documentation `_ into your " "language, or talk to us on the ``#documentation`` channel on the `Godot " "Contributors Chat `_!" msgstr "" ":abbr:`Gửi báo cáo sự cố (Submit an issue)` hoặc :abbr:`Pull Request (Là một " "tính năng trên GitHub cho phép bạn đề xuất thay đổi nội dung trên một " "repository mà bạn không có quyền ghi vào. Chủ repository có thể xem xét " "những thay đổi này và merge chúng vào repository nếu họ thấy hợp lý)` trên " "`GitHub repository `_, " "giúp chúng tôi `dịch tài liệu `_ sang ngôn ngữ của bạn, hoặc thảo luận với chúng tôi trên kênh " "``#documentation`` tại `Godot Contributors Chat `_!" #: ../../docs/index.rst:52 msgid "weblate_widget" msgstr "weblate_widget" #: ../../docs/:2 msgid "Translation status" msgstr "Trạng thái bản dịch" #: ../../docs/index.rst:54 msgid "Offline documentation" msgstr "Tài liệu ngoại tuyến" #: ../../docs/index.rst:56 msgid "" "To browse the documentation offline, you can download an HTML copy (updated " "every Monday): `stable `__, `latest " "`__, `3.6 `__. Extract the ZIP archive then open the top-level " "``index.html`` in a web browser." msgstr "" "Để xem tài liệu offline, bạn có thể tải xuống một bản sao HTML (cập nhật mỗi " "thứ hai): `stable `__, `latest `__, `3.6 `__. Giải " "nén file ZIP rồi mở file ``index.html`` bằng trình duyệt web." #: ../../docs/index.rst:59 msgid "" "For mobile devices or e-readers, you can also download an ePub copy (updated " "every Monday): `stable `__, `latest " "`__, `3.6 `__. Extract the ZIP archive then open the ``GodotEngine.epub`` " "file in an e-book reader application." msgstr "" "Đối với thiết bị di động và máy đọc sách, bạn cũng có thể tải xuống bản ePub " "(cập nhật mỗi thứ hai): `stable `__, `latest " "`__, `3.6 `__. Giải nén file ZIP rồi mở file ``GodotEngine.epub`` bằng " "trình đọc sách." #: ../../docs/404.rst:5 msgid "Page not found" msgstr "Không tìm thấy trang" #: ../../docs/about/introduction.rst:6 #: ../../docs/getting_started/introduction/index.rst:10 #: ../../docs/tutorials/best_practices/introduction_best_practices.rst:4 #: ../../docs/tutorials/best_practices/project_organization.rst:7 #: ../../docs/tutorials/best_practices/version_control_systems.rst:7 #: ../../docs/tutorials/editor/script_editor.rst:9 #: ../../docs/tutorials/editor/managing_editor_features.rst:9 #: ../../docs/tutorials/2d/2d_transforms.rst:7 #: ../../docs/tutorials/2d/2d_lights_and_shadows.rst:7 #: ../../docs/tutorials/2d/2d_meshes.rst:9 #: ../../docs/tutorials/2d/2d_sprite_animation.rst:7 #: ../../docs/tutorials/2d/2d_antialiasing.rst:16 #: ../../docs/tutorials/2d/custom_drawing_in_2d.rst:7 #: ../../docs/tutorials/2d/2d_parallax.rst:7 #: ../../docs/tutorials/2d/2d_movement.rst:7 #: ../../docs/tutorials/2d/using_tilesets.rst:7 #: ../../docs/tutorials/2d/using_tilemaps.rst:13 #: ../../docs/tutorials/3d/using_transforms.rst:7 #: ../../docs/tutorials/3d/3d_text.rst:7 #: ../../docs/tutorials/3d/3d_rendering_limitations.rst:7 #: ../../docs/tutorials/3d/standard_material_3d.rst:7 #: ../../docs/tutorials/3d/lights_and_shadows.rst:7 #: ../../docs/tutorials/3d/particles/index.rst:-1 #: ../../docs/tutorials/3d/high_dynamic_range.rst:9 #: ../../docs/tutorials/3d/3d_antialiasing.rst:16 #: ../../docs/tutorials/3d/using_multi_mesh_instance.rst:9 #: ../../docs/tutorials/3d/mesh_lod.rst:22 #: ../../docs/tutorials/3d/using_gridmaps.rst:7 #: ../../docs/tutorials/3d/spring_arm.rst:7 #: ../../docs/tutorials/animation/2d_skeletons.rst:9 #: ../../docs/tutorials/animation/animation_tree.rst:7 #: ../../docs/tutorials/audio/audio_buses.rst:9 #: ../../docs/tutorials/audio/audio_streams.rst:9 #: ../../docs/tutorials/audio/sync_with_audio.rst:9 #: ../../docs/tutorials/export/feature_tags.rst:7 #: ../../docs/tutorials/io/saving_games.rst:7 #: ../../docs/tutorials/io/binary_serialization_api.rst:9 #: ../../docs/tutorials/i18n/internationalizing_games.rst:7 #: ../../docs/tutorials/i18n/pseudolocalization.rst:7 #: ../../docs/tutorials/inputs/input_examples.rst:7 #: ../../docs/tutorials/math/vector_math.rst:7 #: ../../docs/tutorials/math/matrices_and_transforms.rst:7 #: ../../docs/tutorials/networking/ssl_certificates.rst:7 #: ../../docs/tutorials/performance/index.rst:9 #: ../../docs/tutorials/performance/general_optimization.rst:7 #: ../../docs/tutorials/performance/gpu_optimization.rst:7 #: ../../docs/tutorials/physics/using_jolt_physics.rst:7 #: ../../docs/tutorials/physics/using_area_2d.rst:7 #: ../../docs/tutorials/physics/using_character_body_2d.rst:7 #: ../../docs/tutorials/physics/ray-casting.rst:7 #: ../../docs/tutorials/physics/ragdoll_system.rst:7 #: ../../docs/tutorials/physics/kinematic_character_2d.rst:7 #: ../../docs/tutorials/physics/interpolation/physics_interpolation_introduction.rst:4 #: ../../docs/tutorials/platform/android/android_plugin.rst:7 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:13 #: ../../docs/tutorials/plugins/editor/3d_gizmos.rst:9 #: ../../docs/tutorials/rendering/renderers.rst:13 #: ../../docs/tutorials/rendering/viewports.rst:7 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_basics.rst:5 #: ../../docs/tutorials/scripting/cpp/build_system/cmake.rst:24 #: ../../docs/tutorials/scripting/gdextension/gdextension_file.rst:7 #: ../../docs/tutorials/scripting/gdextension/gdextension_c_example.rst:7 #: ../../docs/tutorials/scripting/debug/custom_performance_monitors.rst:7 #: ../../docs/tutorials/scripting/pausing_games.rst:7 #: ../../docs/tutorials/scripting/filesystem.rst:7 #: ../../docs/tutorials/scripting/singletons_autoload.rst:7 #: ../../docs/tutorials/scripting/scene_tree.rst:7 #: ../../docs/tutorials/scripting/scene_unique_nodes.rst:7 #: ../../docs/tutorials/shaders/shader_reference/shading_language.rst:7 #: ../../docs/tutorials/shaders/your_first_shader/your_first_2d_shader.rst:7 #: ../../docs/tutorials/shaders/screen-reading_shaders.rst:7 #: ../../docs/tutorials/shaders/using_viewport_as_texture.rst:7 #: ../../docs/tutorials/shaders/custom_postprocessing.rst:7 #: ../../docs/tutorials/shaders/advanced_postprocessing.rst:7 #: ../../docs/tutorials/ui/bbcode_in_richtextlabel.rst:7 #: ../../docs/tutorials/xr/openxr_composition_layers.rst:7 #: ../../docs/tutorials/xr/openxr_hand_tracking.rst:7 #: ../../docs/engine_details/architecture/2d_coordinate_systems.rst:7 #: ../../docs/engine_details/architecture/custom_godot_servers.rst:7 #: ../../docs/engine_details/architecture/custom_resource_format_loaders.rst:7 #: ../../docs/engine_details/architecture/custom_audiostreams.rst:7 #: ../../docs/community/asset_library/submitting_to_assetlib.rst:7 msgid "Introduction" msgstr "Giới thiệu" #: ../../docs/about/introduction.rst:21 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 "" "Chào mừng đến với tài liệu chính thức của **Godot Engine**, game engine 2D/" "3D tự do và mã nguồn mở vì cộng đồng! Đây là một công cụ mạnh mẽ nhưng thân " "thiện với người dùng để bạn có thể tạo mọi loại game, cho mọi nền tảng với " "không một hạn chế sử dụng nào." #: ../../docs/about/introduction.rst:26 msgid "" "This page gives a broad overview of the engine and of this documentation, so " "that you know where to start if you are a beginner or where to look if you " "need information on a specific feature." msgstr "" "Trang này cung cấp cái nhìn tổng quan về engine cũng như tài liệu này, để " "bạn biết nên bắt đầu từ đâu nếu bạn là người mới, hoặc tìm ở đâu nếu bạn cần " "thông tin về một tính năng cụ thể." #: ../../docs/about/introduction.rst:31 msgid "Before you start" msgstr "Trước khi bạn bắt đầu" #: ../../docs/about/introduction.rst:33 msgid "" "The :ref:`Tutorials and resources ` page lists " "video tutorials contributed by the community. If you prefer video to text, " "consider checking them out. Otherwise, :ref:`Getting Started " "` is a great starting point." msgstr "" "Trang :ref:`Hướng dẫn và Tài nguyên ` liệt kê các " "video hướng dẫn từ cộng đồng. Nếu bạn thích xem video hơn đọc chữ thì hãy " "xem qua nhé. Còn không thì :ref:`Phần bắt đầu ` " "là một khởi điểm tuyệt vời." #: ../../docs/about/introduction.rst:38 msgid "" "In case you have trouble with one of the tutorials or your project, you can " "find help on the various `Community channels `_, especially the Godot `Discord `_ community and `Forum `_." msgstr "" "Nếu gặp khó khăn, bạn có thể nhờ giúp đỡ trên :ref:`Các kênh Cộng đồng " "`, đặc biệt là kênh Godot `Discord`_ và `Diễn đàn " "`_." #: ../../docs/about/introduction.rst:44 msgid "About Godot Engine" msgstr "Giới thiệu Godot Engine" #: ../../docs/about/introduction.rst:46 msgid "" "A game engine is a complex tool and difficult to present in a few words. " "Here's a quick synopsis, which you are free to reuse if you need a quick " "write-up about Godot Engine:" msgstr "" "Game Engine là một công cụ phức tạp và rất khó để mô tả về nó chỉ với một " "vài từ. Dưới đây là đôi lời tóm tắt mà bạn có thể thoải mái sử dụng lại nếu " "cần mô tả nhanh về Godot Engine:" #: ../../docs/about/introduction.rst:50 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 with one click to a number of " "platforms, including the major desktop platforms (Linux, macOS, Windows), " "mobile platforms (Android, iOS), as well as Web-based platforms and consoles." msgstr "" "Godot Engine là một game engine giàu tính năng, đa nền tảng với giao diện " "nhất quán, được dùng để tạo các game 2D và 3D. Nó cung cấp một bộ công cụ " "toàn diện để người dùng có thể tập trung vào làm game mà không phải tự mình " "tạo lại những tính năng đã được phát triển. Chỉ với một cú nhấp chuột, game " "có thể được xuất bản tới nhiều nền tảng, bao gồm các nền tảng máy tính " "(Linux, macOS, Windows), di động (Android, iOS), cũng như nền Web và các máy " "Console." #: ../../docs/about/introduction.rst:57 msgid "" "Godot is completely free and open source under the :ref:`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 `Godot Foundation `_ not-for-" "profit." msgstr "" "Godot hoàn toàn tự do và mã nguồn mở theo :ref:`Giấy phép MIT " "`. Không đặt điều kiện, không tính phí bản " "quyền, không có bất kỳ hạn chế nào. Game của ai là của người đó, cho tới " "dòng code cuối cùng. Sự phát triển Godot là hoàn toàn độc lập và được thúc " "đẩy bởi cộng đồng, để người dùng được sử dụng engine theo cách mình muốn. Nó " "được hỗ trợ bởi tổ chức phi lợi nhuận `Godot Foundation `_." #: ../../docs/about/introduction.rst:67 msgid "Organization of the documentation" msgstr "Cấu trúc của tài liệu" #: ../../docs/about/introduction.rst:69 msgid "This documentation is organized into several sections:" msgstr "Tài liệu này được chia thành nhiều phần khác nhau:" #: ../../docs/about/introduction.rst:71 msgid "" "**About** contains this introduction as well as information about the " "engine, its history, its licensing, authors, etc. It also contains " "the :ref:`doc_faq`." msgstr "" "**Phần giới thiệu** chứa bài giới thiệu này cũng như những giới thiệu khác " "về engine, lịch sử, bản quyền, các tác giả của nó, v.v. Nó cũng bao " "gồm :ref:`doc_faq`." #: ../../docs/about/introduction.rst:74 msgid "" "**Getting Started** contains all necessary information on using the engine " "to make games. It starts with the :ref:`doc_getting_started_intro` section " "which should be the entry point for all new users. **This is the best place " "to start if you're new!**" msgstr "" "**Phần bắt đầu** chứa những thông tin cần thiết để bắt tay vào việc làm game " "bằng Godot. Nó mở đầu với :ref:`Hướng dẫn từng bước ` mà những bạn mới bắt đầu nên đọc. **Đây là trang chuẩn nhất " "để đọc qua nếu bạn là người mới!**" #: ../../docs/about/introduction.rst:78 msgid "" "The **Manual** can be read or referenced as needed, in any order. It " "contains feature-specific tutorials and documentation." msgstr "" "Phần **Hướng dẫn** có thể được tham khảo khi nào cần, theo bất kỳ thứ tự nào " "cũng được. Nó chứa các hướng dẫn và tài liệu cho những tính năng cụ thể." #: ../../docs/about/introduction.rst:80 msgid "" "**Engine details** contains sections intended for advanced users and " "contributors, with information on compiling the engine, working on the " "editor, or developing C++ modules." msgstr "" "**Đóng góp** Chứa các phần dành cho người dùng và cộng tác viên nâng cao, " "với thông tin về cách biên dịch engine, đóng góp vào editor, hoặc phát triển " "module C++." #: ../../docs/about/introduction.rst:83 msgid "" "**Community** is dedicated to the life of Godot's community and contains a " "list of recommended third-party tutorials and materials outside of this " "documentation. It also provides details on the Asset Library. It also used " "to list Godot communities, which are now listed on the `Godot website " "`_." msgstr "" "Chào mừng đến với tài liệu chính thức của **Godot Engine**, game engine 2D/" "3D tự do và mã nguồn mở vì cộng đồng! Đây là một công cụ mạnh mẽ nhưng thân " "thiện với người dùng để bạn có thể tạo mọi loại game, cho mọi nền tảng với " "không một hạn chế sử dụng nào." #: ../../docs/about/introduction.rst:87 msgid "" "Finally, the **Class reference** documents the full Godot API, also " "available directly within the engine's script editor. You can find " "information on all classes, functions, signals and so on here." msgstr "" "Cuối cùng, phần **Tham khảo Class** chứa đầy đủ thông tin tham khảo về Godot " "API (bạn cũng có thể mở nó trực tiếp ngay trong editor). Tại đây bạn sẽ có " "mọi thông tin về các class, các function, các signal, v.v." #: ../../docs/about/introduction.rst:91 msgid "" "In addition to this documentation, you may also want to take a look at the " "various `Godot demo projects `_." msgstr "" "Ngoài tài liệu này, bạn có thể tham khảo thêm `các project demo `_." #: ../../docs/about/introduction.rst:95 msgid "About this documentation" msgstr "Về tài liệu này" #: ../../docs/about/introduction.rst:97 msgid "" "Members of the Godot Engine community continuously write, correct, edit, and " "improve this documentation. We are always looking for more help. You can " "also contribute by opening Github issues or translating the documentation " "into your language. If you are interested in helping, see `How to contribute " "`__ and `Writing documentation `__, " "or get in touch with the `Documentation team `_ on `Godot Contributors Chat `_." msgstr "" "Thành viên cộng đồng Godot Engine liên tục biên soạn, chỉnh lý, bổ sung và " "cải thiện tài liệu này. Chúng tôi luôn mong muốn thêm nhiều sự giúp đỡ. Bạn " "có thể đóng góp bằng cách mở các Github issue hoặc dịch tài liệu sang ngôn " "ngữ của bạn. Nếu bạn quan tâm đến việc giúp đỡ, vui lòng xem :ref:`Các cách " "để đóng góp ` và :ref:`Biên soạn tài liệu " "`, hoặc liên lạc với :ref:`Đội ngũ " "chuyên trách tài liệu`_ " "trên :ref:`Godot Contributors Chat `_." #: ../../docs/about/introduction.rst:105 msgid "" "All documentation content is licensed 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*\" unless otherwise noted." msgstr "" "Toàn bộ nội dung của tài liệu này được cấp phép dưới giấy phép Creative " "Commons Attribution 3.0 (`CC BY 3.0 `_) , với sự ghi công cho \"*Juan Linietsky, Ariel Manzur, và cộng đồng " "Godot Engine*\" trừ phi có thông cáo khác." #: ../../docs/about/introduction.rst:110 msgid "*Have fun reading and making games with Godot Engine!*" msgstr "" "*Chúc bạn nhiều niềm vui khi đọc tài liệu và làm game với Godot Engine!*" #: ../../docs/about/list_of_features.rst:6 msgid "List of features" msgstr "Danh sách các tính năng" #: ../../docs/about/list_of_features.rst:8 msgid "This page aims to list **all** features currently supported by Godot." msgstr "" "Trang này nhằm liệt kê **tất cả** tính năng hiện được hỗ trợ bởi Godot." #: ../../docs/about/list_of_features.rst:12 msgid "" "This page lists features supported by the current stable version of Godot. " "Some of these features are not available in the `3.x release series `__." msgstr "" "Trang này liệt kê các tính năng trên phiên bản stable của Godot. Một vài " "tính năng có thể không khả dụng trong `các phiên bản LTS (3.x) `__." #: ../../docs/about/list_of_features.rst:17 msgid "Platforms" msgstr "Các nền tảng" #: ../../docs/about/list_of_features.rst:21 msgid "" "See :ref:`doc_system_requirements` for hardware and software version " "requirements." msgstr "" "Xem :ref:`doc_system_requirements` để biết các yêu cầu về phần cứng và phần " "mềm." #: ../../docs/about/list_of_features.rst:23 msgid "**Can run both the editor and exported projects:**" msgstr "**Có thể chạy cả editor lẫn các project đã xuất bản:**" #: ../../docs/about/list_of_features.rst:25 msgid "Windows (x86 and ARM, 64-bit and 32-bit)." msgstr "Linux (kiến trúc x86 và ARM, cả 64-bit và 32-bit)." #: ../../docs/about/list_of_features.rst:26 msgid "macOS (x86 and ARM, 64-bit only)." msgstr "macOS (kiến trúc x86 và ARM, chỉ 64-bit)." #: ../../docs/about/list_of_features.rst:27 msgid "Linux (x86 and ARM, 64-bit and 32-bit)." msgstr "Linux (kiến trúc x86 và ARM, cả 64-bit và 32-bit)." #: ../../docs/about/list_of_features.rst:29 msgid "" "Binaries are statically linked and can run on any distribution if compiled " "on an old enough base distribution." msgstr "" "Các :abbr:`Binary (file thực thi/file nhị phân)` được liên kết tĩnh và có " "thể chạy trên bất kỳ distro nào miễn là nó được biên dịch trên một distro cũ " "cũ chút." #: ../../docs/about/list_of_features.rst:31 msgid "" "Official binaries are compiled using the `Godot Engine buildroot `__, allowing for binaries that work across " "common Linux distributions." msgstr "" "Các Binary chính thức được biên dịch bằng `Godot Engine buildroot `__, để những Binary này hoạt động trên bất " "kỳ distro Linux phổ thông nào (bao gồm các bản LTS)." #: ../../docs/about/list_of_features.rst:35 msgid "Android (editor support is experimental)." msgstr "Android (editor đang trong giai đoạn thử nghiệm)." #: ../../docs/about/list_of_features.rst:36 msgid "" ":ref:`Web browsers `. Experimental in 4.0, using " "Godot 3.x is recommended instead when targeting HTML5." msgstr "" ":ref:`Các trình duyệt Web `. Phiên bản 4.0 còn " "đang thử nghiệm nên hãy sử dụng Godot 3.x nếu bạn đang nhắm tới HTML5." #: ../../docs/about/list_of_features.rst:41 msgid "" "Linux supports rv64 (RISC-V), ppc64 & ppc32 (PowerPC), and loongarch64. " "However you must compile the editor for that platform (as well as export " "templates) yourself, no official downloads are currently provided. RISC-V " "compiling instructions can be found on the :ref:`doc_compiling_for_linuxbsd` " "page." msgstr "" "Linux hỗ trợ rv64 (RISC-V), ppc64 & ppc32 (PowerPC) và loongarch64. Tuy " "nhiên, bạn phải tự biên dịch trình soạn thảo cho nền tảng đó (cũng như xuất " "mẫu), hiện tại không có bản tải xuống chính thức nào được cung cấp. Hướng " "dẫn biên dịch RISC-V có thể được tìm thấy trên " "trang :ref:`doc_compiling_for_linuxbsd`." #: ../../docs/about/list_of_features.rst:46 msgid "**Runs exported projects:**" msgstr "**Chỉ chạy các Project được xuất bản:**" #: ../../docs/about/list_of_features.rst:48 msgid "iOS." msgstr "iOS." #: ../../docs/about/list_of_features.rst:49 msgid ":ref:`Consoles `." msgstr ":ref:`Các máy Console `." #: ../../docs/about/list_of_features.rst:51 msgid "" "Godot aims to be as platform-independent as possible and can be :ref:`ported " "to new platforms ` with relative ease." msgstr "" "Godot đặt mục tiêu trở nên độc lập nền tảng nhất có thể và có thể " "được :ref:`port sang nền tảng mới ` khá dễ." #: ../../docs/about/list_of_features.rst:56 #: ../../docs/getting_started/step_by_step/scripting_languages.rst:131 msgid "" "Projects written in C# using Godot 4 currently cannot be exported to the web " "platform. To use C# on that platform, consider Godot 3 instead. Android and " "iOS platform support is available as of Godot 4.2, but is experimental " "and :ref:`some limitations apply `." msgstr "" "Các Project viết bằng C# trên Godot 4 hiện chưa thể xuất bản cho nền Web. Để " "xài C# cho nền Web, cân nhắc sử dụng Godot 3. Hỗ trợ cho Android và iOS khả " "dụng trên Godot 4.2, tuy nhiên vẫn còn đang thử nghiệm cũng như " "còn :ref:`một số hạn chế `." #: ../../docs/about/list_of_features.rst:62 #: ../../docs/about/docs_changelog.rst:22 #: ../../docs/about/docs_changelog.rst:61 #: ../../docs/about/docs_changelog.rst:274 #: ../../docs/about/docs_changelog.rst:315 #: ../../docs/tutorials/editor/external_editor.rst:43 #: ../../docs/engine_details/development/compiling/compiling_with_dotnet.rst:204 msgid "Editor" msgstr "Editor" #: ../../docs/about/list_of_features.rst:64 #: ../../docs/about/list_of_features.rst:504 msgid "**Features:**" msgstr "**Các tính năng:**" #: ../../docs/about/list_of_features.rst:66 msgid "Scene tree editor." msgstr "Trình chỉnh sửa scene với cấu trúc dạng cây." #: ../../docs/about/list_of_features.rst:67 msgid "Built-in script editor." msgstr "Tích hợp trình gõ code." #: ../../docs/about/list_of_features.rst:68 msgid "" "Support for :ref:`external script editors ` such as " "Visual Studio Code or Vim." msgstr "" "Hỗ trợ :ref:`các trình gõ code bên ngoài ` như Visual " "Studio Code hay Vim." #: ../../docs/about/list_of_features.rst:70 msgid "GDScript :ref:`debugger `." msgstr ":ref:`Debugger ` cho GDScript." #: ../../docs/about/list_of_features.rst:72 msgid "Support for debugging in threads is available since 4.2." msgstr "Hỗ trợ debug trong các Thread kể từ phiên bản 4.2." #: ../../docs/about/list_of_features.rst:73 msgid "" "Visual profiler with CPU and GPU time indications for each step of the " "rendering pipeline." msgstr "" "Visual profiler với chỉ báo thời gian CPU và GPU thực hiện trong từng bước " "của quy trình render." #: ../../docs/about/list_of_features.rst:75 msgid "" "Performance monitoring tools, including :ref:`custom performance monitors " "`." msgstr "" "Các công cụ đo hiệu suất, bao gồm :ref:`theo dõi hiệu suất tùy chỉnh " "`." #: ../../docs/about/list_of_features.rst:77 msgid "Live script reloading." msgstr "Load lại script trực tiếp." #: ../../docs/about/list_of_features.rst:78 msgid "Live scene editing." msgstr "Load lại scene trực tiếp." #: ../../docs/about/list_of_features.rst:80 msgid "" "Changes will reflect in the editor and will be kept after closing the " "running project." msgstr "" "Các thay đổi được hiển thị trong editor và được giữ lại sau khi đóng project " "đang chạy." #: ../../docs/about/list_of_features.rst:82 msgid "Remote inspector." msgstr "Remote inspector." #: ../../docs/about/list_of_features.rst:84 msgid "" "Changes won't reflect in the editor and won't be kept after closing the " "running project." msgstr "" "Các thay đổi không hiển thị trong editor và không được giữ lại sau khi đóng " "project đang chạy." #: ../../docs/about/list_of_features.rst:86 msgid "Live camera replication." msgstr "Điều chỉnh camera trực tiếp." #: ../../docs/about/list_of_features.rst:88 msgid "Move the in-editor camera and see the result in the running project." msgstr "Di chuyển camera trong editor và xem kết quả trong project đang chạy." #: ../../docs/about/list_of_features.rst:90 msgid "Built-in offline class reference documentation." msgstr "Tích hợp sẵn thao khảo Class để tra cứu offline." #: ../../docs/about/list_of_features.rst:91 msgid "Use the editor in dozens of languages contributed by the community." msgstr "" "Sử dụng editor bằng hàng chục ngôn ngữ khác nhau do cộng đồng cung cấp." #: ../../docs/about/list_of_features.rst:93 msgid "**Plugins:**" msgstr "**Các Plugin:**" #: ../../docs/about/list_of_features.rst:95 msgid "" "Editor plugins can be downloaded from the :ref:`asset library " "` to extend editor functionality." msgstr "" "Các plugin có thể được tải về từ :ref:`asset library ` " "để mở rộng tính năng của editor." #: ../../docs/about/list_of_features.rst:97 msgid "" ":ref:`Create your own plugins ` using GDScript to add " "new features or speed up your workflow." msgstr "" ":ref:`Tự tạo plugin ` sử dụng GDScript để thêm tính năng " "mới hoặc tăng tốc quy trình làm việc của bạn." #: ../../docs/about/list_of_features.rst:99 msgid "" ":ref:`Download projects from the asset library ` " "in the Project Manager and import them directly." msgstr "" ":ref:`Tải các project từ asset library ` trong " "Project Manager rồi import tụi nó trực tiếp." #: ../../docs/about/list_of_features.rst:103 #: ../../docs/about/docs_changelog.rst:86 #: ../../docs/about/docs_changelog.rst:125 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.1.rst:120 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.2.rst:128 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.3.rst:88 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.3.rst:306 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.4.rst:104 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.4.rst:184 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.5.rst:49 #: ../../docs/tutorials/2d/index.rst:26 #: ../../docs/tutorials/2d/using_tilemaps.rst:58 #: ../../docs/tutorials/3d/index.rst:18 #: ../../docs/tutorials/performance/thread_safe_apis.rst:82 #: ../../docs/tutorials/rendering/index.rst:4 #: ../../docs/tutorials/rendering/viewports.rst:202 msgid "Rendering" msgstr "Render" #: ../../docs/about/list_of_features.rst:105 #: ../../docs/tutorials/rendering/renderers.rst:15 msgid "Godot 4 includes three renderers:" msgstr "Godot 4 bao gồm ba trình kết xuất đồ họa:" #: ../../docs/about/list_of_features.rst:107 #: ../../docs/tutorials/rendering/renderers.rst:17 msgid "" "**Forward+**. The most advanced renderer, suited for desktop platforms only. " "Used by default on desktop platforms. This renderer uses **Vulkan**, " "**Direct3D 12**, or **Metal** as the rendering driver, and it uses the " "**RenderingDevice** backend." msgstr "" "**Forward+**. Trình kết xuất tiên tiến nhất, chỉ phù hợp với nền tảng máy " "tính để bàn. Được sử dụng mặc định trên nền tảng máy tính để bàn. Trình kết " "xuất này sử dụng **Vulkan**, **Direct3D 12** hoặc **Metal** làm trình điều " "khiển kết xuất và sử dụng backend **RenderingDevice**." #: ../../docs/about/list_of_features.rst:110 #: ../../docs/tutorials/rendering/renderers.rst:20 msgid "" "**Mobile**. Fewer features, but renders simple scenes faster. Suited for " "mobile and desktop platforms. Used by default on mobile platforms. This " "renderer uses **Vulkan**, **Direct3D 12**, or **Metal** as the rendering " "driver, and it uses the **RenderingDevice** backend." msgstr "" "**Di động**. Ít tính năng hơn, nhưng render các cảnh đơn giản nhanh hơn. Phù " "hợp cho cả nền tảng di động và máy tính để bàn. Được sử dụng mặc định trên " "nền tảng di động. Trình render này sử dụng **Vulkan**, **Direct3D 12** hoặc " "**Metal** làm trình điều khiển render, và sử dụng backend " "**RenderingDevice**." #: ../../docs/about/list_of_features.rst:114 #: ../../docs/tutorials/rendering/renderers.rst:24 msgid "" "**Compatibility**, sometimes called **GL Compatibility**. The least advanced " "renderer, suited for low-end desktop and mobile platforms. Used by default " "on the web platform. This renderer uses **OpenGL** as the rendering driver." msgstr "" "**Compatibility**, chạy trên OpenGL 3.3 / OpenGL ES 3.0 / WebGL 2.0. Backend " "đồ họa kém sang nhất, phù hợp cho máy tính và di động cấu hình cùi bắp. Được " "sử dụng mặc định trên nền Web." #: ../../docs/about/list_of_features.rst:118 msgid "" "See :ref:`doc_renderers` for a detailed comparison of the rendering methods." msgstr "" "Xem :ref:`doc_system_requirements` để biết các yêu cầu về phần cứng và phần " "mềm." #: ../../docs/about/list_of_features.rst:121 msgid "2D graphics" msgstr "Đồ họa 2D" #: ../../docs/about/list_of_features.rst:123 msgid "Sprite, polygon and line rendering." msgstr "Vẽ Sprite, :abbr:`polygon (đa giác)` và :abbr:`line (đường thẳng)`." #: ../../docs/about/list_of_features.rst:125 msgid "" "High-level tools to draw lines and polygons such as :ref:`class_Polygon2D` " "and :ref:`class_Line2D`, with support for texturing." msgstr "" "Các công cụ cấp cao để vẽ polygon và line như :ref:`class_Polygon2D` " "và :ref:`class_Line2D`, hỗ trợ texture." #: ../../docs/about/list_of_features.rst:128 msgid "AnimatedSprite2D as a helper for creating animated sprites." msgstr "AnimatedSprite2D giúp tạo các sprite có animation." #: ../../docs/about/list_of_features.rst:129 msgid "Parallax layers." msgstr "Parallax layers (Hiệu ứng thị sai)." #: ../../docs/about/list_of_features.rst:131 msgid "Pseudo-3D support including preview in the editor." msgstr "" "Hỗ trợ :abbr:`Pseudo-3D (kỹ thuật tạo ra ảo giác về chiều sâu và không gian " "3D trong môi trường 2D)`, có thể xem trước trong editor." #: ../../docs/about/list_of_features.rst:133 msgid "" ":ref:`2D lighting ` with normal maps and specular " "maps." msgstr "" ":ref:`Ánh sáng 2D ` với normal map và specular " "map." #: ../../docs/about/list_of_features.rst:135 msgid "Point (omni/spot) and directional 2D lights." msgstr "Ánh sáng 2D dạng điểm (omni/spot) và ánh sáng 2D có hướng." #: ../../docs/about/list_of_features.rst:136 msgid "Hard or soft shadows (adjustable on a per-light basis)." msgstr "Đổ bóng cứng hoặc mềm (có thể điều chỉnh tùy theo từng ánh sáng)." #: ../../docs/about/list_of_features.rst:137 msgid "" "Custom shaders can access a real-time :abbr:`SDF (Signed Distance Field)` " "representation of the 2D scene based on :ref:`class_LightOccluder2D` nodes, " "which can be used for improved 2D lighting effects including 2D global " "illumination." msgstr "" "Các shader tùy chỉnh có thể truy cập vào biểu diễn :abbr:`SDF (Signed " "Distance Field: Đây là một hàm toán học cung cấp khoảng cách từ một điểm đến " "ranh giới gần nhất của một hình dạng. Trong Godot, SDF có thể được sử dụng " "để xác định xem một điểm có nằm trong một khu vực cụ thể hay không)` theo " "thời gian thực của cảnh 2D dựa trên các node :ref:`class_LightOccluder2D`, " "có thể được sử dụng để cải thiện hiệu ứng ánh sáng 2D bao gồm cả :abbr:`2D " "global illumination (chiếu sáng toàn cảnh 2D: Đây là kỹ thuật mô phỏng ánh " "sáng gián tiếp trong cảnh 2D, tạo ra hiệu ứng ánh sáng chân thực hơn)`." #: ../../docs/about/list_of_features.rst:141 msgid "" ":ref:`Font rendering ` using bitmaps, rasterization " "using FreeType or multi-channel signed distance fields (MSDF)." msgstr "" ":ref:`Kết xuất font chữ ` sử dụng bitmap, rasterization " "bằng FreeType hoặc multi-channel SDF (MSDF)." #: ../../docs/about/list_of_features.rst:144 msgid "" "Bitmap fonts can be exported using tools like BMFont, or imported from " "images (for fixed-width fonts only)." msgstr "" "Các font bitmap có thể được tạo bằng công cụ như BMFont, hoặc được import từ " "file ảnh (chỉ dùng cho font chữ có độ rộng cố định)." #: ../../docs/about/list_of_features.rst:146 msgid "" "Dynamic fonts support monochrome fonts as well as colored fonts (e.g. for " "emoji). Supported formats are TTF, OTF, WOFF1 and WOFF2." msgstr "" "Các font dynamic hỗ trợ font đơn sắc hoặc font có màu (như emoji). Các định " "dạng font được hỗ trợ: TTF, OTF, WOFF1 và WOFF2." #: ../../docs/about/list_of_features.rst:148 msgid "" "Dynamic fonts support optional font outlines with adjustable width and color." msgstr "" "Các font dynamic hỗ trợ đường viền chữ với độ rộng và màu sắc có thể điều " "chỉnh." #: ../../docs/about/list_of_features.rst:149 msgid "" "Dynamic fonts support variable fonts and OpenType features including " "ligatures." msgstr "" "Các font dynamic hỗ trợ các biến thể của font chữ và các tính năng của " "OpenType (như tính năng Ligature)." #: ../../docs/about/list_of_features.rst:150 msgid "" "Dynamic fonts support simulated bold and italic when the font file lacks " "those styles." msgstr "" "Trong trường hợp file font thiếu kiểu **bold** và *italic*, các font dynamic " "có thể giả lập những kiểu chữ này." #: ../../docs/about/list_of_features.rst:152 msgid "" "Dynamic fonts support oversampling to keep fonts sharp at higher resolutions." msgstr "" "Các font dynamic hỗ trợ :abbr:`oversampling (Là kỹ thuật sử dụng nhiều pixel " "hơn cần thiết để hiển thị một hình ảnh. Trong trường hợp này, là sử dụng " "nhiều pixel hơn để hiển thị các ký tự của font)` để giữ cho chữ sắc nét ở độ " "phân giải cao." #: ../../docs/about/list_of_features.rst:153 msgid "" "Dynamic fonts support subpixel positioning to make fonts crisper at low " "sizes." msgstr "" "Các font dynamic hỗ trợ :abbr:`subpixel (Là kỹ thuật tận dụng các điểm ảnh " "phụ của màn hình để hiển thị font chữ chi tiết hơn, đặc biệt hữu ích với " "kích thước font nhỏ. Thường có 3 điểm ảnh phụ (đỏ, xanh lá, xanh dương) " "trong mỗi điểm ảnh chính)` để làm font chữ sắc nét ở kích thước nhỏ." #: ../../docs/about/list_of_features.rst:154 msgid "" "Dynamic fonts support LCD subpixel optimizations to make fonts even crisper " "at low sizes." msgstr "" "Các font dynamic hỗ trợ tối ưu hóa điểm ảnh phụ trên màn LCD để làm font chữ " "sắc nét hơn nữa ở kích thước nhỏ." #: ../../docs/about/list_of_features.rst:155 msgid "" "Signed distance field fonts can be scaled at any resolution without " "requiring re-rasterization. Multi-channel usage makes SDF fonts scale down " "to lower sizes better compared to monochrome SDF fonts." msgstr "" "Các font SDF có thể được scale ở bất kỳ độ phân giải nào mà không cần phải " "raster lại. Việc sử dụng multi-channel giúp font SDF scale xuống kích thước " "nhỏ tốt hơn so với font SDF đơn sắc." #: ../../docs/about/list_of_features.rst:159 msgid "" "GPU-based :ref:`particles ` with support " "for :ref:`custom particle shaders `." msgstr "" "GPU-based :ref:`particles ` (hệ thống hạt xử lý " "trên GPU) có hỗ trợ :ref:`shader hạt tuỳ chỉnh `." #: ../../docs/about/list_of_features.rst:161 #: ../../docs/about/list_of_features.rst:352 msgid "CPU-based particles." msgstr "CPU-based particles (hệ thống hạt xử lý trên CPU)." #: ../../docs/about/list_of_features.rst:162 msgid "" "Optional :ref:`2D HDR rendering " "` for better glow " "capabilities." msgstr "" "Tùy chọn :ref:`2D HDR rendering " "` cho khả năng chiếu " "sáng chất lượng hơn." #: ../../docs/about/list_of_features.rst:166 msgid "2D tools" msgstr "Các công cụ 2D" #: ../../docs/about/list_of_features.rst:168 msgid ":ref:`TileMaps ` for 2D tile-based level design." msgstr ":ref:`TileMaps ` để thiết kế màn chơi 2D." #: ../../docs/about/list_of_features.rst:169 msgid "2D camera with built-in smoothing and drag margins." msgstr "Camera 2D tích hợp sẵn smoothing và drag margins." #: ../../docs/about/list_of_features.rst:170 msgid "Path2D node to represent a path in 2D space." msgstr "Node Path2D dùng để biểu diễn một path trong không gian 2D." #: ../../docs/about/list_of_features.rst:172 #: ../../docs/about/list_of_features.rst:413 msgid "Can be drawn in the editor or generated procedurally." msgstr "Path có thể được vẽ trong editor hoặc được tạo ra bằng mã lệnh." #: ../../docs/about/list_of_features.rst:173 msgid "PathFollow2D node to make nodes follow a Path2D." msgstr "Node PathFollow2D khiến các node đi theo một Path2D." #: ../../docs/about/list_of_features.rst:175 msgid ":ref:`2D geometry helper class `." msgstr ":ref:`2D geometry helper class `." #: ../../docs/about/list_of_features.rst:178 msgid "2D physics" msgstr "Vật lý 2D" #: ../../docs/about/list_of_features.rst:180 #: ../../docs/about/list_of_features.rst:423 msgid "**Physics bodies:**" msgstr "**Physics bodies:**" #: ../../docs/about/list_of_features.rst:182 #: ../../docs/about/list_of_features.rst:425 msgid "Static bodies." msgstr "Các Static body." #: ../../docs/about/list_of_features.rst:183 #: ../../docs/about/list_of_features.rst:426 msgid "" "Animatable bodies (for objects moving only by script or animation, such as " "doors and platforms)." msgstr "" "Các Animatable body (dành cho các vật thể chỉ di chuyển bằng script hoặc " "animation, chẳng hạn như cửa hoặc bệ)." #: ../../docs/about/list_of_features.rst:184 #: ../../docs/about/list_of_features.rst:427 msgid "Rigid bodies." msgstr "Các Rigid body." #: ../../docs/about/list_of_features.rst:185 #: ../../docs/about/list_of_features.rst:428 msgid "Character bodies." msgstr "Các Character body." #: ../../docs/about/list_of_features.rst:186 #: ../../docs/about/list_of_features.rst:430 msgid "Joints." msgstr "Các Joint (khớp nối)." #: ../../docs/about/list_of_features.rst:187 #: ../../docs/about/list_of_features.rst:433 msgid "Areas to detect bodies entering or leaving it." msgstr "" "Các Area được dùng để detect xem có body nào đi vào hoặc rời khỏi nó không." #: ../../docs/about/list_of_features.rst:189 #: ../../docs/about/list_of_features.rst:435 msgid "**Collision detection:**" msgstr "**Phát hiện va chạm:**" #: ../../docs/about/list_of_features.rst:191 msgid "" "Built-in shapes: line, box, circle, capsule, world boundary (infinite plane)." msgstr "" "Các dạng hình học được tích hợp sẵn: line, box, circle, capsule, world " "boundary (infinite plane)." #: ../../docs/about/list_of_features.rst:192 msgid "" "Collision polygons (can be drawn manually or generated from a sprite in the " "editor)." msgstr "" "Các Collision polygon (có thể được vẽ thủ công hoặc được sinh từ một sprite " "trong editor)." #: ../../docs/about/list_of_features.rst:195 msgid "3D graphics" msgstr "Đồ họa 3D" #: ../../docs/about/list_of_features.rst:197 msgid "HDR rendering with sRGB." msgstr "HDR rendering với sRGB." #: ../../docs/about/list_of_features.rst:198 msgid "Perspective, orthographic and frustum-offset cameras." msgstr "Camera perspective, orthographic và frustum-offset." #: ../../docs/about/list_of_features.rst:199 msgid "" "When using the Forward+ renderer, a depth prepass is used to improve " "performance in complex scenes by reducing the cost of overdraw." msgstr "" "Khi sử dụng backend Forward+, kỹ thuật :abbr:`depth prepass (trước khi " "render toàn bộ cảnh, hệ thống sẽ xử lý trước thông tin về độ sâu để xác định " "những vùng nào cần vẽ lại, từ đó cải thiện hiệu suất)` được sử dụng để cải " "thiện hiệu suất trong các cảnh phức tạp." #: ../../docs/about/list_of_features.rst:201 msgid "" ":ref:`doc_variable_rate_shading` on supported GPUs in Forward+ and Mobile." msgstr "" ":ref:`doc_variable_rate_shading` trên các GPU được hỗ trợ trong Forward+ và " "Forward Mobile." #: ../../docs/about/list_of_features.rst:203 msgid "**Physically-based rendering (built-in material features):**" msgstr "**Render dựa trên vật lý (tích hợp các tính năng vật liệu):**" #: ../../docs/about/list_of_features.rst:205 msgid "Follows the Disney PBR model." msgstr "Áp dụng mô hình Disney PBR." #: ../../docs/about/list_of_features.rst:206 msgid "" "Supports Burley, Lambert, Lambert Wrap (half-Lambert) and Toon diffuse " "shading modes." msgstr "" "Hỗ trợ các chế độ diffuse shading Burley, Lambert, Lambert Wrap (bán " "Lambert) và Toon." #: ../../docs/about/list_of_features.rst:207 msgid "Supports Schlick-GGX, Toon and Disabled specular shading modes." msgstr "Hỗ trợ các chế độ specular shading Schlick-GGX, Toon và Disabled." #: ../../docs/about/list_of_features.rst:208 msgid "Uses a roughness-metallic workflow with support for ORM textures." msgstr "" "Sử dụng quy trình roughness-metallic với hỗ trợ cho các :abbr:`texture ORM " "(Các texture đặc biệt lưu trữ thông tin về độ nhám (O), kim loại (M), và các " "thuộc tính khác (R) của vật liệu)`." #: ../../docs/about/list_of_features.rst:209 msgid "" "Uses horizon specular occlusion (Filament model) to improve material " "appearance." msgstr "" "Sử dụng horizon specular occlusion (mô hình Filament) để cải thiện vẻ ngoài " "của vật liệu." #: ../../docs/about/list_of_features.rst:210 msgid "Normal mapping." msgstr "Normal mapping." #: ../../docs/about/list_of_features.rst:211 msgid "" "Parallax/relief mapping with automatic level of detail based on distance." msgstr "Ánh xạ parallax/relief tự động với độ chi tiết dựa trên khoảng cách." #: ../../docs/about/list_of_features.rst:212 msgid "Detail mapping for the albedo and normal maps." msgstr "" "Detail mapping cho các map :abbr:`albedo và normal (Kỹ thuật này thêm các " "chi tiết nhỏ lên texture chính, giúp cải thiện độ chân thực của vật liệu)`." #: ../../docs/about/list_of_features.rst:213 msgid "Sub-surface scattering and transmittance." msgstr "" ":abbr:`Sub-surface scattering và transmittance (Kỹ thuật này mô phỏng cách " "ánh sáng xuyên qua vật liệu bán trong suốt, tạo ra hiệu ứng chân thực hơn " "cho da, ngọc bích hoặc các vật liệu khác)`." #: ../../docs/about/list_of_features.rst:214 msgid "" "Screen-space refraction with support for material roughness (resulting in " "blurry refraction)." msgstr "" ":abbr:`Screen-space refraction (Kỹ thuật này tính toán cách ánh sáng bị bẻ " "cong khi đi qua vật liệu trong suốt, đồng thời tính đến độ nhám của vật liệu " "để tạo ra hiệu ứng mờ)` hỗ trợ độ nhám vật liệu, tạo ra khúc xạ mờ." #: ../../docs/about/list_of_features.rst:215 msgid "Proximity fade (soft particles) and distance fade." msgstr "" "Proximity fade (soft particles) và distance fade (mờ dần theo khoảng cách)." #: ../../docs/about/list_of_features.rst:216 msgid "" "Distance fade can use alpha blending or dithering to avoid going through the " "transparent pipeline." msgstr "" "Mờ dần theo khoảng cách có thể sử dụng :abbr:`alpha blending (Phương pháp " "trộn các pixel của vật thể với pixel nền)` hoặc :abbr:`dithering (Kỹ thuật " "sử dụng các điểm ảnh nhiều màu để tạo ra hiệu ứng mờ dần mượt mà hơn)` để " "tránh đi qua :abbr:`pipeline trong suốt (Quy trình xử lý riêng dành cho các " "vật liệu trong suốt)`." #: ../../docs/about/list_of_features.rst:218 msgid "Dithering can be determined on a per-pixel or per-object basis." msgstr "" "Dithering có thể được xác định trên từng pixel hoặc trên từng đối tượng." #: ../../docs/about/list_of_features.rst:220 msgid "**Real-time lighting:**" msgstr "**Ánh sáng thời gian thực:**" #: ../../docs/about/list_of_features.rst:222 msgid "Directional lights (sun/moon). Up to 4 per scene." msgstr "Ánh sáng có hướng (mặt trời/mặt trăng). Tối đa 4 cái mỗi scene." #: ../../docs/about/list_of_features.rst:223 msgid "Omnidirectional lights." msgstr "Ánh sáng đa hướng." #: ../../docs/about/list_of_features.rst:224 msgid "Spot lights with adjustable cone angle and attenuation." msgstr "Ánh sáng điểm có thể điều chỉnh được cường độ và góc mở." #: ../../docs/about/list_of_features.rst:225 msgid "" "Specular, indirect light, and volumetric fog energy can be adjusted on a per-" "light basis." msgstr "" "Mỗi ánh sáng có thể điều chỉnh cường độ phản chiếu, ánh sáng gián tiếp và " "khối sương mù." #: ../../docs/about/list_of_features.rst:226 msgid "" "Adjustable light \"size\" for fake area lights (will also make shadows " "blurrier)." msgstr "" "Các khu vực ánh sáng giả (fake area lights) có thể điều chỉnh được kích " "thước nguồn sáng (cũng làm bóng nhòe đi)." #: ../../docs/about/list_of_features.rst:227 msgid "" "Optional distance fade system to fade distant lights and their shadows, " "improving performance." msgstr "" "Hệ thống mờ dần theo khoảng cách để làm mờ các đèn ở xa và bóng của chúng, " "cải thiện hiệu suất." #: ../../docs/about/list_of_features.rst:228 msgid "" "When using the Forward+ renderer (default on desktop), lights are rendered " "with clustered forward optimizations to decrease their individual cost. " "Clustered rendering also lifts any limits on the number of lights that can " "be used on a mesh." msgstr "" "Khi sử dụng backend Forward+ (mặc định trên desktop), đèn được render với " "tối ưu clustered forward để không phải render từng cái. Kiểu render này còn " "loại bỏ giới hạn về số lượng nguồn sáng có thể sử dụng trên một mesh." #: ../../docs/about/list_of_features.rst:231 msgid "" "When using the Mobile renderer, up to 8 omni lights and 8 spot lights can be " "displayed per mesh resource. Baked lighting can be used to overcome this " "limit if needed." msgstr "" "Khi sử dụng backend Forward Mobile, tối đa 8 nguồn sáng đa hướng và 8 nguồn " "sáng dạng điểm có thể được hiển thị trên mỗi mesh." #: ../../docs/about/list_of_features.rst:235 msgid "**Shadow mapping:**" msgstr "**Đổ bóng:**" #: ../../docs/about/list_of_features.rst:237 msgid "" "*DirectionalLight:* Orthogonal (fastest), PSSM 2-split and 4-split. Supports " "blending between splits." msgstr "" "*DirectionalLight:* Orthogonal (nhanh nhất), PSSM 2-split và 4-split. Hỗ trợ " "trộn bóng giữa các vùng." #: ../../docs/about/list_of_features.rst:239 msgid "" "*OmniLight:* Dual paraboloid (fast) or cubemap (slower but more accurate). " "Supports colored projector textures in the form of panoramas." msgstr "" "*OmniLight:* Dual paraboloid (nhanh) hoặc cubemap (chậm hơn nhưng chính xác " "hơn). Hỗ trợ texture projector màu dưới dạng panorama." #: ../../docs/about/list_of_features.rst:241 msgid "*SpotLight:* Single texture. Supports colored projector textures." msgstr "" "*SpotLight:* Chỉ sử dụng một texture để tính toán đổ bóng. Hỗ trợ texture " "projector màu." #: ../../docs/about/list_of_features.rst:242 msgid "" "Shadow normal offset bias and shadow pancaking to decrease the amount of " "visible shadow acne and peter-panning." msgstr "" "Shadow normal offset bias và shadow pancaking làm giảm thiểu các lỗi đổ bóng " "thường gặp như :abbr:`shadow acne (bóng bị răng cưa)` và :abbr:`peter-" "panning (bóng tách rời khỏi vật thể)`." #: ../../docs/about/list_of_features.rst:244 msgid "" ":abbr:`PCSS (Percentage Closer Soft Shadows)`-like shadow blur based on the " "light size and distance from the surface the shadow is cast on." msgstr "" "Làm mờ bóng kiểu :abbr:`PCSS (Percentage Closer Soft Shadows)`: Kỹ thuật làm " "mờ bóng dựa trên kích thước ánh sáng và khoảng cách đến bề mặt nhận bóng, " "giúp tạo hiệu ứng đổ bóng chân thực hơn." #: ../../docs/about/list_of_features.rst:246 msgid "Adjustable shadow blur on a per-light basis." msgstr "Độ mờ bóng có thể điều chỉnh riêng cho từng nguồn sáng." #: ../../docs/about/list_of_features.rst:248 msgid "**Global illumination with indirect lighting:**" msgstr "**Chiếu sáng toàn cảnh với ánh sáng gián tiếp:**" #: ../../docs/about/list_of_features.rst:250 msgid "" ":ref:`Baked lightmaps ` (fast, but can't be updated " "at runtime)." msgstr "" ":ref:`Baked lightmaps ` (nhanh, nhưng không thể " "update thời gian thực)." #: ../../docs/about/list_of_features.rst:252 msgid "" "Supports baking indirect light only or baking both direct and indirect " "lighting. The bake mode can be adjusted on a per-light basis to allow for " "hybrid light baking setups." msgstr "" "Hỗ trợ duy nhất ánh sáng tĩnh gián tiếp, hoặc đồng thời cả ánh sáng tĩnh " "trực tiếp và gián tiếp. Hỗ trợ ánh sáng tĩnh hybrid." #: ../../docs/about/list_of_features.rst:255 msgid "" "Supports lighting dynamic objects using automatic and manually placed probes." msgstr "" "Hỗ trợ chiếu sáng các vật thể động bằng cách sử dụng probe (đầu dò) được đặt " "tự động hoặc thủ công." #: ../../docs/about/list_of_features.rst:256 msgid "" "Optionally supports directional lighting and rough reflections based on " "spherical harmonics." msgstr "" "Tùy chọn hỗ trợ ánh sáng định hướng và phản xạ bề mặt gồ ghề dựa trên " "spherical harmonics." #: ../../docs/about/list_of_features.rst:258 msgid "" "Lightmaps are baked on the GPU using compute shaders (much faster compared " "to CPU lightmapping). Baking can only be performed from the editor, not in " "exported projects." msgstr "" "Các Lightmap được tính toán trước trên GPU bằng compute shaders (nhanh hơn " "nhiều so với CPU lightmapping). Việc tính toán trước chỉ có thể thực hiện từ " "editor, không thực hiện được trong các project đã xuất bản." #: ../../docs/about/list_of_features.rst:261 msgid "" "Supports GPU-based :ref:`denoising ` with " "JNLM, or CPU/GPU-based denoising with OIDN." msgstr "" "Hỗ trợ :ref:`khử nhiễu ` trên GPU với JNLM, " "hoặc khử nhiễu trên CPU/GPU với OIDN." #: ../../docs/about/list_of_features.rst:264 msgid "" ":ref:`Voxel-based GI probes `. Supports dynamic lights " "*and* dynamic occluders, while also supporting reflections. Requires a fast " "baking step which can be performed in the editor or at runtime (including " "from an exported project)." msgstr "" ":ref:`Voxel-based GI probes `. Hỗ trợ nguồn sáng động " "*và* vật chắn động, trong khi vẫn hỗ trợ phản chiếu. Phải thiết lập ánh sáng " "tĩnh trước trong editor hoặc lúc thực thi (bao gồm cả project đã được xuất " "bản)." #: ../../docs/about/list_of_features.rst:268 msgid "" ":ref:`Signed-distance field GI ` designed for large open " "worlds. Supports dynamic lights, but not dynamic occluders. Supports " "reflections. No baking required." msgstr "" ":ref:`Signed-distance field GI ` được thiết kế cho game thế " "giới mở rộng lớn. Hỗ trợ nguồn sáng động, nhưng không hỗ trợ vật chắn động. " "Hỗ trợ phản chiếu. Không yêu cầu thiết lập trước." #: ../../docs/about/list_of_features.rst:271 msgid "" ":ref:`Screen-space indirect lighting (SSIL) " "` at half or full resolution. " "Fully real-time and supports any kind of emissive light source (including " "decals)." msgstr "" ":ref:`Screen-space indirect lighting (SSIL) " "` ở phân nửa hoặc full độ phân " "giải. Hoạt động hoàn toàn theo thời gian thực và hỗ trợ bất kỳ loại nguồn " "sáng nào (bao gồm cả decal)." #: ../../docs/about/list_of_features.rst:274 msgid "" "VoxelGI and SDFGI use a deferred pass to allow for rendering GI at half " "resolution to improve performance (while still having functional MSAA " "support)." msgstr "" "VoxelGI và SDFGI sử dụng deferred pass (chuyển tiếp hoãn): Kỹ thuật này cho " "phép render GI ở độ phân giải giảm một nửa để cải thiện hiệu suất (vẫn hỗ " "trợ MSAA - Multisample Anti-Aliasing)." #: ../../docs/about/list_of_features.rst:277 msgid "**Reflections:**" msgstr "**Phản chiếu:**" #: ../../docs/about/list_of_features.rst:279 msgid "" "Voxel-based reflections (when using GI probes) and SDF-based reflections " "(when using signed distance field GI). Voxel-based reflections are visible " "on transparent surfaces, while rough SDF-based reflections are visible on " "transparent surfaces." msgstr "" "Phản chiếu dựa trên voxel (khi sử dụng GI probe) và phản chiếu dựa trên SDF " "(khi sử dụng signed distance field GI). Phản chiếu dựa trên voxel nhìn thấy " "được trên các bề mặt trong suốt, trong khi phản xạ SDF gồ ghề chỉ nhìn thấy " "được trên các bề mặt không trong suốt." #: ../../docs/about/list_of_features.rst:283 msgid "" "Fast baked reflections or slow real-time reflections using ReflectionProbe. " "Parallax box correction can optionally be enabled." msgstr "" ":abbr:`Fast baked reflections (phản chiếu tĩnh, được tạo lúc thiết kế)` " "hoặc :abbr:`slow real-time reflections (phản chiếu động, được tạo lúc thực " "thi)` sử dụng ReflectionProbe. Parallax box correction có thể được bật tùy ý." #: ../../docs/about/list_of_features.rst:285 msgid "Screen-space reflections with support for material roughness." msgstr "Screen-space reflections với hỗ trợ độ nhám vật liệu." #: ../../docs/about/list_of_features.rst:286 msgid "" "Reflection techniques can be mixed together for greater accuracy or " "scalability." msgstr "" "Có thể kết hợp các kỹ thuật phản chiếu khác nhau để tăng độ chính xác hoặc " "khả năng mở rộng." #: ../../docs/about/list_of_features.rst:287 msgid "" "When using the Forward+ renderer (default on desktop), reflection probes are " "rendered with clustered forward optimizations to decrease their individual " "cost. Clustered rendering also lifts any limits on the number of reflection " "probes that can be used on a mesh." msgstr "" "Khi sử dụng backend Forward+ (mặc định trên desktop), các reflection probe " "được render với tối ưu hóa clustered forward để khỏi phải render từng cái " "riêng lẻ. Kiểu render này còn loại bỏ giới hạn về số lượng reflection probe " "có thể sử dụng trên một mesh." #: ../../docs/about/list_of_features.rst:290 msgid "" "When using the Mobile renderer, up to 8 reflection probes can be displayed " "per mesh resource. When using the Compatibility renderer, up to 2 reflection " "probes can be displayed per mesh resource." msgstr "" "Khi sử dụng backend Forward Mobile, tối đa 8 reflection probe có thể được " "hiển thị trên mỗi mesh." #: ../../docs/about/list_of_features.rst:294 msgid "**Decals:**" msgstr "**Các Decal:**" #: ../../docs/about/list_of_features.rst:296 msgid "" ":ref:`Supports albedo `, emissive, :abbr:`ORM (Occlusion " "Roughness Metallic)`, and normal mapping." msgstr "" ":ref:`Hỗ trợ albedo `, emissive, :abbr:`ORM (Occlusion " "Roughness Metallic)`, và normal mapping." #: ../../docs/about/list_of_features.rst:298 msgid "" "Texture channels are smoothly overlaid on top of the underlying material, " "with support for normal/ORM-only decals." msgstr "" "Các kênh texture được phủ lên trên vật liệu nền, hỗ trợ cả decal normal/ORM-" "only." #: ../../docs/about/list_of_features.rst:300 msgid "" "Support for normal fade to fade the decal depending on its incidence angle." msgstr "" "Hỗ trợ normal fade (làm mờ theo pháp tuyến) để làm mờ decal dựa trên góc tới " "của ánh sáng." #: ../../docs/about/list_of_features.rst:301 msgid "" "Does not rely on runtime mesh generation. This means decals can be used on " "complex skinned meshes with no performance penalty, even if the decal moves " "every frame." msgstr "" "Không phụ thuộc vào việc sinh mesh thời gian thực. Điều này cho phép sử dụng " "decal trên các mesh phức tạp có skinning mà không ảnh hưởng đến hiệu suất, " "ngay cả khi decal di chuyển mỗi khung hình." #: ../../docs/about/list_of_features.rst:303 msgid "" "Support for nearest, bilinear, trilinear or anisotropic texture filtering " "(configured globally)." msgstr "Hỗ trợ lọc texture: nearest, bilinear, trilinear hoặc anisotropic." #: ../../docs/about/list_of_features.rst:304 msgid "" "Optional distance fade system to fade distant decals, improving performance." msgstr "" "Hệ thống mờ dần theo khoảng cách để làm mờ các decal ở xa, cải thiện hiệu " "suất." #: ../../docs/about/list_of_features.rst:305 msgid "" "When using the Forward+ renderer (default on desktop), decals are rendered " "with clustered forward optimizations to decrease their individual cost. " "Clustered rendering also lifts any limits on the number of decals that can " "be used on a mesh." msgstr "" "Khi sử dụng backend Forward+ (mặc định trên desktop), decal được render với " "tối ưu hóa clustered forward để khỏi hải render từng cái lẻ tẻ. Kiểu render " "này còn loại bỏ giới hạn về số lượng decal có thể sử dụng trên một mesh." #: ../../docs/about/list_of_features.rst:308 msgid "" "When using the Mobile renderer, up to 8 decals can be displayed per mesh " "resource." msgstr "" "Khi sử dụng backend Forward Mobile, tối đa 8 decal có thể được hiển thị trên " "mỗi mesh." #: ../../docs/about/list_of_features.rst:311 msgid "**Sky:**" msgstr "**Bầu trời:**" #: ../../docs/about/list_of_features.rst:313 msgid "Panorama sky (using an HDRI)." msgstr "" ":abbr:`Panorama sky sử dụng HDRI (Sử dụng một texture 360 độ có dải sáng " "rộng để tạo ra hiệu ứng bầu trời chân thực)`." #: ../../docs/about/list_of_features.rst:314 msgid "" "Procedural sky and Physically-based sky that respond to the " "DirectionalLights in the scene." msgstr "" "Procedural sky và Physically-based sky phản hồi với DirectionalLights trong " "scene." #: ../../docs/about/list_of_features.rst:315 msgid "" "Support for :ref:`custom sky shaders `, which can be " "animated." msgstr "Hỗ trợ :ref:`custom sky shaders `, có animation." #: ../../docs/about/list_of_features.rst:316 msgid "" "The radiance map used for ambient and specular light can be updated in real-" "time depending on the quality settings chosen." msgstr "" "Radiance map được sử dụng cho ánh sáng môi trường và ánh sáng phản chiếu có " "thể được cập nhật theo thời gian thực và có thể thay đổi cài đặt chất lượng." #: ../../docs/about/list_of_features.rst:319 msgid "**Fog:**" msgstr "**Sương mù:**" #: ../../docs/about/list_of_features.rst:321 msgid "Exponential depth fog." msgstr "" "Sương mù theo độ sâu theo hàm mũ (Exponential depth fog): Sương mù dày dần " "theo độ sâu, các vật thể xa mờ hơn." #: ../../docs/about/list_of_features.rst:322 msgid "Exponential height fog." msgstr "" "Sương mù theo độ cao theo hàm mũ (Exponential height fog): Sương mù dày dần " "theo độ cao, bầu trời sáng hơn ở phía trên." #: ../../docs/about/list_of_features.rst:323 msgid "" "Support for automatic fog color depending on the sky color (aerial " "perspective)." msgstr "Hỗ trợ màu sương tự động dựa trên màu bầu trời (aerial perspective)." #: ../../docs/about/list_of_features.rst:324 msgid "Support for sun scattering in the fog." msgstr "Hỗ trợ tán xạ mặt trời trong sương." #: ../../docs/about/list_of_features.rst:325 msgid "" "Support for controlling how much fog rendering should affect the sky, with " "separate controls for traditional and volumetric fog." msgstr "" "Kiểm soát mức độ ảnh hưởng của sương mù lên bầu trời: Cho phép kiểm soát " "tách biệt cho sương mù truyền thống (traditional) và sương mù dạng khối " "(volumetric)." #: ../../docs/about/list_of_features.rst:327 msgid "Support for making specific materials ignore fog." msgstr "" "Cho phép vật liệu nhất định :abbr:`không bị ảnh hưởng (Ví dụ như kính sẽ " "không bị mờ đi bởi sương mù)` bởi sương mù." #: ../../docs/about/list_of_features.rst:329 msgid "**Volumetric fog:**" msgstr "**Sương mù dạng khối (Volumetric fog):**" #: ../../docs/about/list_of_features.rst:331 msgid "" "Global :ref:`volumetric fog ` that reacts to lights and " "shadows." msgstr "" ":ref:`Sương mù dạng khối ` toàn cảnh phản ứng với ánh " "sáng và đổ bóng." #: ../../docs/about/list_of_features.rst:332 msgid "" "Volumetric fog can take indirect light into account when using VoxelGI or " "SDFGI." msgstr "" "Sương mù dạng khối có thể xài ánh sáng gián tiếp khi sử dụng VoxelGI hoặc " "SDFGI." #: ../../docs/about/list_of_features.rst:333 msgid "" "Fog volume nodes that can be placed to add fog to specific areas (or remove " "fog from specific areas). Supported shapes include box, ellipse, cone, " "cylinder, and 3D texture-based density maps." msgstr "" "Các node về sương mù có thể được đặt để thêm hoặc bớt sương mù trong các khu " "vực cụ thể. Các hình dạng được hỗ trợ bao gồm box, ellipse, cone, cylinder " "và các density map dựa trên texture 3D." #: ../../docs/about/list_of_features.rst:335 msgid "Each fog volume can have its own custom shader." msgstr "Mỗi khối sương mù có thể có shader tùy chỉnh riêng." #: ../../docs/about/list_of_features.rst:336 msgid "Can be used together with traditional fog." msgstr "Có thể kết hợp với sương mù truyền thống." #: ../../docs/about/list_of_features.rst:338 msgid "**Particles:**" msgstr "**Hạt:**" #: ../../docs/about/list_of_features.rst:340 msgid "" "GPU-based particles with support for subemitters (2D + 3D), trails (2D + " "3D), attractors (3D only) and collision (2D + 3D)." msgstr "" "Hạt dựa trên GPU với hỗ trợ cho :abbr:`subemitter (Phát ra các hạt thứ cấp " "từ các hạt chính, 2D và 3D)`, :abbr:`trail (Hiệu ứng vệt đuôi để lại bởi các " "hạt di chuyển, 2D và 3D)`, :abbr:`attractor (Vật thể hút các hạt về phía nó, " "chỉ 3D)` và :abbr:`collision (Kiểm tra va chạm giữa hạt và các vật thể khác, " "2D và 3D)`." #: ../../docs/about/list_of_features.rst:343 msgid "" "3D particle attractor shapes supported: box, sphere and 3D vector fields." msgstr "" "Các dạng hình học hỗ trợ attractor: box, sphere và các 3D vector field." #: ../../docs/about/list_of_features.rst:344 msgid "" "3D particle collision shapes supported: box, sphere, baked signed distance " "field and real-time heightmap (suited for open world weather effects)." msgstr "" "Các dạng hình học hỗ trợ collision: box, sphere, SDF tĩnh và heightmap động " "(thích hợp cho các hiệu ứng thời tiết thế giới mở)." #: ../../docs/about/list_of_features.rst:346 msgid "" "2D particle collision is handled using a signed distance field generated in " "real-time based on :ref:`class_LightOccluder2D` nodes in the scene." msgstr "" "Va chạm hạt 2D sử dụng SDF được tạo theo thời gian thực dựa trên các node " "LightOccluder2D trong scene." #: ../../docs/about/list_of_features.rst:348 msgid "" "Trails can use the built-in ribbon trail and tube trail meshes, or custom " "meshes with skeletons." msgstr "" "Các trail có thể sử dụng các mesh ribbon trail và tube trail được tích hợp " "sẵn, hoặc xài custom mesh với khung xương." #: ../../docs/about/list_of_features.rst:350 msgid "Support for custom particle shaders with manual emission." msgstr "Hỗ trợ các custom particle shader với manual emission." #: ../../docs/about/list_of_features.rst:354 msgid "**Post-processing:**" msgstr "**Hậu kỳ:**" #: ../../docs/about/list_of_features.rst:356 #, fuzzy msgid "Tonemapping (Linear, Reinhard, Filmic, ACES, AgX)." msgstr "Tonemapping (Linear, Reinhard, Filmic, ACES)." #: ../../docs/about/list_of_features.rst:357 msgid "" "Automatic exposure adjustments based on viewport brightness (and manual " "exposure override)." msgstr "" "Điều chỉnh phơi sáng tự động dựa trên độ sáng viewport (hoặc chỉnh thủ công)." #: ../../docs/about/list_of_features.rst:358 msgid "" "Near and far depth of field with adjustable bokeh simulation (box, hexagon, " "circle)." msgstr "" ":abbr:`Depth of Field (Tạo hiệu ứng mờ dần các vật thể ở ngoài vùng lấy " "nét)` gần và xa với hỗ trợ :abbr:`mô phỏng bokeh (hiệu ứng vùng sáng ngoài " "nét)` với các hình dạng box, hexagon, circle." #: ../../docs/about/list_of_features.rst:359 msgid "Screen-space ambient occlusion (SSAO) at half or full resolution." msgstr "" "Screen-space ambient occlusion (SSAO) ở phân nửa hoặc full độ phân giải." #: ../../docs/about/list_of_features.rst:360 msgid "" "Glow/bloom with optional bicubic upscaling and several blend modes " "available: Screen, Soft Light, Add, Replace, Mix." msgstr "" ":abbr:`Glow/bloom (Hiệu ứng hắt sáng xung quanh các vật thể sáng)` với tùy " "chọn bicubic upscaling và một vài chế độ trộn: Screen, Soft Light, Add, " "Replace, Mix." #: ../../docs/about/list_of_features.rst:362 msgid "Glow can have a colored dirt map texture, acting as a lens dirt effect." msgstr "" "Hiệu ứng hắt sáng với colored dirt map texture, mô phỏng vết bẩn trên ống " "kính." #: ../../docs/about/list_of_features.rst:363 msgid "" "Glow can be :ref:`used as a screen-space blur effect " "`." msgstr "" "Glow có thể :ref:`được sử dụng như hiệu ứng screen-space blur " "`." #: ../../docs/about/list_of_features.rst:364 msgid "Color correction using a one-dimensional ramp or a 3D LUT texture." msgstr "Hiệu chỉnh màu sắc sử dụng bảng màu ramp 1D hoặc texture LUT 3D." #: ../../docs/about/list_of_features.rst:365 msgid "Roughness limiter to reduce the impact of specular aliasing." msgstr "Roughness limiter giảm thiểu hiện tượng răng cưa trên các điểm sáng." #: ../../docs/about/list_of_features.rst:366 msgid "Brightness, contrast and saturation adjustments." msgstr "Điều chỉnh độ sáng, độ tương phản và độ bão hòa." #: ../../docs/about/list_of_features.rst:368 msgid "**Texture filtering:**" msgstr "**Lọc texture:**" #: ../../docs/about/list_of_features.rst:370 msgid "Nearest, bilinear, trilinear or anisotropic filtering." msgstr "Nearest, bilinear, trilinear hoặc anisotropic." #: ../../docs/about/list_of_features.rst:371 msgid "" "Filtering options are defined on a per-use basis, not a per-texture basis." msgstr "" "Các chế độ lọc texture được xác định cho từng lần sử dụng, không phải cho " "từng texture riêng lẻ. Nghĩa là bạn có thể chọn phương pháp lọc khác nhau " "cho cùng một texture tùy thuộc vào trường hợp sử dụng." #: ../../docs/about/list_of_features.rst:373 msgid "**Texture compression:**" msgstr "**Nén texture:**" #: ../../docs/about/list_of_features.rst:375 msgid "Basis Universal (slow, but results in smaller files)." msgstr "Basis Universal (chậm, nhưng cho file nhỏ hơn)." #: ../../docs/about/list_of_features.rst:376 msgid "BPTC for high-quality compression (not supported on macOS)." msgstr "BPTC (nén chất lượng cao, không hỗ trợ trên macOS)." #: ../../docs/about/list_of_features.rst:377 msgid "ETC2 (not supported on macOS)." msgstr "ETC2 (không hỗ trợ trên macOS)." #: ../../docs/about/list_of_features.rst:378 msgid "S3TC (not supported on mobile/Web platforms)." msgstr "S3TC (không hỗ trợ trên nền tảng di động/web)." #: ../../docs/about/list_of_features.rst:380 msgid "**Antialiasing:**" msgstr "**Khử răng cưa:**" #: ../../docs/about/list_of_features.rst:382 msgid "Temporal :ref:`antialiasing ` (TAA)." msgstr "Temporal :ref:`antialiasing ` (TAA)." #: ../../docs/about/list_of_features.rst:383 msgid "" "AMD FidelityFX Super Resolution 2.2 :ref:`antialiasing " "` (FSR2), which can be used at native resolution as a " "form of high-quality temporal antialiasing." msgstr "" "AMD FidelityFX Super Resolution 2.2 :ref:`antialiasing " "` (FSR2), được xem như TAA chất lượng cao và có thể " "được sử dụng ngay cả ở độ phân giải native." #: ../../docs/about/list_of_features.rst:385 msgid "" "Multi-sample antialiasing (MSAA), for both :ref:`doc_2d_antialiasing` " "and :ref:`doc_3d_antialiasing`." msgstr "" "Multi-sample antialiasing (MSAA), cho cả :ref:`doc_2d_antialiasing` " "và :ref:`doc_3d_antialiasing`." #: ../../docs/about/list_of_features.rst:386 msgid "Fast approximate antialiasing (FXAA)." msgstr "Fast approximate antialiasing (FXAA)." #: ../../docs/about/list_of_features.rst:387 msgid "" "Super-sample antialiasing (SSAA) using bilinear 3D scaling and a 3D " "resolution scale above 1.0." msgstr "" "Super-sample antialiasing (SSAA) sử dụng bilinear 3D scaling và scale độ " "phân giải 3D cao hơn 1.0." #: ../../docs/about/list_of_features.rst:388 msgid "" "Alpha antialiasing, MSAA alpha to coverage and alpha hashing on a per-" "material basis." msgstr "Alpha antialiasing, dành riêng cho các vật liệu sử dụng kênh alpha." #: ../../docs/about/list_of_features.rst:390 msgid "**Resolution scaling:**" msgstr "**Scale độ phân giải (Resolution scaling):**" #: ../../docs/about/list_of_features.rst:392 msgid "" "Support for :ref:`rendering 3D at a lower resolution " "` while keeping 2D rendering at the original scale. " "This can be used to improve performance on low-end systems or improve " "visuals on high-end systems." msgstr "" "Hỗ trợ :ref:`render 3D ở độ phân giải thấp hơn ` " "trong khi vẫn giữ cho render 2D ở scale gốc. Điều này giúp cải thiện hiệu " "suất trên các máy cấu hình thấp hoặc cải thiện chất lượng hình ảnh trên các " "máy cấu hình cao." #: ../../docs/about/list_of_features.rst:395 msgid "" "Resolution scaling uses bilinear filtering, AMD FidelityFX Super Resolution " "1.0 (FSR1) or AMD FidelityFX Super Resolution 2.2 (FSR2)." msgstr "" "Scale độ phân giải sử dụng bilinear filtering, AMD FidelityFX Super " "Resolution 1.0 (FSR1) hoặc AMD FidelityFX Super Resolution 2.2 (FSR2)." #: ../../docs/about/list_of_features.rst:397 msgid "" "Texture mipmap LOD bias is adjusted automatically to improve quality at " "lower resolution scales. It can also be modified with a manual offset." msgstr "" "Texture mipmap LOD bias được tự động tinh chỉnh để cải thiện chất lượng ở " "những scale thấp hơn. Có thể set thủ công nếu muốn." #: ../../docs/about/list_of_features.rst:400 msgid "" "Most effects listed above can be adjusted for better performance or to " "further improve quality. This can be helpful when :ref:`using Godot for " "offline rendering `." msgstr "" "Hầu hết các hiệu ứng được liệt kê ở trên đều có thể được tinh chỉnh để cho " "hiệu suất tốt hơn hoặc để cải thiện chất lượng hình ảnh. Điều này có thể hữu " "ích khi :ref:`sử dụng Godot để render offline `." #: ../../docs/about/list_of_features.rst:405 msgid "3D tools" msgstr "Các công cụ 3D" #: ../../docs/about/list_of_features.rst:407 msgid "" "Built-in meshes: cube, cylinder/cone, (hemi)sphere, prism, plane, quad, " "torus, ribbon, tube." msgstr "" "Các mesh sẵn có: cube, cylinder/cone, (hemi)sphere, prism, plane, quad, " "torus, ribbon, tube." #: ../../docs/about/list_of_features.rst:408 msgid ":ref:`GridMaps ` for 3D tile-based level design." msgstr ":ref:`GridMaps ` để tạo màn chơi 3D." #: ../../docs/about/list_of_features.rst:409 msgid "" ":ref:`Constructive solid geometry ` (intended for " "prototyping)." msgstr "" ":ref:`Constructive solid geometry ` (dùng cho prototype)." #: ../../docs/about/list_of_features.rst:410 msgid "" "Tools for :ref:`procedural geometry generation `." msgstr "" "Các công cụ cho việc :ref:`tạo hình bằng mã lệnh `." #: ../../docs/about/list_of_features.rst:411 msgid "Path3D node to represent a path in 3D space." msgstr "Node Path3D biểu diễn một path trong không gian 3D." #: ../../docs/about/list_of_features.rst:414 msgid "PathFollow3D node to make nodes follow a Path3D." msgstr "Node PathFollow3D khiến các node đi theo một Path3D." #: ../../docs/about/list_of_features.rst:416 msgid ":ref:`3D geometry helper class `." msgstr ":ref:`3D geometry helper class `." #: ../../docs/about/list_of_features.rst:417 msgid "" "Support for exporting the current scene as a glTF 2.0 file, both from the " "editor and at runtime from an exported project." msgstr "" "Hỗ trợ xuất scene hiện tại thành file glTF 2.0 từ cả editor lẫn run-time từ " "project đã xuất bản." #: ../../docs/about/list_of_features.rst:421 msgid "3D physics" msgstr "Vật lý 3D" #: ../../docs/about/list_of_features.rst:429 msgid "Vehicle bodies (intended for arcade physics, not simulation)." msgstr "Vehicle bodies (dùng cho arcade chứ không dùng cho mô phỏng)." #: ../../docs/about/list_of_features.rst:431 msgid "Soft bodies." msgstr "Các Soft body." #: ../../docs/about/list_of_features.rst:432 msgid "Ragdolls." msgstr "Các Ragdoll." #: ../../docs/about/list_of_features.rst:437 msgid "" "Built-in shapes: cuboid, sphere, capsule, cylinder, world boundary (infinite " "plane)." msgstr "" "Các dạng hình được tích hợp sẵn: cuboid, sphere, capsule, cylinder, world " "boundary (infinite plane)." #: ../../docs/about/list_of_features.rst:438 msgid "Generate triangle collision shapes for any mesh from the editor." msgstr "Tạo triangle collision shape cho bất kỳ mesh nào từ editor." #: ../../docs/about/list_of_features.rst:439 msgid "" "Generate one or several convex collision shapes for any mesh from the editor." msgstr "" "Tạo một hoặc nhiều convex collision shape cho bất kỳ mesh nào từ editor." #: ../../docs/about/list_of_features.rst:442 #: ../../docs/about/docs_changelog.rst:91 #: ../../docs/about/docs_changelog.rst:244 #: ../../docs/about/docs_changelog.rst:349 #: ../../docs/tutorials/shaders/index.rst:4 msgid "Shaders" msgstr "Các Shader" #: ../../docs/about/list_of_features.rst:444 msgid "*2D:* Custom vertex, fragment, and light shaders." msgstr "*2D:* Các custom vertex, fragment, và light shader." #: ../../docs/about/list_of_features.rst:445 msgid "*3D:* Custom vertex, fragment, light, and sky shaders." msgstr "*3D:* Các custom vertex, fragment, light, và sky shader." #: ../../docs/about/list_of_features.rst:446 msgid "" "Text-based shaders using a :ref:`shader language inspired by GLSL " "`." msgstr "" "Shader dạng text sử dụng :ref:`ngôn ngữ shader lấy cảm hứng từ GLSL " "`." #: ../../docs/about/list_of_features.rst:447 msgid "Visual shader editor." msgstr "Visual shader editor." #: ../../docs/about/list_of_features.rst:449 msgid "Support for visual shader plugins." msgstr "Hỗ trợ các plugin cho visual shader." #: ../../docs/about/list_of_features.rst:452 #: ../../docs/about/docs_changelog.rst:38 #: ../../docs/about/docs_changelog.rst:236 #: ../../docs/about/docs_changelog.rst:354 #: ../../docs/about/docs_changelog.rst:460 #: ../../docs/tutorials/scripting/index.rst:4 msgid "Scripting" msgstr "Ngôn ngữ lập trình" #: ../../docs/about/list_of_features.rst:454 msgid "**General:**" msgstr "**Tổng quan:**" #: ../../docs/about/list_of_features.rst:456 msgid "Object-oriented design pattern with scripts extending nodes." msgstr "" "Mô hình thiết kế Hướng đối tượng với các script mở rộng chức năng của các " "node." #: ../../docs/about/list_of_features.rst:457 msgid "Signals and groups for communicating between scripts." msgstr "Các Signal và các Group dùng để giao tiếp giữa các script." #: ../../docs/about/list_of_features.rst:458 msgid "" "Support for :ref:`cross-language scripting `." msgstr "Hỗ trợ code đa ngôn ngữ." #: ../../docs/about/list_of_features.rst:459 msgid "" "Many 2D, 3D and 4D linear algebra data types such as vectors and transforms." msgstr "" "Nhiều kiểu dữ liệu đại số tuyến tính 2D, 3D và 4D như các vector và " "transform." #: ../../docs/about/list_of_features.rst:461 msgid ":ref:`GDScript: `" msgstr "Xem :ref:`GDScript: `" #: ../../docs/about/list_of_features.rst:463 #, fuzzy msgid "" ":ref:`High-level interpreted language ` " "with :ref:`optional static typing `." msgstr "" ":ref:`Ngôn ngữ lập trình thông dịch bậc cao ` với :ref:`kiểu " "tĩnh khi cần `." #: ../../docs/about/list_of_features.rst:465 msgid "" "Syntax inspired by Python. However, GDScript is **not** based on Python." msgstr "" "Cú pháp lấy cảm hứng từ Python. Tuy nhiên, GDScript **không** dựa trên " "Python." #: ../../docs/about/list_of_features.rst:466 msgid "Syntax highlighting is provided on GitHub." msgstr "Syntax highlight được cung cấp trên GitHub." #: ../../docs/about/list_of_features.rst:467 msgid "" ":ref:`Use threads ` to perform asynchronous " "actions or make use of multiple processor cores." msgstr "" ":ref:`Sử dụng các thread ` để thực hiện các tác " "vụ bất đồng bộ (asynchronous) hoặc tận dụng vi xử lý đa nhân." #: ../../docs/about/list_of_features.rst:470 #, fuzzy msgid ":ref:`C#: `" msgstr ":ref:`doc_c_sharp_variant`" #: ../../docs/about/list_of_features.rst:472 msgid "Packaged in a separate binary to keep file sizes and dependencies down." msgstr "" "Được đóng gói trong một binary riêng để giảm dung lượng file và các " "dependency." #: ../../docs/about/list_of_features.rst:473 msgid "Supports .NET 8 and higher." msgstr "Hỗ trợ từ .NET 6 trở lên." #: ../../docs/about/list_of_features.rst:475 msgid "Full support for the C# 12.0 syntax and features." msgstr "Hỗ trợ đầy đủ cú pháp và tính năng của C# 10.0." #: ../../docs/about/list_of_features.rst:477 msgid "" "Supports Windows, Linux, and macOS. Since Godot 4.2, experimental support " "for Android and iOS is also available." msgstr "" "Hỗ trợ Windows, Linux và macOS. Từ phiên bản 4.2, hỗ trợ thử nghiệm cho " "Android và iOS cũng đã có sẵn (yêu cầu dự án .NET 7.0 cho Android và 8.0 cho " "iOS)." #: ../../docs/about/list_of_features.rst:479 msgid "On the iOS platform only some architectures are supported: ``arm64``." msgstr "Chỉ một vài kiến trúc được hỗ trợ cho nền tảng iOS: ``arm64``." #: ../../docs/about/list_of_features.rst:480 msgid "" "The web platform is currently unsupported. To use C# on that platform, " "consider Godot 3 instead." msgstr "" "Nền Web hiện chưa được hỗ trợ. Để xài C# cho nền Web, cân nhắc dùng Godot 3." #: ../../docs/about/list_of_features.rst:483 msgid "" "Using an external editor is recommended to benefit from IDE functionality." msgstr "Nên sử dụng một IDE bên ngoài để tận dụng các tính năng của IDE đó." #: ../../docs/about/list_of_features.rst:485 msgid "**GDExtension (C, C++, Rust, D, ...):**" msgstr "**GDExtension (C, C++, Rust, D, ...):**" #: ../../docs/about/list_of_features.rst:487 msgid "" "When you need it, link to native libraries for higher performance and third-" "party integrations." msgstr "" "Khi cần, bạn có thể link tới các thư viện native để nâng cao hiệu suất hoặc " "tích hợp thư viện bên thứ ba." #: ../../docs/about/list_of_features.rst:489 msgid "" "For scripting game logic, GDScript or C# are recommended if their " "performance is suitable." msgstr "" "Để code logic cho game, nên sử dụng GDScript hoặc C# nếu thấy hiệu suất ổn." #: ../../docs/about/list_of_features.rst:492 msgid "" "Official GDExtension bindings for `C `__ and `C++ `__." msgstr "" "GDExtension chính thức cho `C `__ và `C++ `__." #: ../../docs/about/list_of_features.rst:495 msgid "Use any build system and language features you wish." msgstr "Sử dụng bất kỳ build system và tính năng ngôn ngữ nào mà bạn thích." #: ../../docs/about/list_of_features.rst:497 msgid "" "Actively developed GDExtension bindings for `D `__, `Swift `__, and `Rust `__ " "bindings provided by the community. (Some of these bindings may be " "experimental and not production-ready)." msgstr "" "Các GDExtension cho `D `__, " "`Haxe `__, `Swift `__, và `Rust `__ được phát triển tích cực bởi cộng đồng. (Một vài cái vẫn còn " "đang được thử nghiệm và chưa sẵn sàng cho thực chiến)." #: ../../docs/about/list_of_features.rst:502 #: ../../docs/about/docs_changelog.rst:381 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.3.rst:150 #: ../../docs/tutorials/audio/index.rst:6 #: ../../docs/tutorials/export/exporting_for_web.rst:275 msgid "Audio" msgstr "Audio" #: ../../docs/about/list_of_features.rst:506 msgid "Mono, stereo, 5.1 and 7.1 output." msgstr "Đầu ra mono, stereo, 5.1 và 7.1." #: ../../docs/about/list_of_features.rst:507 msgid "Non-positional and positional playback in 2D and 3D." msgstr "" "Phát lại :abbr:`non-positional (không quan tâm đến vị trí của nguồn âm)` " "và :abbr:`positional (có quan tâm đến vị trí của nguồn âm)` trong không gian " "2D lẫn 3D." #: ../../docs/about/list_of_features.rst:509 msgid "Optional Doppler effect in 2D and 3D." msgstr "Hiệu ứng Doppler trong không gian 2D lẫn 3D có thể được bật nếu muốn." #: ../../docs/about/list_of_features.rst:511 msgid "" "Support for re-routable :ref:`audio buses ` and effects " "with dozens of effects included." msgstr "" "Hỗ trợ tái định tuyến (re-routable) :ref:`các audio bus ` " "và các hiệu ứng với hàng tá hiệu ứng đi kèm." #: ../../docs/about/list_of_features.rst:513 msgid "" "Support for polyphony (playing several sounds from a single " "AudioStreamPlayer node)." msgstr "" "Hỗ trợ :abbr:`polyphony (đa âm)` (chơi nhiều âm thanh từ một node " "AudioStreamPlayer duy nhất)." #: ../../docs/about/list_of_features.rst:514 msgid "Support for random volume and pitch." msgstr "Hỗ trợ âm lượng và cao độ ngẫu nhiên." #: ../../docs/about/list_of_features.rst:515 msgid "Support for real-time pitch scaling." msgstr "Hỗ trợ dịch tông (pitch scaling) thời gian thực." #: ../../docs/about/list_of_features.rst:516 msgid "" "Support for sequential/random sample selection, including repetition " "prevention when using random sample selection." msgstr "" "Hỗ trợ chọn sampler tuần tự/ngẫu nhiên, bao gồm cả việc ngăn lặp tiếng khi " "chọn sampler ngẫu nhiên." #: ../../docs/about/list_of_features.rst:518 msgid "" "Listener2D and Listener3D nodes to listen from a position different than the " "camera." msgstr "" "Các node Listener2D và Listener3D được dùng để nghe âm thành từ một vị trí " "nào đó khác với vị trí hiện tại của camera." #: ../../docs/about/list_of_features.rst:519 msgid "" "Support for :ref:`procedural audio generation `." msgstr "" "Hỗ trợ :ref:`sinh âm thanh bằng lập trình `." #: ../../docs/about/list_of_features.rst:520 msgid "Audio input to record microphones." msgstr "Thâu âm được từ micro." #: ../../docs/about/list_of_features.rst:521 msgid "MIDI input." msgstr "Hỗ trợ MIDI input." #: ../../docs/about/list_of_features.rst:523 msgid "No support for MIDI output yet." msgstr "Chưa hỗ trợ MIDI output." #: ../../docs/about/list_of_features.rst:525 msgid "**APIs used:**" msgstr "**Các API được sử dụng:**" #: ../../docs/about/list_of_features.rst:527 msgid "*Windows:* WASAPI." msgstr "*Windows:* WASAPI." #: ../../docs/about/list_of_features.rst:528 msgid "*macOS:* CoreAudio." msgstr "*macOS:* CoreAudio." #: ../../docs/about/list_of_features.rst:529 msgid "*Linux:* PulseAudio or ALSA." msgstr "*Linux:* PulseAudio hoặc ALSA." #: ../../docs/about/list_of_features.rst:532 msgid "Import" msgstr "Import" #: ../../docs/about/list_of_features.rst:534 msgid "Support for :ref:`custom import plugins `." msgstr "Hỗ trợ :ref:`custom import plugins `." #: ../../docs/about/list_of_features.rst:536 msgid "**Formats:**" msgstr "**Các định dạng:**" #: ../../docs/about/list_of_features.rst:538 msgid "*Images:* See :ref:`doc_importing_images`." msgstr "*Hình ảnh:* Xem :ref:`doc_importing_images`." #: ../../docs/about/list_of_features.rst:539 msgid "*Audio:*" msgstr "*Âm thanh:*" #: ../../docs/about/list_of_features.rst:541 msgid "WAV with optional IMA-ADPCM compression." msgstr "WAV với tùy chọn nén IMA-ADPCM." #: ../../docs/about/list_of_features.rst:542 msgid "Ogg Vorbis." msgstr "Ogg Vorbis." #: ../../docs/about/list_of_features.rst:543 msgid "MP3." msgstr "MP3." #: ../../docs/about/list_of_features.rst:545 msgid "*3D scenes:* See :ref:`doc_importing_3d_scenes`." msgstr "*Các scene 3D:* Xem :ref:`doc_importing_3d_scenes`." #: ../../docs/about/list_of_features.rst:547 msgid "glTF 2.0 *(recommended)*." msgstr "glTF 2.0 *(nên xài)*." #: ../../docs/about/list_of_features.rst:548 msgid "" "``.blend`` (by calling Blender's glTF export functionality transparently)." msgstr "``.blend`` (bằng cách gọi chức năng glTF export của Blender)." #: ../../docs/about/list_of_features.rst:549 msgid "" "FBX (by calling `FBX2glTF `__ " "transparently)." msgstr "" "FBX (bằng cách gọi `FBX2glTF `__)." #: ../../docs/about/list_of_features.rst:550 msgid "Collada (.dae)." msgstr "Collada (.dae)." #: ../../docs/about/list_of_features.rst:551 msgid "" "Wavefront OBJ (static scenes only, can be loaded directly as a mesh or " "imported as a 3D scene)." msgstr "" "Wavefront OBJ (chỉ cho scene tĩnh, có thể load trực tiếp như là một mesh " "hoặc được import như một scene 3D)." #: ../../docs/about/list_of_features.rst:553 msgid "" "Support for loading glTF 2.0 scenes at runtime, including from an exported " "project." msgstr "" "Hỗ trợ load scene glTF 2.0 trong lúc chạy, kể cả trong project đã được xuất " "bản." #: ../../docs/about/list_of_features.rst:554 msgid "" "3D meshes use `Mikktspace `__ to generate " "tangents on import, which ensures consistency with other 3D applications " "such as Blender." msgstr "" "Các Mesh 3D xài `Mikktspace `__ để sinh các tiếp " "tuyến khi import, đảm bảo tính nhất quán với các trình 3D khác như Blender." #: ../../docs/about/list_of_features.rst:558 #: ../../docs/about/docs_changelog.rst:326 #: ../../docs/tutorials/rendering/viewports.rst:38 #: ../../docs/tutorials/ui/custom_gui_controls.rst:114 msgid "Input" msgstr "Input" #: ../../docs/about/list_of_features.rst:560 msgid "" ":ref:`Input mapping system ` using hardcoded input " "events or remappable input actions." msgstr "" ":ref:`Input mapping system ` sử dụng hardcode hoặc có " "thể map lại nút." #: ../../docs/about/list_of_features.rst:563 msgid "" "Axis values can be mapped to two different actions with a configurable " "deadzone." msgstr "" "Các giá trị Axis có thể map cho hai hành động khác nhau với deadzone có thể " "cấu hình." #: ../../docs/about/list_of_features.rst:564 msgid "Use the same code to support both keyboards and gamepads." msgstr "Một mã input hỗ trợ cả bàn phím lẫn gamepad." #: ../../docs/about/list_of_features.rst:566 msgid "Keyboard input." msgstr "Input bằng bàn phím." #: ../../docs/about/list_of_features.rst:568 msgid "" "Keys can be mapped in \"physical\" mode to be independent of the keyboard " "layout." msgstr "" "Các phím có thể được map trong chế độ \"physical\" để bất kỳ layout bàn phím " "nào cũng xài được." #: ../../docs/about/list_of_features.rst:570 msgid "Mouse input." msgstr "Input bằng chuột." #: ../../docs/about/list_of_features.rst:572 msgid "" "The mouse cursor can be visible, hidden, captured or confined within the " "window." msgstr "" "Con trỏ chuột có thể được hiện lên, ẩn đi, khóa lại hoặc bị giới hạn bên " "trong cửa sổ." #: ../../docs/about/list_of_features.rst:573 msgid "" "When captured, raw input will be used on Windows and Linux to sidestep the " "OS' mouse acceleration settings." msgstr "" "Khi khóa chuột, raw input sẽ được sử dụng trên Windows và Linux để né thiết " "lập gia tốc chuột (mouse acceleration) của OS." #: ../../docs/about/list_of_features.rst:576 msgid "Gamepad input (up to 8 simultaneous controllers)." msgstr "Input bằng gamepad (tối đa 8 cái một lượt)." #: ../../docs/about/list_of_features.rst:577 msgid "Pen/tablet input with pressure support." msgstr "Input bằng bút/bảng vẽ điện tử có hỗ trợ lực bút." #: ../../docs/about/list_of_features.rst:580 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.1.rst:136 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.3.rst:160 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.4.rst:140 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.5.rst:257 #: ../../docs/tutorials/2d/using_tilemaps.rst:78 #: ../../docs/tutorials/navigation/index.rst:4 msgid "Navigation" msgstr "Điều hướng" #: ../../docs/about/list_of_features.rst:582 msgid "" "A* algorithm in :ref:`2D ` and :ref:`3D `." msgstr "" "Thuật toán A* trong :ref:`2D ` và :ref:`3D `." #: ../../docs/about/list_of_features.rst:583 msgid "" "Navigation meshes with dynamic obstacle avoidance in :ref:`2D " "` and :ref:`3D `." msgstr "" "Các navigation mesh có khả năng tránh chướng ngại động ở dạng :ref:`2D " "` và :ref:`3D `." #: ../../docs/about/list_of_features.rst:585 msgid "" "Generate navigation meshes from the editor or at runtime (including from an " "exported project)." msgstr "" "Tạo các navigation mesh bằng editor hoặc lúc thực thi (gồm cả project đã " "xuất bản)." #: ../../docs/about/list_of_features.rst:588 #: ../../docs/about/docs_changelog.rst:413 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.1.rst:166 #: ../../docs/tutorials/export/exporting_for_web.rst:301 #: ../../docs/tutorials/networking/index.rst:5 msgid "Networking" msgstr "Mạng" #: ../../docs/about/list_of_features.rst:590 msgid "" "Low-level TCP networking using :ref:`class_StreamPeer` " "and :ref:`class_TCPServer`." msgstr "" "Low-level TCP networking sử dụng :ref:`class_StreamPeer` " "và :ref:`class_TCPServer`." #: ../../docs/about/list_of_features.rst:591 msgid "" "Low-level UDP networking using :ref:`class_PacketPeer` " "and :ref:`class_UDPServer`." msgstr "" "Low-level UDP networking sử dụng :ref:`class_PacketPeer` " "và :ref:`class_UDPServer`." #: ../../docs/about/list_of_features.rst:592 msgid "Low-level HTTP requests using :ref:`class_HTTPClient`." msgstr "Low-level HTTP request sử dụng :ref:`class_HTTPClient`." #: ../../docs/about/list_of_features.rst:593 msgid "High-level HTTP requests using :ref:`class_HTTPRequest`." msgstr "High-level HTTP request sử dụng :ref:`class_HTTPRequest`." #: ../../docs/about/list_of_features.rst:595 msgid "Supports HTTPS out of the box using bundled certificates." msgstr "Hỗ trợ HTTPS ngon lành bằng cách sử dụng các chứng chỉ đi kèm." #: ../../docs/about/list_of_features.rst:597 msgid "" ":ref:`High-level multiplayer ` API using UDP and " "ENet." msgstr "" ":ref:`High-level multiplayer ` API sử dụng UDP " "và ENet." #: ../../docs/about/list_of_features.rst:599 msgid "Automatic replication using remote procedure calls (RPCs)." msgstr "Tự động sao chép bằng cách sử dụng các lời gọi thử tục từ xa (RPC)." #: ../../docs/about/list_of_features.rst:600 msgid "Supports unreliable, reliable and ordered transfers." msgstr "Hỗ trợ các transfer không tin cậy, tin cậy hoặc theo thứ tự." #: ../../docs/about/list_of_features.rst:602 msgid "" ":ref:`WebSocket ` client and server, available on all " "platforms." msgstr "" ":ref:`WebSocket ` client và server, khả dụng trên mọi nền " "tảng." #: ../../docs/about/list_of_features.rst:603 msgid "" ":ref:`WebRTC ` client and server, available on all platforms." msgstr "" ":ref:`WebRTC ` client và server, khả dụng trên mọi nền tảng." #: ../../docs/about/list_of_features.rst:604 msgid "" "Support for :ref:`UPnP ` to sidestep the requirement to forward " "ports when hosting a server behind a NAT." msgstr "" "Hỗ trợ :ref:`UPnP ` để né yêu cầu chuyển tiếp port khi host một " "máy chủ sau NAT." #: ../../docs/about/list_of_features.rst:608 #: ../../docs/about/docs_changelog.rst:398 #: ../../docs/tutorials/i18n/index.rst:4 msgid "Internationalization" msgstr "Quốc tế hóa" #: ../../docs/about/list_of_features.rst:610 msgid "Full support for Unicode including emoji." msgstr "Hỗ trợ full Unicode bao gồm cả emoji." #: ../../docs/about/list_of_features.rst:611 msgid "" "Store localization strings using :ref:`CSV ` " "or :ref:`gettext `." msgstr "" "Các string đã được dịch sang ngôn ngữ khác (localization strings) được lưu " "bằng :ref:`CSV ` hoặc :ref:`gettext " "`." #: ../../docs/about/list_of_features.rst:614 msgid "Support for generating gettext POT and PO files from the editor." msgstr "Hỗ trợ tạo gettext POT và file PO từ editor." #: ../../docs/about/list_of_features.rst:616 msgid "" "Use localized strings in your project automatically in GUI elements or by " "using the ``tr()`` function." msgstr "" "Sử dụng tiếng địa phương trong project của bạn tự động trong GUI hoặc bằng " "cách sử dụng hàm ``tr()`` thủ công." #: ../../docs/about/list_of_features.rst:618 msgid "" "Support for pluralization and translation contexts when using gettext " "translations." msgstr "Hỗ trợ số nhiều và dịch ngữ cảnh khi sử dụng bản dịch gettext." #: ../../docs/about/list_of_features.rst:619 msgid "" "Support for :ref:`bidirectional typesetting " "`, text shaping and OpenType localized " "forms." msgstr "" "Hỗ trợ :ref:`bidirectional typesetting `, " "text shaping và các OpenType localized form." #: ../../docs/about/list_of_features.rst:621 msgid "Automatic UI mirroring for right-to-left locales." msgstr "Tự động lật UI cho các ngôn ngữ viết từ phải sang trái (RTL)." #: ../../docs/about/list_of_features.rst:622 msgid "" "Support for pseudolocalization to test your project for i18n-friendliness." msgstr "" "Hỗ trợ pseudolocalization để test xem dự án của bạn đã sẵn sàng để dịch sang " "ngôn ngữ khác chưa (i18n-friendliness)." #: ../../docs/about/list_of_features.rst:625 msgid "Windowing and OS integration" msgstr "Tích hợp cửa sổ và OS" #: ../../docs/about/list_of_features.rst:627 msgid "Spawn multiple independent windows within a single process." msgstr "Tạo được nhiều chạy cửa sổ độc lập trong một process duy nhất." #: ../../docs/about/list_of_features.rst:628 msgid "Move, resize, minimize, and maximize windows spawned by the project." msgstr "" "Di chuyển, thay đổi kích thước, thu nhỏ và phóng to các cửa sổ được tạo bởi " "project." #: ../../docs/about/list_of_features.rst:629 msgid "Change the window title and icon." msgstr "Đổi tiêu đề và biểu tượng cửa sổ." #: ../../docs/about/list_of_features.rst:630 msgid "" "Request attention (will cause the title bar to blink on most platforms)." msgstr "" "Yêu cầu sự chú ý (sẽ khiến thanh tiêu đề nhấp nháy trên hầu hết các nền " "tảng)." #: ../../docs/about/list_of_features.rst:631 msgid "Fullscreen mode." msgstr "Chế độ toàn màn hình (Fullscreen)." #: ../../docs/about/list_of_features.rst:633 msgid "" "Uses borderless fullscreen by default on Windows for fast alt-tabbing, but " "can optionally use exclusive fullscreen to reduce input lag." msgstr "" "Sử dụng fullscreen dạng borderless mặc định trên Windows để alt-tab cho nó " "nhanh, nhưng có thể đổi sang fullscreen dạng exclusive cho bớt lag." #: ../../docs/about/list_of_features.rst:636 msgid "Borderless windows (fullscreen or non-fullscreen)." msgstr "Cửa sổ dạng borderless (cả fullscreen lẫn non-fullscreen)." #: ../../docs/about/list_of_features.rst:637 msgid "Ability to keep a window always on top." msgstr "Có thể set cho cửa sổ always on top." #: ../../docs/about/list_of_features.rst:638 msgid "Global menu integration on macOS." msgstr "Tích hợp menu tổng trên macOS." #: ../../docs/about/list_of_features.rst:639 msgid "" "Execute commands in a blocking or non-blocking manner (including running " "multiple instances of the same project)." msgstr "" "Thực hiện các command theo cách blocking hoặc non-blocking (bao gồm chạy " "nhiều instance của cùng một project)." #: ../../docs/about/list_of_features.rst:641 msgid "" "Open file paths and URLs using default or custom protocol handlers (if " "registered on the system)." msgstr "" "Mở các đường dẫn file hoặc URL sử dụng các protocol handler mặc định hoặc " "custom (nếu đã đăng ký trên hệ thống)." #: ../../docs/about/list_of_features.rst:642 msgid "Parse custom command line arguments." msgstr "Lấy được tham số dòng lệnh." #: ../../docs/about/list_of_features.rst:643 msgid "" "Any Godot binary (editor or exported project) can be :ref:`used as a " "headless server ` by starting it with " "the ``--headless`` command line argument. This allows running the engine " "without a GPU or display server." msgstr "" "Bất kỳ binary Godot nào (editor hoặc project đã xuất bản) có thể :ref:`được " "sử dụng như là một headless server ` " "bằng cách chạy nó với tham số dòng lệnh ``--headless``. Điều này cho phép " "chạy engine mà không cần GPU hoặc display server." #: ../../docs/about/list_of_features.rst:649 #: ../../docs/tutorials/3d/3d_antialiasing.rst:342 #: ../../docs/tutorials/rendering/renderers.rst:128 #: ../../docs/tutorials/rendering/renderers.rst:150 #: ../../docs/tutorials/rendering/renderers.rst:196 #: ../../docs/tutorials/rendering/renderers.rst:226 #: ../../docs/tutorials/rendering/renderers.rst:254 #: ../../docs/tutorials/rendering/renderers.rst:291 #: ../../docs/tutorials/rendering/renderers.rst:315 #: ../../docs/tutorials/rendering/renderers.rst:327 #: ../../docs/tutorials/rendering/renderers.rst:345 #: ../../docs/engine_details/architecture/internal_rendering_architecture.rst:48 msgid "Mobile" msgstr "Mobile" #: ../../docs/about/list_of_features.rst:651 msgid "" "In-app purchases on :ref:`Android ` " "and :ref:`iOS `." msgstr "" "Mua hàng trong ứng dụng (In-app purchase) trên :ref:`Android " "` và :ref:`iOS `." #: ../../docs/about/list_of_features.rst:653 msgid "Support for advertisements using third-party modules." msgstr "Chạy quảng cáo bằng các module bên thứ ba." #: ../../docs/about/list_of_features.rst:658 msgid "XR support (AR and VR)" msgstr "Hỗ trợ XR (AR và VR)" #: ../../docs/about/list_of_features.rst:660 msgid "Out of the box :ref:`support for OpenXR `." msgstr ":ref:`Hỗ trợ cực tốt OpenXR `." #: ../../docs/about/list_of_features.rst:662 msgid "" "Including support for popular desktop headsets like the Valve Index, WMR " "headsets, and Quest over Link." msgstr "" "Bao gồm hỗ trợ cho các headset thông dụng như Valve Index, WMR và Quest over " "Link." #: ../../docs/about/list_of_features.rst:664 msgid "" "Support for :ref:`Android-based headsets ` using " "OpenXR through a plugin." msgstr "" "Hỗ trợ :ref:`Android based headsets ` sử dụng " "OpenXR thông qua plugin." #: ../../docs/about/list_of_features.rst:666 msgid "" "Including support for popular stand alone headsets like the Meta Quest 1/2/3 " "and Pro, Pico 4, Magic Leap 2, and Lynx R1." msgstr "" "Bao gồm hỗ trợ cho các headset độc lập phổ biến như Meta Quest 1/2/3/Pro, " "Pico 4, Magic Leap 2, và Lynx R1." #: ../../docs/about/list_of_features.rst:668 #, fuzzy msgid "Out of the box limited support for visionOS Apple headsets." msgstr ":ref:`Hỗ trợ cực tốt OpenXR `." #: ../../docs/about/list_of_features.rst:670 msgid "" "Currently only exporting an application for use on a flat plane within the " "headset is supported. Immersive experiences are not supported." msgstr "" #: ../../docs/about/list_of_features.rst:673 msgid "Other devices supported through an XR plugin structure." msgstr "Các thiết bị khác được hỗ trợ thông qua một cấu trúc plugin XR." #: ../../docs/about/list_of_features.rst:674 msgid "" "Various advanced toolkits are available that implement common features " "required by XR applications." msgstr "" "Có sẵn đa dạng nhiều toolkit nâng cao để triển khai các tính năng phổ biến " "mà ứng dụng XR yêu cầu." #: ../../docs/about/list_of_features.rst:677 msgid "GUI system" msgstr "Hệ thống GUI" #: ../../docs/about/list_of_features.rst:679 msgid "" "Godot's GUI is built using the same Control nodes used to make games in " "Godot. The editor UI can easily be extended in many ways using add-ons." msgstr "" "GUI của Godot được xây dựng bằng cách sử dụng các node Control tương tự được " "sử dụng để tạo game trong Godot. UI của editor có thể dễ dàng được mở rộng " "theo nhiều cách bằng các add-on." #: ../../docs/about/list_of_features.rst:682 msgid "**Nodes:**" msgstr "**Các node:**" #: ../../docs/about/list_of_features.rst:684 msgid "Buttons." msgstr "Các button." #: ../../docs/about/list_of_features.rst:685 msgid "Checkboxes, check buttons, radio buttons." msgstr "Các checkbox, check button, radio button." #: ../../docs/about/list_of_features.rst:686 msgid "" "Text entry using :ref:`class_LineEdit` (single line) " "and :ref:`class_TextEdit` (multiple lines). TextEdit also supports code " "editing features such as displaying line numbers and syntax highlighting." msgstr "" "Nhập text sử dụng :ref:`class_LineEdit` (một dòng) và :ref:`class_TextEdit` " "(nhiều dòng). TextEdit cũng hỗ trợ các tính năng gõ code như hiện thị số " "dòng lệnh và tô màu cú pháp." #: ../../docs/about/list_of_features.rst:689 msgid "" "Dropdown menus using :ref:`class_PopupMenu` and :ref:`class_OptionButton`." msgstr "" "Các menu sổ xuống sử dụng :ref:`class_PopupMenu` " "và :ref:`class_OptionButton`." #: ../../docs/about/list_of_features.rst:690 msgid "Scrollbars." msgstr "Các thanh cuộn (Scrollbar)." #: ../../docs/about/list_of_features.rst:691 msgid "Labels." msgstr "Các nhãn (Label)." #: ../../docs/about/list_of_features.rst:692 msgid "" "RichTextLabel for :ref:`text formatted using BBCode " "`, with support for animated custom effects." msgstr "" "RichTextLabel để :ref:`định dạng văn bản sử dụng BBCode " "`, có hỗ trợ các hiệu ứng animate tuỳ chỉnh." #: ../../docs/about/list_of_features.rst:694 msgid "Trees (can also be used to represent tables)." msgstr "Các Tree (cũng có thể được dùng để biểu diễn các bảng)." #: ../../docs/about/list_of_features.rst:695 msgid "Color picker with RGB and HSV modes." msgstr "Công cụ chọn màu với chế độ RGB và HSV." #: ../../docs/about/list_of_features.rst:696 msgid "Controls can be rotated and scaled." msgstr "Các control có thể được xoay và scale." #: ../../docs/about/list_of_features.rst:698 msgid "**Sizing:**" msgstr "**Kích thước:**" #: ../../docs/about/list_of_features.rst:700 msgid "Anchors to keep GUI elements in a specific corner, edge or centered." msgstr "" "Các Anchor dùng để giữ các thành phần GUI ở một góc, cạnh cụ thể hoặc canh " "giữa." #: ../../docs/about/list_of_features.rst:701 msgid "Containers to place GUI elements automatically following certain rules." msgstr "" "Các container được dùng để chứa các thành phần GUI tự động tuân theo các quy " "tắc nhất định." #: ../../docs/about/list_of_features.rst:703 msgid ":ref:`Stack ` layouts." msgstr "Các :ref:`Stack ` layout." #: ../../docs/about/list_of_features.rst:704 msgid ":ref:`Grid ` layouts." msgstr "Các :ref:`Grid ` layout." #: ../../docs/about/list_of_features.rst:705 msgid "" ":ref:`Flow ` layouts (similar to autowrapping text)." msgstr "" "Các :ref:`Flow ` layout (giống với text tự động wrap)." #: ../../docs/about/list_of_features.rst:706 msgid "" ":ref:`Margin `, :ref:`centered " "` and :ref:`aspect ratio " "` layouts." msgstr "" "Các :ref:`Margin `, :ref:`centered " "` và :ref:`aspect ratio ` " "layout." #: ../../docs/about/list_of_features.rst:708 msgid ":ref:`Draggable splitter ` layouts." msgstr "Các :ref:`Draggable splitter ` layout." #: ../../docs/about/list_of_features.rst:710 msgid "" "Scale to :ref:`multiple resolutions ` using the " "``canvas_items`` or ``viewport`` stretch modes." msgstr "" "Scale tới :ref:`nhiều độ phân giải ` sử dụng chế " "độ co giãn ``canvas_items`` hoặc ``viewport``." #: ../../docs/about/list_of_features.rst:712 msgid "" "Support any aspect ratio using anchors and the ``expand`` stretch aspect." msgstr "Hỗ trợ bất kỳ tỷ lệ màn hình nào và ``expand`` stretch aspect." #: ../../docs/about/list_of_features.rst:714 msgid "**Theming:**" msgstr "**Theme:**" #: ../../docs/about/list_of_features.rst:716 msgid "Built-in theme editor." msgstr "Tích hợp trình tạo theme." #: ../../docs/about/list_of_features.rst:718 msgid "Generate a theme based on the current editor theme settings." msgstr "Tạo một theme dựa trên thiết lập theme hiện tại của editor." #: ../../docs/about/list_of_features.rst:720 msgid "Procedural vector-based theming using :ref:`class_StyleBoxFlat`." msgstr "Lập trình theme dựa trên vector sử dụng :ref:`class_StyleBoxFlat`." #: ../../docs/about/list_of_features.rst:722 msgid "" "Supports rounded/beveled corners, drop shadows, per-border widths and " "antialiasing." msgstr "" "Hỗ trợ các góc bo tròn/vát, đổ bóng, độ rộng của mỗi đường viền và khử răng " "cưa." #: ../../docs/about/list_of_features.rst:724 msgid "Texture-based theming using :ref:`class_StyleBoxTexture`." msgstr "Tạo theme dựa trên texture sử dụng :ref:`class_StyleBoxTexture`." #: ../../docs/about/list_of_features.rst:726 msgid "" "Godot's small distribution size can make it a suitable alternative to " "frameworks like Electron or Qt." msgstr "" "Dung lượng nhỏ của Godot có thể khiến nó trở thành một lựa chọn thay thế phù " "hợp cho các framework như Electron hoặc Qt." #: ../../docs/about/list_of_features.rst:730 #: ../../docs/about/docs_changelog.rst:211 #: ../../docs/about/docs_changelog.rst:269 #: ../../docs/about/docs_changelog.rst:500 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.1.rst:49 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.2.rst:62 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.3.rst:39 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.3.rst:262 #: ../../docs/tutorials/2d/particle_process_material_2d.rst:178 #: ../../docs/tutorials/2d/custom_drawing_in_2d.rst:713 #: ../../docs/tutorials/3d/particles/process_material_properties.rst:322 #: ../../docs/tutorials/animation/index.rst:4 #: ../../docs/engine_details/file_formats/tscn.rst:382 msgid "Animation" msgstr "Animation" #: ../../docs/about/list_of_features.rst:732 msgid "Direct kinematics and inverse kinematics." msgstr "" "Động học trực tiếp (direct kinematic) và động học nghịch đảo (inverse " "kinematic)." #: ../../docs/about/list_of_features.rst:733 msgid "Support for animating any property with customizable interpolation." msgstr "" "Hỗ trợ animate bất kỳ thuộc tính nào bằng phép nội suy có khả năng tùy biến " "(customizable interpolation)." #: ../../docs/about/list_of_features.rst:734 msgid "Support for calling methods in animation tracks." msgstr "Hỗ trợ gọi phương thức trên các animation track." #: ../../docs/about/list_of_features.rst:735 msgid "Support for playing sounds in animation tracks." msgstr "Hỗ trợ phát âm thanh trên các animation track." #: ../../docs/about/list_of_features.rst:736 msgid "Support for Bézier curves in animation." msgstr "Hỗ trợ đường cong Bézier trong animation." #: ../../docs/about/list_of_features.rst:739 msgid "File formats" msgstr "Các định dạng file" #: ../../docs/about/list_of_features.rst:741 msgid "" "Scenes and resources can be saved in :ref:`text-based " "` or binary formats." msgstr "" "Các scene và resource có thể được lưu trong định dạng :ref:`text-based " "` hoặc binary." #: ../../docs/about/list_of_features.rst:743 msgid "" "Text-based formats are human-readable and more friendly to version control." msgstr "Các định text-based dễ đọc và thân thiện hơn với version control." #: ../../docs/about/list_of_features.rst:744 msgid "Binary formats are faster to save/load for large scenes/resources." msgstr "" "Các định dạng binary save/load nhanh hơn đối với các scene/resource lớn." #: ../../docs/about/list_of_features.rst:746 msgid "Read and write text or binary files using :ref:`class_FileAccess`." msgstr "Đọc ghi file (text hoặc binary) sử dụng :ref:`class_FileAccess`." #: ../../docs/about/list_of_features.rst:748 msgid "Can optionally be compressed or encrypted." msgstr "Có thể bật tùy chọn nén hoặc mã hóa file." #: ../../docs/about/list_of_features.rst:750 msgid "Read and write :ref:`class_JSON` files." msgstr "Đọc ghi các file :ref:`class_JSON`." #: ../../docs/about/list_of_features.rst:751 msgid "" "Read and write INI-style configuration files using :ref:`class_ConfigFile`." msgstr "Đọc ghi các file cấu hình dạng INI sử dụng :ref:`class_ConfigFile`." #: ../../docs/about/list_of_features.rst:753 msgid "Can (de)serialize any Godot datatype, including Vector2/3, Color, ..." msgstr "" "Có thể (de)serialize bất kỳ kiểu dữ liệu Godot nào, bao gồm Vector2/3, " "Color,..." #: ../../docs/about/list_of_features.rst:755 msgid "Read XML files using :ref:`class_XMLParser`." msgstr "Đọc file XML sử dụng :ref:`class_XMLParser`." #: ../../docs/about/list_of_features.rst:756 msgid "" ":ref:`Load and save images, audio/video, fonts and ZIP archives " "` in an exported project without having to " "go through Godot's import system." msgstr "" ":ref:`Load và save hình ảnh, audio/video, font và file ZIP " "` trong một project đã xuất bản mà không cần " "phải thông qua hệ thống import của Godot." #: ../../docs/about/list_of_features.rst:758 msgid "" "Pack game data into a PCK file (custom format optimized for fast seeking), " "into a ZIP archive, or directly into the executable for single-file " "distribution." msgstr "" "Đóng gói dữ liệu game vào một file PCK (định dạng tùy chỉnh được tối ưu hóa " "để tìm kiếm nhanh), vào file ZIP hoặc nhúng trực tiếp vào file thực thi để " "phân phối." #: ../../docs/about/list_of_features.rst:760 msgid "" ":ref:`Export additional PCK files` that can be read by " "the engine to support mods and DLCs." msgstr "" ":ref:`Export các file PCK bổ sung ` có thể được đọc bởi " "engine để hỗ trợ các mod và DLC." #: ../../docs/about/list_of_features.rst:764 #: ../../docs/about/docs_changelog.rst:552 msgid "Miscellaneous" msgstr "Khác" #: ../../docs/about/list_of_features.rst:766 msgid "" ":ref:`Video playback ` with built-in support for Ogg " "Theora." msgstr ":ref:`Video playback ` đi kèm hỗ trợ Ogg Theora." #: ../../docs/about/list_of_features.rst:767 msgid "" ":ref:`Movie Maker mode ` to record videos from a " "running project with synchronized audio and perfect frame pacing." msgstr "" ":ref:`Movie Maker mode ` dùng để thâu video từ một " "project đang chạy với âm thanh được đồng bộ và tốc độ khung hình hoàn hảo." #: ../../docs/about/list_of_features.rst:769 msgid "" ":ref:`Low-level access to servers ` which allows " "bypassing the scene tree's overhead when needed." msgstr "" ":ref:`Low-level access to servers ` cho phép bỏ qua hoạt " "động của scene khi cần." #: ../../docs/about/list_of_features.rst:771 msgid "" ":ref:`Command line interface ` for automation." msgstr "" ":ref:`Command line interface ` dùng cho tự động " "hóa." #: ../../docs/about/list_of_features.rst:773 msgid "Export and deploy projects using continuous integration platforms." msgstr "" "Export và phân phối các project bằng cách sử dụng các nền tảng tích hợp liên " "tục." #: ../../docs/about/list_of_features.rst:774 msgid "" "`Shell completion scripts `__ are available for Bash, zsh and fish." msgstr "" "`Shell completion scripts `__ khả dụng cho Bash, zsh và fish." #: ../../docs/about/list_of_features.rst:776 msgid "" "Print colored text to standard output on all platforms " "using :ref:`print_rich `." msgstr "" "In text có màu tới standard output trên tất cả các nền tảng sử " "dụng :ref:`print_rich `." #: ../../docs/about/list_of_features.rst:779 msgid "" "The editor can :ref:`detect features used in a project and create a " "compilation profile `, which " "can be used to create smaller export template binaries with unneeded " "features disabled." msgstr "" #: ../../docs/about/list_of_features.rst:783 msgid "" "Support for :ref:`C++ modules ` statically linked " "into the engine binary." msgstr "" "Hỗ trợ liên kết tĩnh :ref:`các module C++ ` vào " "binary của engine." #: ../../docs/about/list_of_features.rst:786 msgid "" "Most built-in modules can be disabled at compile-time to reduce binary size " "in custom builds. See :ref:`doc_optimizing_for_size` for details." msgstr "" #: ../../docs/about/list_of_features.rst:789 msgid "Engine and editor written in C++17." msgstr "Engine và editor được viết bằng C++17." #: ../../docs/about/list_of_features.rst:791 msgid "" "Can be :ref:`compiled ` using GCC, " "Clang and MSVC. MinGW is also supported." msgstr "" "Có thể :ref:`được biên dịch ` sử dụng " "GCC, Clang và MSVC. MinGW cũng được hỗ trợ." #: ../../docs/about/list_of_features.rst:793 msgid "" "Friendly towards packagers. In most cases, system libraries can be used " "instead of the ones provided by Godot. The build system doesn't download " "anything. Builds can be fully reproducible." msgstr "" "Thân thiện với các trình đóng gói. Trong hầu hết các trường hợp, thư viện hệ " "thống có thể được sử dụng thay vì thư viện do Godot cung cấp. Build system " "không tải xuống bất cứ thứ gì. Các bản build có thể được tái tạo hoàn toàn." #: ../../docs/about/list_of_features.rst:797 msgid "Licensed under the permissive MIT license." msgstr "Được cấp phép theo giấy phép MIT." #: ../../docs/about/list_of_features.rst:799 #, fuzzy msgid "" "Open development process with `contributions welcome `__." msgstr "" "Quá trình phát triển mở cửa :ref:`chào đón những sự đóng góp " "`." #: ../../docs/about/list_of_features.rst:803 msgid "" "The `Godot proposals repository `__ lists features that have been requested by the community and " "may be implemented in future Godot releases." msgstr "" "Trang `Godot proposals repository `__ liệt kê những tính năng được cộng đồng yêu cầu và có thể được " "cài đặt trong những phiên bản Godot tương lai." #: ../../docs/about/system_requirements.rst:6 msgid "System requirements" msgstr "Yêu cầu hệ thống" #: ../../docs/about/system_requirements.rst:8 msgid "" "This page contains system requirements for the editor and exported projects. " "These specifications are given for informative purposes only, but they can " "be referred to if you're looking to build or upgrade a system to use Godot " "on." msgstr "" "Trang này chứa yêu cầu hệ thống cho editor và project được xuất bản. Các " "thông số này chỉ nhằm mục đích cung cấp thông tin đại khái, tuy nhiên bạn có " "thể tham khảo nó nếu bạn đang tính build hoặc upgrade một hệ thống để chạy " "Godot." #: ../../docs/about/system_requirements.rst:13 msgid "Godot editor" msgstr "Godot editor" #: ../../docs/about/system_requirements.rst:15 msgid "" "These are the **minimum** specifications required to run the Godot editor " "and work on a simple 2D or 3D project:" msgstr "" "Dưới đây là các yêu cầu cấu hình **tối thiểu** để chạy Godot editor và làm " "việc trên các project 2D hoặc 3D đơn giản:" #: ../../docs/about/system_requirements.rst:19 #: ../../docs/about/system_requirements.rst:204 msgid "Desktop or laptop PC - Minimum" msgstr "Desktop hoặc laptop PC - Tối thiểu" #: ../../docs/about/system_requirements.rst:26 #: ../../docs/about/system_requirements.rst:79 #: ../../docs/about/system_requirements.rst:116 #: ../../docs/about/system_requirements.rst:154 #: ../../docs/about/system_requirements.rst:211 #: ../../docs/about/system_requirements.rst:256 #: ../../docs/about/system_requirements.rst:298 #: ../../docs/about/system_requirements.rst:339 msgid "**CPU**" msgstr "**CPU**" #: ../../docs/about/system_requirements.rst:26 #: ../../docs/about/system_requirements.rst:211 #, fuzzy msgid "" "**Windows:** x86_32 CPU with SSE2 support, x86_64 CPU with SSE4.2 support, " "ARMv8 CPU" msgstr "**Linux:** CPU x86_32 với SSE2, x86_64, ARMv7 hoặc ARMv8" #: ../../docs/about/system_requirements.rst:28 #: ../../docs/about/system_requirements.rst:214 #, fuzzy msgid "*Example: Intel Core 2 Duo E8200, AMD FX-4100, Snapdragon X Elite*" msgstr "*Ví dụ: Intel Core 2 Duo E8200, AMD Athlon XE BE-2300, Raspberry Pi 4*" #: ../../docs/about/system_requirements.rst:30 #: ../../docs/about/system_requirements.rst:120 #: ../../docs/about/system_requirements.rst:216 #: ../../docs/about/system_requirements.rst:302 msgid "**macOS:** x86_64 or ARM CPU (Apple Silicon)" msgstr "**macOS:** CPU x86_64 hoặc ARM (Apple Silicon)" #: ../../docs/about/system_requirements.rst:32 #: ../../docs/about/system_requirements.rst:218 msgid "*Example: Intel Core 2 Duo SU9400, Apple M1*" msgstr "*Ví dụ: Intel Core 2 Duo SU9400, Apple M1*" #: ../../docs/about/system_requirements.rst:34 #: ../../docs/about/system_requirements.rst:220 #, fuzzy msgid "" "**Linux:** x86_32 CPU with SSE2 support, x86_64 CPU with SSE4.2 support, " "ARMv7 or ARMv8 CPU" msgstr "**Linux:** CPU x86_32 với SSE2, x86_64, ARMv7 hoặc ARMv8" #: ../../docs/about/system_requirements.rst:37 #: ../../docs/about/system_requirements.rst:223 #, fuzzy msgid "*Example: Intel Core 2 Duo E8200, AMD FX-4100, Raspberry Pi 4*" msgstr "*Ví dụ: Intel Core 2 Duo E8200, AMD Athlon XE BE-2300, Raspberry Pi 4*" #: ../../docs/about/system_requirements.rst:39 #: ../../docs/about/system_requirements.rst:85 #: ../../docs/about/system_requirements.rst:128 #: ../../docs/about/system_requirements.rst:160 #: ../../docs/about/system_requirements.rst:225 #: ../../docs/about/system_requirements.rst:264 #: ../../docs/about/system_requirements.rst:311 #: ../../docs/about/system_requirements.rst:347 msgid "**GPU**" msgstr "**GPU**" #: ../../docs/about/system_requirements.rst:39 msgid "**Forward+ renderer:** Integrated graphics with full Vulkan 1.0 support" msgstr "" "**Phương thức render Forward+:** Card đồ họa tích hợp nào hỗ trợ đầy đủ " "Vulkan 1.0" #: ../../docs/about/system_requirements.rst:41 #: ../../docs/about/system_requirements.rst:45 #: ../../docs/about/system_requirements.rst:228 #: ../../docs/about/system_requirements.rst:233 #, fuzzy msgid "" "*Example: Intel HD Graphics 510 (Skylake), AMD Radeon R5 Graphics (Kaveri)*" msgstr "" "*Ví dụ: Intel HD Graphics 5500 (Broadwell), AMD Radeon R5 Graphics (Kaveri)*" #: ../../docs/about/system_requirements.rst:43 msgid "**Mobile renderer:** Integrated graphics with full Vulkan 1.0 support" msgstr "" "**Phương thức render Mobile:** Card đồ họa tích hợp nào hỗ trợ đầy đủ Vulkan " "1.0" #: ../../docs/about/system_requirements.rst:47 msgid "" "**Compatibility renderer:** Integrated graphics with full OpenGL 3.3 support" msgstr "" "**Phương thức render Compatibility:** Card đồ họa tích hợp nào hỗ trợ đầy đủ " "OpenGL 3.3" #: ../../docs/about/system_requirements.rst:49 #: ../../docs/about/system_requirements.rst:238 msgid "" "*Example: Intel HD Graphics 2500 (Ivy Bridge), AMD Radeon R5 Graphics " "(Kaveri)*" msgstr "" "*Ví dụ: Intel HD Graphics 2500 (Ivy Bridge), AMD Radeon R5 Graphics (Kaveri)*" #: ../../docs/about/system_requirements.rst:51 #: ../../docs/about/system_requirements.rst:97 #: ../../docs/about/system_requirements.rst:140 #: ../../docs/about/system_requirements.rst:172 #: ../../docs/about/system_requirements.rst:240 #: ../../docs/about/system_requirements.rst:280 #: ../../docs/about/system_requirements.rst:325 #: ../../docs/about/system_requirements.rst:361 msgid "**RAM**" msgstr "**RAM**" #: ../../docs/about/system_requirements.rst:51 msgid "**Native editor:** 4 GB" msgstr "**Native editor:** 4 GB" #: ../../docs/about/system_requirements.rst:52 #: ../../docs/about/system_requirements.rst:173 msgid "**Web editor:** 8 GB" msgstr "**Web editor:** 8 GB" #: ../../docs/about/system_requirements.rst:54 #: ../../docs/about/system_requirements.rst:100 #: ../../docs/about/system_requirements.rst:143 #: ../../docs/about/system_requirements.rst:175 #: ../../docs/about/system_requirements.rst:243 #: ../../docs/about/system_requirements.rst:283 #: ../../docs/about/system_requirements.rst:328 #: ../../docs/about/system_requirements.rst:364 msgid "**Storage**" msgstr "**Bộ nhớ**" #: ../../docs/about/system_requirements.rst:54 msgid "" "200 MB (used for the executable, project files and cache). Exporting " "projects requires downloading export templates separately (1.3 GB after " "installation)." msgstr "" "200 MB (được sử dụng cho các file thực thi, file dự án và cache). Xuất bản " "các project yêu cầu tải thêm các export template (1.3 GB sau khi cài đặt)." #: ../../docs/about/system_requirements.rst:58 #: ../../docs/about/system_requirements.rst:104 #: ../../docs/about/system_requirements.rst:145 #: ../../docs/about/system_requirements.rst:177 #: ../../docs/about/system_requirements.rst:245 #: ../../docs/about/system_requirements.rst:285 #: ../../docs/about/system_requirements.rst:330 #: ../../docs/about/system_requirements.rst:366 msgid "**Operating system**" msgstr "**Hệ điều hành**" #: ../../docs/about/system_requirements.rst:58 #, fuzzy msgid "" "**Native editor:** Windows 10, macOS 10.13 (Compatibility) or macOS 10.15 " "(Forward+/Mobile), Linux distribution released after 2018" msgstr "" "**Native editor:** Windows 7, macOS 10.13 (Compatibility) hoặc macOS 10.15 " "(Forward+/Mobile), các distro Linux từ năm 2016 trở đi" #: ../../docs/about/system_requirements.rst:60 #: ../../docs/about/system_requirements.rst:105 #: ../../docs/about/system_requirements.rst:248 #: ../../docs/about/system_requirements.rst:287 msgid "" "**Web editor:** Recent versions of mainstream browsers: Firefox and " "derivatives (including ESR), Chrome and Chromium derivatives, Safari and " "WebKit derivatives." msgstr "" #: ../../docs/about/system_requirements.rst:66 msgid "" "If your x86_64 CPU does not support SSE4.2, you can still run the 32-bit " "Godot executable which only has a SSE2 requirement (all x86_64 CPUs support " "SSE2)." msgstr "" #: ../../docs/about/system_requirements.rst:69 msgid "" "While supported on Linux, we have no official minimum requirements for " "running on rv64 (RISC-V), ppc64 & ppc32 (PowerPC), and loongarch64. In " "addition you must compile the editor for that platform (as well as export " "templates) yourself, no official downloads are currently provided. RISC-V " "compiling instructions can be found on the :ref:`doc_compiling_for_linuxbsd` " "page." msgstr "" #: ../../docs/about/system_requirements.rst:76 #: ../../docs/about/system_requirements.rst:253 msgid "Mobile device (smartphone/tablet) - Minimum" msgstr "Thiết bị di động (smartphone/tablet) - Tối thiểu" #: ../../docs/about/system_requirements.rst:79 #: ../../docs/about/system_requirements.rst:256 msgid "**Android:** SoC with any 32-bit or 64-bit ARM or x86 CPU" msgstr "**Android:** SoC với bất kỳ CPU ARM 32/64-bit nào hoặc CPU x86" #: ../../docs/about/system_requirements.rst:81 #: ../../docs/about/system_requirements.rst:258 msgid "*Example: Qualcomm Snapdragon 430, Samsung Exynos 5 Octa 5430*" msgstr "*Ví dụ: Qualcomm Snapdragon 430, Samsung Exynos 5 Octa 5430*" #: ../../docs/about/system_requirements.rst:83 #: ../../docs/about/system_requirements.rst:158 msgid "**iOS:** *Cannot run the editor*" msgstr "**iOS:** *Không thể chạy editor*" #: ../../docs/about/system_requirements.rst:85 #, fuzzy msgid "**Forward+ renderer:** SoC featuring GPU with full Vulkan 1.0 support" msgstr "**Phương thức render Forward+:** SoC có GPU hỗ trợ đầy đủ Vulkan 1.0" #: ../../docs/about/system_requirements.rst:87 #: ../../docs/about/system_requirements.rst:91 msgid "*Example: Qualcomm Adreno 505, Mali-G71 MP2*" msgstr "*Ví dụ: Qualcomm Adreno 505, Mali-G71 MP2*" #: ../../docs/about/system_requirements.rst:89 #, fuzzy msgid "**Mobile renderer:** SoC featuring GPU with full Vulkan 1.0 support" msgstr "**Phương thức render Mobile:** SoC có GPU hỗ trợ đầy đủ Vulkan 1.0" #: ../../docs/about/system_requirements.rst:93 #: ../../docs/about/system_requirements.rst:276 #, fuzzy msgid "" "**Compatibility renderer:** SoC featuring GPU with full OpenGL ES 3.0 support" msgstr "" "**Phương thức render Compatibility:** SoC có GPU hỗ trợ đầy đủ OpenGL ES 3.0" #: ../../docs/about/system_requirements.rst:95 msgid "*Example: Qualcomm Adreno 306, Mali-T628 MP6*" msgstr "*Ví dụ: Qualcomm Adreno 306, Mali-T628 MP6*" #: ../../docs/about/system_requirements.rst:97 msgid "**Native editor:** 3 GB" msgstr "**Native editor:** 3 GB" #: ../../docs/about/system_requirements.rst:98 msgid "**Web editor:** 6 GB" msgstr "**Web editor:** 6 GB" #: ../../docs/about/system_requirements.rst:100 #, fuzzy msgid "" "200 MB (used for the executable, project files and cache) Exporting projects " "requires downloading export templates separately (1.3 GB after installation)" msgstr "" "200 MB (được sử dụng cho các file thực thi, file dự án và cache). Xuất bản " "các project yêu cầu tải thêm các export template (1.3 GB sau khi cài đặt)." #: ../../docs/about/system_requirements.rst:104 #, fuzzy msgid "" "**Native editor:** Android 6.0 (Compatibility) or Android 9.0 (Forward+/" "Mobile)" msgstr "" "**Native editor:** Android 6.0 (Compatibility) hoặc Android 9.0 (Forward+/" "Mobile), iOS 11.0" #: ../../docs/about/system_requirements.rst:109 msgid "" "These are the **recommended** specifications to get a smooth experience with " "the Godot editor on a simple 2D or 3D project:" msgstr "" "Dưới đây là cấu hình **được khuyến nghị** để trải nghiệm mượt mà Godot " "editor trên một project 2D hoặc 3D đơn giản:" #: ../../docs/about/system_requirements.rst:113 #: ../../docs/about/system_requirements.rst:295 msgid "Desktop or laptop PC - Recommended" msgstr "Desktop hoặc laptop PC - Khuyến nghị" #: ../../docs/about/system_requirements.rst:116 #: ../../docs/about/system_requirements.rst:298 #, fuzzy msgid "" "**Windows:** x86_64 CPU with SSE4.2 support, with 4 physical cores or more, " "ARMv8 CPU" msgstr "**Windows:** CPU x86_64 với SSE4.2 và 4 nhân vật lý trở lên" #: ../../docs/about/system_requirements.rst:118 #: ../../docs/about/system_requirements.rst:300 #, fuzzy msgid "*Example: Intel Core i5-6600K, AMD Ryzen 5 1600, Snapdragon X Elite*" msgstr "*Ví dụ: Intel Core i5-6600K, AMD Ryzen 5 1600*" #: ../../docs/about/system_requirements.rst:122 #: ../../docs/about/system_requirements.rst:304 msgid "*Example: Intel Core i5-8500, Apple M1*" msgstr "*Ví dụ: Intel Core i5-8500, Apple M1*" #: ../../docs/about/system_requirements.rst:124 #, fuzzy msgid "**Linux:** x86_64 CPU with SSE4.2 support, ARMv7 or ARMv8 CPU" msgstr "**Linux:** CPU x86_32 với SSE2, x86_64, ARMv7 hoặc ARMv8" #: ../../docs/about/system_requirements.rst:126 #: ../../docs/about/system_requirements.rst:309 msgid "" "*Example: Intel Core i5-6600K, AMD Ryzen 5 1600, Raspberry Pi 5 with " "overclocking*" msgstr "" "*Ví dụ: Intel Core i5-6600K, AMD Ryzen 5 1600, Raspberry Pi 5 with " "overclocking*" #: ../../docs/about/system_requirements.rst:128 #, fuzzy msgid "**Forward+ renderer:** Dedicated graphics with full Vulkan 1.2 support" msgstr "**Phương thức render Forward+:** Card rời hỗ trợ đầy đủ Vulkan 1.2" #: ../../docs/about/system_requirements.rst:130 #: ../../docs/about/system_requirements.rst:134 #: ../../docs/about/system_requirements.rst:314 #: ../../docs/about/system_requirements.rst:319 msgid "" "*Example: NVIDIA GeForce GTX 1050 (Pascal), AMD Radeon RX 460 (GCN 4.0)*" msgstr "*Ví dụ: NVIDIA GeForce GTX 1050 (Pascal), AMD Radeon RX 460 (GCN 4.0)*" #: ../../docs/about/system_requirements.rst:132 #, fuzzy msgid "**Mobile renderer:** Dedicated graphics with full Vulkan 1.2 support" msgstr "**Phương thức render Mobile:** Card rời hỗ trợ đầy đủ Vulkan 1.2" #: ../../docs/about/system_requirements.rst:136 #: ../../docs/about/system_requirements.rst:321 #, fuzzy msgid "" "**Compatibility renderer:** Dedicated graphics with full OpenGL 4.6 support" msgstr "" "**Phương thức render Compatibility:** Card rời hỗ trợ đầy đủ OpenGL 4.6" #: ../../docs/about/system_requirements.rst:138 #: ../../docs/about/system_requirements.rst:323 msgid "" "*Example: NVIDIA GeForce GTX 650 (Kepler), AMD Radeon HD 7750 (GCN 1.0)*" msgstr "*Ví dụ: NVIDIA GeForce GTX 650 (Kepler), AMD Radeon HD 7750 (GCN 1.0)*" #: ../../docs/about/system_requirements.rst:140 msgid "**Native editor:** 8 GB" msgstr "**Native editor:** 8 GB" #: ../../docs/about/system_requirements.rst:141 msgid "**Web editor:** 12 GB" msgstr "**Web editor:** 12 GB" #: ../../docs/about/system_requirements.rst:143 #: ../../docs/about/system_requirements.rst:175 msgid "" "1.5 GB (used for the executable, project files, all export templates and " "cache)" msgstr "" "1.5 GB (được sử dụng cho các file thực thi, file dự án, tất cả export " "template và cache)" #: ../../docs/about/system_requirements.rst:145 msgid "" "**Native editor:** Windows 10, macOS 10.15, Linux distribution released " "after 2020" msgstr "" "**Native editor:** Windows 10, macOS 10.15, các distro Linux từ năm 2020 trở " "đi" #: ../../docs/about/system_requirements.rst:147 msgid "**Web editor:** Latest version of Firefox, Chrome, Edge, Safari, Opera" msgstr "" "**Web editor:** Phiên bản mới nhất của Firefox, Chrome, Edge, Safari, Opera" #: ../../docs/about/system_requirements.rst:151 #: ../../docs/about/system_requirements.rst:336 msgid "Mobile device (smartphone/tablet) - Recommended" msgstr "Thiết bị di động (smartphone/tablet) - Khuyến nghị" #: ../../docs/about/system_requirements.rst:154 #: ../../docs/about/system_requirements.rst:339 msgid "" "**Android:** SoC with 64-bit ARM or x86 CPU, with 3 \"performance\" cores or " "more" msgstr "" "**Android:** SoC với CPU ARM 64-bit hoặc x86, có ít nhất 3 nhân hiệu năng cao" #: ../../docs/about/system_requirements.rst:156 #: ../../docs/about/system_requirements.rst:341 msgid "*Example: Qualcomm Snapdragon 845, Samsung Exynos 9810*" msgstr "*Ví dụ: Qualcomm Snapdragon 845, Samsung Exynos 9810*" #: ../../docs/about/system_requirements.rst:160 #, fuzzy msgid "**Forward+ renderer:** SoC featuring GPU with full Vulkan 1.2 support" msgstr "**Phương thức render Forward+:** SoC có GPU hỗ trợ đầy đủ Vulkan 1.2" #: ../../docs/about/system_requirements.rst:162 #: ../../docs/about/system_requirements.rst:166 #: ../../docs/about/system_requirements.rst:170 msgid "*Example: Qualcomm Adreno 630, Mali-G72 MP18*" msgstr "*Ví dụ: Qualcomm Adreno 630, Mali-G72 MP18*" #: ../../docs/about/system_requirements.rst:164 #, fuzzy msgid "**Mobile renderer:** SoC featuring GPU with full Vulkan 1.2 support" msgstr "**Phương thức render Mobile:** SoC có GPU hỗ trợ đầy đủ Vulkan 1.2" #: ../../docs/about/system_requirements.rst:168 #: ../../docs/about/system_requirements.rst:357 #, fuzzy msgid "" "**Compatibility renderer:** SoC featuring GPU with full OpenGL ES 3.2 support" msgstr "" "**Phương thức render Compatibility:** SoC có GPU hỗ trợ đầy đủ OpenGL ES 3.2" #: ../../docs/about/system_requirements.rst:172 msgid "**Native editor:** 6 GB" msgstr "**Native editor:** 6 GB" #: ../../docs/about/system_requirements.rst:177 #, fuzzy msgid "**Native editor:** Android 9.0" msgstr "**Native editor:** Android 9.0 hoặc iOS 11.0" #: ../../docs/about/system_requirements.rst:178 msgid "" "**Web editor:** Latest version of Firefox, Chrome, Edge, Safari, Opera, " "Samsung Internet" msgstr "" "**Web editor:** Phiên bản mới nhất của Firefox, Chrome, Edge, Safari, Opera, " "Samsung Internet" #: ../../docs/about/system_requirements.rst:183 msgid "Exported Godot project" msgstr "Project Godot được xuất bản" #: ../../docs/about/system_requirements.rst:187 #, fuzzy msgid "" "The requirements below are a baseline for a **simple** 2D or 3D project, " "with basic scripting and few visual flourishes. CPU, GPU, RAM and storage " "requirements will heavily vary depending on your project's scope, its " "renderer, viewport resolution and graphics settings chosen. Other programs " "running on the system while the project is running will also compete for " "resources, including RAM and video RAM." msgstr "" "Yêu cầu cấu hình dưới đây là cơ sở cho một project 2D hoặc 3D **đơn giản**, " "với script cơ bản và ít hình ảnh trực quan. Các yêu cầu về CPU, GPU, RAM và " "bộ nhớ sẽ khác nhau tùy thuộc vào quy mô dự án của bạn, phương thức render, " "độ phân giải và mức thiết lập đồ họa được chọn. Các chương trình đang chạy " "khác trên hệ thống cũng đớp tài nguyên, bao gồm RAM và VRAM." #: ../../docs/about/system_requirements.rst:194 msgid "" "It is strongly recommended to do your own testing on low-end hardware to " "make sure your project runs at the desired speed. To provide scalability for " "low-end hardware, you will also need to introduce a `graphics options menu " "`__ to your project." msgstr "" "Bạn nên tự mình test trên phần cứng đủ thấp để đảm bảo project của bạn chạy " "trên đó ở tốc độ như ý. Để cung cấp khả năng chạy trên phần cứng thấp, bạn " "cũng cần đưa `menu tuỳ chỉnh đồ hoạ `__ vào project của mình." #: ../../docs/about/system_requirements.rst:200 msgid "" "These are the **minimum** specifications required to run a simple 2D or 3D " "project exported with Godot:" msgstr "" "Dưới đây là cấu hình **tối thiểu** để chạy một project được xuất bản 2D hoặc " "3D đơn giản với Godot:" #: ../../docs/about/system_requirements.rst:225 #, fuzzy msgid "" "**Forward+ renderer:** Integrated graphics with full Vulkan 1.0 support, " "Metal 3 support (macOS) or Direct3D 12 (12_0 feature level) support (Windows)" msgstr "" "**Phương thức render Forward+:** Card đồ họa tích hợp nào hỗ trợ đầy đủ " "Vulkan 1.0" #: ../../docs/about/system_requirements.rst:230 #, fuzzy msgid "" "**Mobile renderer:** Integrated graphics with full Vulkan 1.0 support, Metal " "3 support (macOS) or Direct3D 12 (12_0 feature level) support (Windows)" msgstr "" "**Phương thức render Mobile:** Card đồ họa tích hợp nào hỗ trợ đầy đủ Vulkan " "1.0" #: ../../docs/about/system_requirements.rst:235 #, fuzzy msgid "" "**Compatibility renderer:** Integrated graphics with full OpenGL 3.3 support " "or Direct3D 11 support (Windows)." msgstr "" "**Phương thức render Compatibility:** Card đồ họa tích hợp nào hỗ trợ đầy đủ " "OpenGL 3.3" #: ../../docs/about/system_requirements.rst:240 #: ../../docs/about/system_requirements.rst:361 msgid "**For native exports:** 2 GB" msgstr "**Xuất native:** 2 GB" #: ../../docs/about/system_requirements.rst:241 #: ../../docs/about/system_requirements.rst:362 msgid "**For web exports:** 4 GB" msgstr "**Xuất web:** 4 GB" #: ../../docs/about/system_requirements.rst:243 #: ../../docs/about/system_requirements.rst:283 #: ../../docs/about/system_requirements.rst:328 #: ../../docs/about/system_requirements.rst:364 msgid "150 MB (used for the executable, project files and cache)" msgstr "150 MB (được dùng cho các file thực thi, file dự án và cache)" #: ../../docs/about/system_requirements.rst:245 #, fuzzy msgid "" "**For native exports:** Windows 10, macOS 10.13 (Compatibility), macOS 10.15 " "(Forward+/Mobile, Vulkan), macOS 13.0 (Forward+/Mobile, Metal), Linux " "distribution released after 2018" msgstr "" "**Xuất native:** Windows 7, macOS 10.13 (Compatibility) hoặc macOS 10.15 " "(Forward+/Mobile), các distro Linux từ năm 2016 trở đi" #: ../../docs/about/system_requirements.rst:260 msgid "**iOS:** SoC with any 64-bit ARM CPU" msgstr "**iOS:** SoC với bất kỳ CPU ARM 64-bit nào" #: ../../docs/about/system_requirements.rst:262 msgid "*Example: Apple A7 (iPhone 5S)*" msgstr "*Ví dụ: Apple A7 (iPhone 5S)*" #: ../../docs/about/system_requirements.rst:264 #, fuzzy msgid "" "**Forward+ renderer:** SoC featuring GPU with full Vulkan 1.0 support, or " "Metal 3 support (iOS/iPadOS)" msgstr "**Phương thức render Forward+:** SoC có GPU hỗ trợ đầy đủ Vulkan 1.0" #: ../../docs/about/system_requirements.rst:267 #: ../../docs/about/system_requirements.rst:273 #, fuzzy msgid "" "*Example (Vulkan): Qualcomm Adreno 505, Mali-G71 MP2, Apple A12 (iPhone XR/" "XS)*" msgstr "*Ví dụ: Qualcomm Adreno 630, Mali-G72 MP18, Apple G11P (iPhone XR/XS)*" #: ../../docs/about/system_requirements.rst:268 #: ../../docs/about/system_requirements.rst:274 #, fuzzy msgid "*Example (Metal): Apple A12 (iPhone XR/XS)*" msgstr "*Ví dụ: Apple A7 (iPhone 5S)*" #: ../../docs/about/system_requirements.rst:270 #, fuzzy msgid "" "**Mobile renderer:** SoC featuring GPU with full Vulkan 1.0 support, or " "Metal 3 support (iOS/iPadOS)" msgstr "**Phương thức render Mobile:** SoC có GPU hỗ trợ đầy đủ Vulkan 1.0" #: ../../docs/about/system_requirements.rst:278 #, fuzzy msgid "*Example: Qualcomm Adreno 306, Mali-T628 MP6, Apple A7 (iPhone 5S)*" msgstr "*Ví dụ: Qualcomm Adreno 306, Mali-T628 MP6, PowerVR G6430 (iPhone 5S)*" #: ../../docs/about/system_requirements.rst:280 msgid "**For native exports:** 1 GB" msgstr "**Xuất native:** 1 GB" #: ../../docs/about/system_requirements.rst:281 msgid "**For web exports:** 2 GB" msgstr "**Xuất web:** 2 GB" #: ../../docs/about/system_requirements.rst:285 #, fuzzy msgid "" "**For native exports:** Android 6.0 (Compatibility), Android 9.0 (Forward+/" "Mobile), iOS 12.0 (Forward+/Mobile, Vulkan), iOS 16.0 (Forward+/Mobile, " "Metal)" msgstr "" "**Xuất native:** Android 6.0 (Compatibility) hoặc Android 9.0 (Forward+/" "Mobile), iOS 11.0" #: ../../docs/about/system_requirements.rst:291 msgid "" "These are the **recommended** specifications to get a smooth experience with " "a simple 2D or 3D project exported with Godot:" msgstr "" "Dưới đây là cấu hình **khuyến nghị** để trải nghiệm mượt mà một project được " "xuất bản 2D hoặc 3D đơn giản:" #: ../../docs/about/system_requirements.rst:306 #, fuzzy msgid "" "**Linux:** x86_64 CPU with SSE4.2 support, with 4 physical cores or more, " "ARMv7 or ARMv8 CPU" msgstr "**Windows:** CPU x86_64 với SSE4.2 và 4 nhân vật lý trở lên" #: ../../docs/about/system_requirements.rst:311 #, fuzzy msgid "" "**Forward+ renderer:** Dedicated graphics with full Vulkan 1.2 support, " "Metal 3 support (macOS), or Direct3D 12 (12_0 feature level) support " "(Windows)" msgstr "**Phương thức render Forward+:** Card rời hỗ trợ đầy đủ Vulkan 1.2" #: ../../docs/about/system_requirements.rst:316 msgid "" "**Mobile renderer:** Dedicated graphics with full Vulkan 1.2 support, Metal " "3 support (macOS), or Direct3D 12 (12_0 feature level) support (Windows)" msgstr "" #: ../../docs/about/system_requirements.rst:325 msgid "**For native exports:** 4 GB" msgstr "**Xuất native:** 4 GB" #: ../../docs/about/system_requirements.rst:326 msgid "**For web exports:** 8 GB" msgstr "**Xuất web:** 8 GB" #: ../../docs/about/system_requirements.rst:330 #, fuzzy msgid "" "**For native exports:** Windows 10, macOS 10.15 (Forward+/Mobile, Vulkan), " "macOS 13.0 (Forward+/Mobile, Metal), Linux distribution released after 2020" msgstr "" "**Xuất native:** Windows 7, macOS 10.13 (Compatibility) hoặc macOS 10.15 " "(Forward+/Mobile), các distro Linux từ năm 2016 trở đi" #: ../../docs/about/system_requirements.rst:332 msgid "" "**For web exports:** Latest version of Firefox, Chrome, Edge, Safari, Opera" msgstr "" "**Xuất web:** Phiên bản mới nhất của Firefox, Chrome, Edge, Safari, Opera" #: ../../docs/about/system_requirements.rst:343 msgid "**iOS:** SoC with 64-bit ARM CPU" msgstr "**iOS:** SoC với CPU ARM 64-bit" #: ../../docs/about/system_requirements.rst:345 #, fuzzy msgid "*Example: Apple A14 (iPhone 12)*" msgstr "*Ví dụ: Apple A7 (iPhone 5S)*" #: ../../docs/about/system_requirements.rst:347 #, fuzzy msgid "" "**Forward+ renderer:** SoC featuring GPU with full Vulkan 1.2 support, or " "Metal 3 support (iOS/iPadOS)" msgstr "**Phương thức render Forward+:** SoC có GPU hỗ trợ đầy đủ Vulkan 1.2" #: ../../docs/about/system_requirements.rst:350 #: ../../docs/about/system_requirements.rst:355 #: ../../docs/about/system_requirements.rst:359 #, fuzzy msgid "*Example: Qualcomm Adreno 630, Mali-G72 MP18, Apple A14 (iPhone 12)*" msgstr "*Ví dụ: Qualcomm Adreno 630, Mali-G72 MP18, Apple G11P (iPhone XR/XS)*" #: ../../docs/about/system_requirements.rst:352 #, fuzzy msgid "" "**Mobile renderer:** SoC featuring GPU with full Vulkan 1.2 support, or " "Metal 3 support (iOS/iPadOS)" msgstr "**Phương thức render Mobile:** SoC có GPU hỗ trợ đầy đủ Vulkan 1.2" #: ../../docs/about/system_requirements.rst:366 #, fuzzy msgid "" "**For native exports:** Android 9.0, iOS 14.1 (Forward+/Mobile, Vulkan), iOS " "16.0 (Forward+/Mobile, Metal)" msgstr "" "**Xuất native:** Android 6.0 (Compatibility) hoặc Android 9.0 (Forward+/" "Mobile), iOS 11.0" #: ../../docs/about/system_requirements.rst:368 msgid "" "**For web exports:** Latest version of Firefox, Chrome, Edge, Safari, Opera, " "Samsung Internet" msgstr "" "**Xuất web:** Phiên bản mới nhất của Firefox, Chrome, Edge, Safari, Opera, " "Samsung Internet" #: ../../docs/about/system_requirements.rst:374 msgid "" "Godot doesn't use OpenGL/OpenGL ES extensions introduced after OpenGL 3.3/" "OpenGL ES 3.0, but GPUs supporting newer OpenGL/OpenGL ES versions generally " "have fewer driver issues." msgstr "" "Godot không sử dụng các extension của OpenGL/OpenGL ES được giới thiệu sau " "OpenGL 3.3/OpenGL ES 3.0, tuy nhiên GPU hỗ trợ các phiên bản OpenGL/OpenGL " "ES mới hơn thường có ít vấn đề về driver hơn." #: ../../docs/about/faq.rst:-1 msgid "FAQ" msgstr "FAQ" #: ../../docs/about/faq.rst:9 #: ../../docs/community/asset_library/what_is_assetlib.rst:42 msgid "Frequently asked questions" msgstr "Những câu hỏi thường gặp" #: ../../docs/about/faq.rst:12 msgid "" "What can I do with Godot? How much does it cost? What are the license terms?" msgstr "" "Tôi có thể làm gì với Godot? Nó có giá bao nhiêu? Các điều khoản cấp phép là " "gì?" #: ../../docs/about/faq.rst:14 msgid "" "Godot is `Free and open source Software `_ available under the `OSI-approved `_ MIT license. This means it is free as in " "\"free speech\" as well as in \"free beer.\"" msgstr "" "Godot là `Phần mềm Tự do và Mã nguồn mở `_ theo giấy phép MIT `được OSI phê chuẩn " "`_. Điều này có nghĩa là nó free, theo " "cả nghĩa \":abbr:`free speech (tự do ngôn luận)`\" và \":abbr:`free beer " "(bia miễn phí)`.\"" #: ../../docs/about/faq.rst:18 msgid "In short:" msgstr "Nói ngắn gọn:" #: ../../docs/about/faq.rst:20 msgid "" "You are free to download and use Godot for any purpose: personal, non-" "profit, commercial, or otherwise." msgstr "" "Bạn được tự do tải xuống và sử dụng Godot cho bất kỳ mục đích gì: sử dụng cá " "nhân, phi lợi nhuận, thương mại, v.v." #: ../../docs/about/faq.rst:21 msgid "" "You are free to modify, distribute, redistribute, and remix Godot to your " "heart's content, for any reason, both non-commercially and commercially." msgstr "" "Bạn có thể tự do sửa đổi, phân phối, tái phân phối, và thay đổi Godot theo ý " "thích, vì bất kỳ lý do nào, cả phi thương mại lẫn thương mại." #: ../../docs/about/faq.rst:24 msgid "" "All the contents of this accompanying documentation are published 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 "" "Tất cả nội dung của tài liệu đi kèm này được xuất bản theo giấy phép " "Creative Commons Attribution 3.0 (`CC BY 3.0 `_), với ghi công cho \"Juan Linietsky, Ariel Manzur và " "cộng đồng Godot Engine.\"" #: ../../docs/about/faq.rst:28 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 "" "Các logo và các biểu tượng có cùng giấy phép Creative Commons. Lưu ý rằng " "một số thư viện bên thứ ba được bao gồm trong mã nguồn của Godot có thể có " "giấy phép khác." #: ../../docs/about/faq.rst:32 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 "" "Để biết thêm chi tiết, xem file `COPYRIGHT.txt `_ cũng như `LICENSE.txt " "`_ và " "`LOGO_LICENSE.txt `_ trên Godot repository." #: ../../docs/about/faq.rst:37 msgid "" "Also, see `the license page on the Godot website `_." msgstr "" "Ngoài ra, xem `trang giấy phép trên website Godot `_." #: ../../docs/about/faq.rst:40 msgid "Which platforms are supported by Godot?" msgstr "Những nền tảng nào được hỗ trợ bởi Godot?" #: ../../docs/about/faq.rst:42 msgid "**For the editor:**" msgstr "**Để chạy editor:**" #: ../../docs/about/faq.rst:44 ../../docs/about/faq.rst:52 #: ../../docs/about/faq.rst:259 #: ../../docs/tutorials/rendering/jitter_stutter.rst:116 #: ../../docs/tutorials/ui/gui_using_fonts.rst:813 #: ../../docs/engine_details/development/debugging/vulkan/vulkan_validation_layers.rst:16 msgid "Windows" msgstr "Windows" #: ../../docs/about/faq.rst:45 ../../docs/about/faq.rst:53 #: ../../docs/about/faq.rst:270 #: ../../docs/tutorials/editor/default_key_mapping.rst:32 #: ../../docs/tutorials/editor/default_key_mapping.rst:102 #: ../../docs/tutorials/editor/default_key_mapping.rst:123 #: ../../docs/tutorials/editor/default_key_mapping.rst:178 #: ../../docs/tutorials/editor/default_key_mapping.rst:255 #: ../../docs/tutorials/editor/default_key_mapping.rst:344 #: ../../docs/tutorials/editor/default_key_mapping.rst:391 #: ../../docs/tutorials/editor/default_key_mapping.rst:402 #: ../../docs/tutorials/editor/default_key_mapping.rst:415 #: ../../docs/tutorials/editor/default_key_mapping.rst:446 #: ../../docs/tutorials/editor/default_key_mapping.rst:459 #: ../../docs/tutorials/editor/default_key_mapping.rst:482 #: ../../docs/tutorials/editor/default_key_mapping.rst:499 #: ../../docs/tutorials/editor/default_key_mapping.rst:538 #: ../../docs/tutorials/editor/default_key_mapping.rst:565 #: ../../docs/tutorials/rendering/jitter_stutter.rst:170 #: ../../docs/engine_details/development/debugging/vulkan/vulkan_validation_layers.rst:30 msgid "macOS" msgstr "macOS" #: ../../docs/about/faq.rst:46 ../../docs/about/faq.rst:54 #: ../../docs/engine_details/development/debugging/vulkan/vulkan_validation_layers.rst:58 msgid "Linux, \\*BSD" msgstr "Linux, \\*BSD" #: ../../docs/about/faq.rst:47 msgid "Android (experimental)" msgstr "Android (còn đang thử nghiệm)" #: ../../docs/about/faq.rst:48 msgid "`Web `__ (experimental)" msgstr "`Web `__ (còn đang thử nghiệm)" #: ../../docs/about/faq.rst:50 msgid "**For exporting your games:**" msgstr "**Để xuất bản game của bạn:**" #: ../../docs/about/faq.rst:55 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.3.rst:328 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.4.rst:202 #: ../../docs/tutorials/export/one-click_deploy.rst:103 #: ../../docs/tutorials/platform/android/index.rst:4 #: ../../docs/tutorials/rendering/jitter_stutter.rst:177 #: ../../docs/tutorials/ui/gui_using_fonts.rst:813 #: ../../docs/engine_details/development/debugging/vulkan/vulkan_validation_layers.rst:146 msgid "Android" msgstr "Android" #: ../../docs/about/faq.rst:56 #: ../../docs/tutorials/rendering/jitter_stutter.rst:184 #: ../../docs/engine_details/development/debugging/vulkan/vulkan_validation_layers.rst:133 msgid "iOS" msgstr "iOS" #: ../../docs/about/faq.rst:57 #: ../../docs/tutorials/export/one-click_deploy.rst:124 #: ../../docs/tutorials/inputs/controllers_gamepads_joysticks.rst:378 #: ../../docs/tutorials/platform/web/index.rst:7 #: ../../docs/tutorials/rendering/renderers.rst:158 #: ../../docs/engine_details/development/compiling/optimizing_for_size.rst:368 #: ../../docs/engine_details/development/debugging/using_sanitizers.rst:200 #: ../../docs/engine_details/development/debugging/vulkan/vulkan_validation_layers.rst:138 msgid "Web" msgstr "Web" #: ../../docs/about/faq.rst:59 msgid "" "Both 32- and 64-bit binaries are supported where it makes sense, with 64 " "being the default. Official macOS builds support Apple Silicon natively as " "well as x86_64." msgstr "" "Khi thích hợp, cả binary 32 và 64-bit đều được hỗ trợ, với 64 là mặc định. " "Các bản build macOS chính thức hỗ trợ Apple Silicon native cũng như x86_64." #: ../../docs/about/faq.rst:62 msgid "" "Some users also report building and using Godot successfully on ARM-based " "systems with Linux, like the Raspberry Pi." msgstr "" "Một số người dùng cũng báo cáo rằng họ có thể biên dịch và sử dụng thành " "công Godot trên các hệ thống Linux dựa trên ARM như Raspberry Pi." #: ../../docs/about/faq.rst:65 msgid "" "The Godot team can't provide an open source console export due to the " "licensing terms imposed by console manufacturers. Regardless of the engine " "you use, though, releasing games on consoles is always a lot of work. You " "can read more about :ref:`doc_consoles`." msgstr "" "Đội ngũ Godot không thể cung cấp tính năng export nguồn mở cho máy console " "do các điều kiện cấp phép mà nhà sản xuất console áp đặt." #: ../../docs/about/faq.rst:70 msgid "" "For more on this, see the sections on :ref:`exporting ` and :ref:`compiling Godot yourself `." msgstr "" "Để biết thêm chi tiết, xem phần :ref:`xuất bản ` " "và :ref:`tự biên dịch Godot `." #: ../../docs/about/faq.rst:75 msgid "" "Godot 3 also had support for Universal Windows Platform (UWP). This platform " "port was removed in Godot 4 due to lack of maintenance, and it being " "deprecated by Microsoft. It is still available in the current stable release " "of Godot 3 for interested users." msgstr "" "Godot 3 còn hỗ trợ Universal Windows Platform (UWP). Nền tảng này đã bị loại " "bỏ trong Godot 4 do thiếu bảo trì và không còn được Microsoft hỗ trợ. Nó vẫn " "có sẵn trong phiên bản stable hiện tại của Godot 3 cho những ai còn quan tâm." #: ../../docs/about/faq.rst:81 msgid "Which programming languages are supported in Godot?" msgstr "Những ngôn ngữ lập trình nào được hỗ trợ trong Godot?" #: ../../docs/about/faq.rst:83 msgid "" "The officially supported languages for Godot are GDScript, C#, and C++. See " "the subcategories for each language in the :ref:`scripting ` section." msgstr "" "Các ngôn ngữ được hỗ trợ chính thức cho Godot là GDScript, C#, và C++. Xem " "các đề mục con trong phần :ref:`scripting `." #: ../../docs/about/faq.rst:86 msgid "" "If you are just starting out with either Godot or game development in " "general, GDScript is the recommended language to learn and use since it is " "native to Godot. While scripting languages tend to be less performant than " "lower-level languages in the long run, for prototyping, developing Minimum " "Viable Products (MVPs), and focusing on Time-To-Market (TTM), GDScript will " "provide a fast, friendly, and capable way of developing your games." msgstr "" "Nếu bạn mới bắt đầu với Godot hoặc đang tập tành làm game, bạn nên học và sử " "dụng GDScript vì nó là đồ đặc chế dành riêng cho Godot. Mặc dù về lâu dài, " "các ngôn ngữ dạng script chạy chậm hơn so với các ngôn ngữ bậc thấp; nhưng " "để tạo nguyên mẫu (prototype), phát triển các :abbr:`MVP (Minimum Viable " "Product - Sản phẩm khả thi ở mức tối thiểu)` và tập trung vào :abbr:`TTM " "(Time-To-Market - Thời gian tung ra thị trường)` thì GDScript cung cấp cho " "bạn một cách vừa nhanh, vừa thân thiện, vừa đầy đủ để phát triển game." #: ../../docs/about/faq.rst:93 msgid "" "Note that C# support is still relatively new, and as such, you may encounter " "some issues along the way. C# support is also currently missing on the web " "platform. Our friendly and hard-working development community is always " "ready to tackle new problems as they arise, but since this is an open source " "project, we recommend that you first do some due diligence yourself. " "Searching through discussions on `open issues `__ " "is a great way to start your troubleshooting." msgstr "" "Lưu ý rằng hỗ trợ cho C# vẫn còn khá mới, và do đó, bạn có thể sẽ còn gặp " "một vài vấn đề. Hỗ trợ cho C# hiện cũng đang bị thiếu cho nền web. Cộng đồng " "nhà phát triển thân thiện và chăm chỉ của chúng tôi luôn sẵn sàng giải quyết " "các vấn đề mới một khi chúng phát sinh. Tuy nhiên, vì đây là một dự án mã " "nguồn mở nên chúng tôi khuyên bạn nên tự mình thực hiện một số nghiên cứu " "trước. Xem qua các cuộc thảo luận về `báo cáo sự cố (open issues) `__ là một cách hay để bắt đầu " "khắc phục sự cố của bạn." #: ../../docs/about/faq.rst:102 msgid "" "As for new languages, support is possible via third parties with " "GDExtensions. (See the question about plugins below). Work is currently " "underway, for example, on unofficial bindings for Godot to `Python `_ and `Nim `_." msgstr "" "Đối với các ngôn ngữ mới, hỗ trợ là khả thi thông qua các GDExtension của " "bên thứ ba. (Xem câu hỏi về các plugin ở phía bên dưới). Ví dụ, binding " "không chính thức giữa Godot với `Python `_ và `Nim `_ vẫn đang được " "tiến hành." #: ../../docs/about/faq.rst:109 msgid "What is GDScript and why should I use it?" msgstr "GDScript là gì và tại sao tôi nên sử dụng nó?" #: ../../docs/about/faq.rst:111 msgid "" "GDScript is Godot's integrated scripting language. It was built from the " "ground up to maximize Godot's potential in the least amount of code, " "affording both novice and expert developers alike to capitalize on Godot's " "strengths as fast as possible. If you've ever written anything in a language " "like Python before, then you'll feel right at home. For examples and a " "complete overview of the power GDScript offers you, check out " "the :ref:`GDScript scripting guide `." msgstr "" "GDScript là ngôn ngữ dạng script được tích hợp sẵn vào Godot. Nó được xây " "dựng từ con số 0 để tối đa hóa tiềm năng của Godot với càng ít code càng " "tốt, giúp cả người mới lẫn người có kinh nghiệm tận dụng điểm mạnh của Godot " "nhanh nhất có thể. Nếu bạn từng lập trình Python trước đây, bạn sẽ thấy vô " "cùng quen thuộc. Để xem các ví dụ và thông tin tổng quan mà GDScript mang " "lại cho bạn, xem :ref:`hướng dẫn lập trình GDScript `." #: ../../docs/about/faq.rst:118 #, fuzzy msgid "" "There are several reasons to use GDScript, but the most salient reason is " "the overall **reduction of complexity**." msgstr "" "Có vài lý do để sử dụng GDScript, đặc biệt khi bạn đang prototype, trong " "giai đoạn alpha/beta của dự án, hoặc không có ý định tạo ra một tựa game " "AAA. Nhưng lý do nổi bật nhất đó là **giảm độ phức tạp** tổng thể." #: ../../docs/about/faq.rst:121 msgid "" "The original intent of creating a tightly integrated, custom scripting " "language for Godot was two-fold: first, it reduces the amount of time " "necessary to get up and running with Godot, giving developers a rapid way of " "exposing themselves to the engine with a focus on productivity; second, it " "reduces the overall burden of maintenance, attenuates the dimensionality of " "issues, and allows the developers of the engine to focus on squashing bugs " "and improving features related to the engine core, rather than spending a " "lot of time trying to get a small set of incremental features working across " "a large set of languages." msgstr "" "Ban đầu có hai lý do để phát triển ngôn ngữ dạng script dành riêng, tích hợp " "chặt chẽ với Godot: thứ nhất, nó giảm lượng thời gian cần thiết để bắt đầu " "với Godot, mang lại cho các nhà phát triển cơ hội làm việc hiệu quả một cách " "nhanh chóng; thứ hai, nó giảm gánh nặng bảo trì tổng thể, giảm tính phức tạp " "của các vấn đề và cho phép nhà phát triển engine tập trung vào việc khắc " "phục lỗi và cải thiện các tính năng của nó thay vì mất nhiều thời gian để " "thêm thắt các tính năng vụn vặt trên một tập nhiều ngôn ngữ khác nhau." #: ../../docs/about/faq.rst:129 #, fuzzy msgid "" "Since Godot is an open source project, it was imperative from the start to " "prioritize a more integrated and seamless experience over attracting " "additional users by supporting more familiar programming languages, " "especially when supporting those more familiar languages would result in a " "worse experience. We understand if you would rather use another language in " "Godot (see the list of supported options above). That being said, if you " "haven't given GDScript a try, try it for **three days**. Just like Godot, " "once you see how powerful it is and how rapid your development becomes, we " "think GDScript will grow on you." msgstr "" "Vì Godot là một dự án mã nguồn mở, nên ngay từ đầu, nhiệm vụ bắt buộc là " "phải ưu tiên trải nghiệm tích hợp và liền mạch hơn là thu hút thêm người " "dùng bằng cách hỗ trợ các ngôn ngữ lập trình quen thuộc, nhất là khi việc hỗ " "trợ những ngôn ngữ quen thuộc đó sẽ dẫn đến trải nghiệm tồi tệ hơn. Chúng " "tôi hiểu rằng bạn muốn sử dụng ngôn ngữ khác trong Godot (xem danh sách " "những ngôn ngữ được hỗ trợ bên trên). Tuy nhiên, nếu bạn chưa thử GDScript, " "hãy thử nó trong **ba ngày**. Khi bạn thấy nó mạnh mẽ và giúp tăng tốc độ " "phát triển của bạn tới cỡ nào, chúng tôi nghĩ GDScript sẽ đồng hành phát " "triển cùng bạn." #: ../../docs/about/faq.rst:138 msgid "" "More information about getting comfortable with GDScript or dynamically " "typed languages can be found in the :ref:`doc_gdscript_more_efficiently` " "tutorial." msgstr "" "Để biết thêm thông tin về GDScript hoặc các ngôn ngữ kiểu động, bạn có thể " "xem hướng dẫn :ref:`doc_gdscript_more_efficiently`." #: ../../docs/about/faq.rst:142 msgid "What were the motivations behind creating GDScript?" msgstr "Động lực nào thúc đẩy việc tạo ra GDScript?" #: ../../docs/about/faq.rst:144 msgid "" "In the early days, the engine used the `Lua `__ " "scripting language. Lua can be fast thanks to LuaJIT, 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 " "`__, that also proved difficult to embed." msgstr "" "Hồi xưa engine sử dụng `Lua `__ làm ngôn ngữ lập trình. " "Nhờ có LuaJIT nên Lua nhanh, tuy nhiên việc tạo các binding cho hệ thống " "hướng đối tượng (sử dụng fallback) khá phức tạp, chậm và tốn một lượng lớn " "code. Sau một hồi thử với `Python `__, thấy cũng " "không ổn để nhúng cho lắm." #: ../../docs/about/faq.rst:150 msgid "" "The main reasons for creating a custom scripting language for Godot were:" msgstr "" "Những lý do chính cho việc tạo ra ngôn ngữ lập trình riêng cho Godot là:" #: ../../docs/about/faq.rst:152 msgid "" "Poor threading support in most script VMs, and Godot uses threads (Lua, " "Python, Squirrel, JavaScript, ActionScript, etc.)." msgstr "" "Các ngôn ngữ xài :abbr:`VM (Virtual Machine)` hỗ trợ thread kém, mà Godot " "thì sử dụng thread (Lua, Python, Squirrel, JavaScript, ActionScript, v.v.)." #: ../../docs/about/faq.rst:154 msgid "" "Poor class-extending support in most script VMs, and adapting to the way " "Godot works is highly inefficient (Lua, Python, JavaScript)." msgstr "" "Các ngôn ngữ xài VM hỗ trợ kế thừa Class kém, và đáp ứng không hiệu quả cách " "mà Godot muốn (Lua, Python, JavaScript)." #: ../../docs/about/faq.rst:156 msgid "" "Many existing languages have horrible interfaces for binding to C++, " "resulting in a large amount of code, bugs, bottlenecks, and general " "inefficiency (Lua, Python, Squirrel, JavaScript, etc.). We wanted to focus " "on a great engine, not a great number of integrations." msgstr "" "Nhiều ngôn ngữ lập trình có cơ chế gọi code C++ rất tệ, dẫn tới dung lượng " "code lớn, lỗi, nghẽn cổ chai, và nhìn chung không hiệu quả (Lua, Python, " "Squirrel, JavaScript, v.v.). Chúng ta muốn một engine tốt chứ không phải một " "engine tích hợp lỉnh kỉnh." #: ../../docs/about/faq.rst:160 msgid "" "No native vector types (Vector3, Transform3D, etc.), resulting in highly " "reduced performance when using custom types (Lua, Python, Squirrel, " "JavaScript, ActionScript, etc.)." msgstr "" "Không hỗ trợ native các kiểu dữ liệu Vector (Vector3, Transform3D, v.v.), " "nếu tạo kiểu custom thì hiệu suất thực thi giảm đáng kể (Lua, Python, " "Squirrel, JavaScript, ActionScript, v.v.)." #: ../../docs/about/faq.rst:163 msgid "" "Garbage collector results in stalls or unnecessarily large memory usage " "(Lua, Python, JavaScript, ActionScript, etc.)." msgstr "" "Garbage collector làm đứng máy hoặc sử dụng nhiều bộ nhớ hơn mức cần thiết " "(Lua, Python, JavaScript, ActionScript, v.v.)." #: ../../docs/about/faq.rst:165 msgid "" "Difficulty integrating with the code editor for providing code completion, " "live editing, etc. (all of them)." msgstr "" "Khó mà tích hợp code completion, live editing, v.v. vào trình gõ code (tất " "cả các ngôn ngữ nói trên)." #: ../../docs/about/faq.rst:168 msgid "GDScript was designed to curtail the issues above, and more." msgstr "" "GDScript được thiết kế để giải quyết những vấn đề trên cùng nhiều vấn đề " "khác." #: ../../docs/about/faq.rst:173 msgid "Which programming language is fastest?" msgstr "Ngôn ngữ lập trình nào là nhanh nhất?" #: ../../docs/about/faq.rst:175 msgid "" "In most games, the *scripting language* itself is not the cause of " "performance problems. Instead, performance is slowed by inefficient " "algorithms (which are slow in all languages), by GPU performance, or by the " "common C++ engine code like physics or navigation. All languages supported " "by Godot are fast enough for general-purpose scripting. You should choose a " "language based on other factors, like ease-of-use, familiarity, platform " "support, or language features." msgstr "" #: ../../docs/about/faq.rst:182 msgid "" "In general, the performance of C# and GDScript is within the same order of " "magnitude, and C++ is faster than both." msgstr "" #: ../../docs/about/faq.rst:185 msgid "" "Comparing GDScript performance to C# is tricky, since C# can be faster in " "some specific cases. The C# *language* itself tends to be faster than " "GDScript, which means that C# can be faster in situations with few calls to " "Godot engine code. However, C# can be slower than GDScript when making many " "Godot API calls, due to the cost of *marshalling*. C#'s performance can also " "be brought down by garbage collection which occurs at random and " "unpredictable moments. This can result in stuttering issues in complex " "projects, and is not exclusive to Godot." msgstr "" #: ../../docs/about/faq.rst:193 msgid "" "C++, using :ref:`GDExtension `, will almost always " "be faster than either C# or GDScript. However, C++ is less easy to use than " "C# or GDScript, and is slower to develop with." msgstr "" #: ../../docs/about/faq.rst:197 msgid "" "You can also use multiple languages within a single project, " "with :ref:`cross-language scripting `, or by " "using GDExtension and scripting languages together. Be aware that doing so " "comes with its own complications." msgstr "" #: ../../docs/about/faq.rst:203 msgid "What 3D model formats does Godot support?" msgstr "Godot hỗ trợ những định dạng mô hình 3D nào?" #: ../../docs/about/faq.rst:205 msgid "" "You can find detailed information on supported formats, how to export them " "from your 3D modeling software, and how to import them for Godot in " "the :ref:`doc_importing_3d_scenes` documentation." msgstr "" "Bạn có thể tìm thông tin chi tiết về những định dạng được hỗ trợ, cách " "export chúng từ phần mềm 3D, và cách import chúng vào Godot " "trong :ref:`doc_importing_3d_scenes`." #: ../../docs/about/faq.rst:210 msgid "" "Will [insert closed SDK such as FMOD, GameWorks, etc.] be supported in Godot?" msgstr "" "Việc [thêm các SDK độc quyền như FMOD, GameWorks, v.v.] có được hỗ trợ trong " "Godot?" #: ../../docs/about/faq.rst:212 msgid "" "The aim of Godot is to create a free and open source MIT-licensed engine " "that is modular and extendable. There are no plans for the core engine " "development community to support any third-party, closed-source/proprietary " "SDKs, as integrating with these would go against Godot's ethos." msgstr "" "Mục tiêu của Godot là tạo ra một engine dạng module, có khả năng mở rộng, tự " "do và mã nguồn mở theo giấy phép MIT. Cộng đồng phát triển phần core của " "engine không có kế hoạch đưa vào bất kỳ SDK độc quyền nào vì điều này sẽ mâu " "thuẫn với triết lý của Godot." #: ../../docs/about/faq.rst:217 msgid "" "That said, because Godot is open source and modular, nothing prevents you or " "anyone else interested in adding those libraries as a module and shipping " "your game with them, as either open- or closed-source." msgstr "" "Như đã nói, bởi vì Godot có dạng module và mã nguồn mở, không gì có thể ngăn " "cản bạn hoặc bất kỳ ai có hứng với việc thêm các thư viện đó dưới dạng " "module và xuất bản game của bạn dưới dạng nguồn mở hoặc nguồn đóng." #: ../../docs/about/faq.rst:221 msgid "" "To see how support for your SDK of choice could still be provided, look at " "the Plugins question below." msgstr "" "Để xem SDK bạn muốn xài có được cung cấp không, xem mục Plugins bên dưới nhé." #: ../../docs/about/faq.rst:224 msgid "" "If you know of a third-party SDK that is not supported by Godot but that " "offers free and open source integration, consider starting the integration " "work yourself. Godot is not owned by one person; it belongs to the " "community, and it grows along with ambitious community contributors like you." msgstr "" "Nếu bạn biết một SDK bên thứ ba nào tự do và mã nguồn mở nhưng lại không " "được hỗ trợ bởi Godot, hãy xem xét tự mình tích hợp nó. Godot không của " "riêng ai mà thuộc về cộng đồng, và sẽ phát triển đồng hành cùng những người " "đóng góp đầy tham vọng như bạn." #: ../../docs/about/faq.rst:230 msgid "How can I extend Godot?" msgstr "Làm sao để mở rộng Godot?" #: ../../docs/about/faq.rst:232 msgid "" "For extending Godot, like creating Godot Editor plugins or adding support " "for additional languages, take a look at :ref:`EditorPlugins " "` and tool scripts." msgstr "" "Để mở rộng khả năng của Godot, như tạo plugin cho Editor hoặc hỗ trợ thêm " "ngôn ngữ khác, xem :ref:`EditorPlugins ` và tool scripts." #: ../../docs/about/faq.rst:236 msgid "" "Also, see the official blog post on GDExtension, a way to develop native " "extensions for Godot:" msgstr "" "Xem thêm các bài đăng trên blog chính thức về GDExtension, một cách để phát " "triển các native extension cho Godot:" #: ../../docs/about/faq.rst:238 msgid "" "`Introducing GDNative's successor, GDExtension `_" msgstr "" "`Giới thiệu GDExtension, phiên bản kế tiếp của GDNative `_" #: ../../docs/about/faq.rst:240 msgid "" "You can also take a look at the GDScript implementation, the Godot modules, " "as well as the `Jolt physics engine integration `__ for Godot. This would be a good starting point to see " "how another third-party library integrates with Godot." msgstr "" "Bạn cũng có thể xem cách triển khai GDScript, module Godot và `Tích hợp " "engine vật lý Jolt `__ cho Godot. " "Đây là khởi điểm tốt để xem cách một thư viện bên thứ ba được tích hợp vào " "Godot như nào." #: ../../docs/about/faq.rst:246 msgid "" "How do I install the Godot editor on my system (for desktop integration)?" msgstr "Tôi cài Godot Editor lên máy mình như thế nào (tích hợp desktop)?" #: ../../docs/about/faq.rst:248 msgid "" "Since you don't need to actually install Godot on your system to run it, " "this means desktop integration is not performed automatically. There are two " "ways to overcome this. You can install Godot from `Steam `__ (all platforms), `Scoop " "`__ (Windows), `Homebrew `__ (macOS) or " "`Flathub `__ " "(Linux). This will automatically perform the required steps for desktop " "integration." msgstr "" "Godot có thể chạy ngay mà không cần phải cài đặt, điều đó có nghĩa là tích " "hợp desktop không được thực hiện tự động. Có hai cách để khắc phục chuyện " "này. Bạn có thể cài Godot qua `Steam `__ (tất cả các nền tảng), `Scoop `__ (Windows), `Homebrew `__ (macOS) hoặc `Flathub " "`__ (Linux). Điều " "này sẽ tự động hoàn thành các bước cần thiết để tích hợp desktop." #: ../../docs/about/faq.rst:256 msgid "" "Alternatively, you can manually perform the steps that an installer would do " "for you:" msgstr "" "Ngoài ra, bạn có thể tự thực hiện các bước mà không cần trình cài đặt làm " "cho bạn:" #: ../../docs/about/faq.rst:261 msgid "" "Move the Godot executable to a stable location (i.e. outside of your " "Downloads folder), so you don't accidentally move it and break the shortcut " "in the future." msgstr "" "Di chuyển các file Godot tới một chỗ ổn định hơn (ví dụ ra khỏi thư mục " "Downloads), để trong tương lai mình không vô tình di chuyển làm hỏng " "shortcut." #: ../../docs/about/faq.rst:263 msgid "Right-click the Godot executable and choose **Create Shortcut**." msgstr "Click phải vào file thực thi của Godot rồi chọn **Create Shortcut**." #: ../../docs/about/faq.rst:264 msgid "" "Move the created shortcut to ``%APPDATA%\\Microsoft\\Windows\\Start " "Menu\\Programs``. This is the user-wide location for shortcuts that will " "appear in the Start menu. You can also pin Godot in the task bar by right-" "clicking the executable and choosing **Pin to Task Bar**." msgstr "" "Di chuyển shortcut vừa tạo tới ``%APPDATA%\\Microsoft\\Windows\\Start " "Menu\\Programs``. Chỗ này chứa các shortcut cho toàn bộ hệ thống và được " "hiển thị trong Start menu. Bạn có thể pin Godot vào task bar bằng cách click " "phải vào file thực thi của Godot rồi chọn **Pin to Task Bar**." #: ../../docs/about/faq.rst:272 msgid "" "Drag the extracted Godot application to ``/Applications/Godot.app``, then " "drag it to the Dock if desired. Spotlight will be able to find Godot as long " "as it's in ``/Applications`` or ``~/Applications``." msgstr "" "Kéo thả ứng dụng Godot đã giải nén vào ``/Applications/Godot.app``, rồi nắm " "đầu nó lôi xuống Dock nếu bạn muốn. Spotlight sẽ tìm thấy Godot miễn là nó " "còn nằm trong ``/Applications`` hoặc ``~/Applications``." #: ../../docs/about/faq.rst:277 #: ../../docs/tutorials/inputs/controllers_gamepads_joysticks.rst:354 #: ../../docs/tutorials/rendering/jitter_stutter.rst:151 #: ../../docs/tutorials/ui/gui_using_fonts.rst:813 msgid "Linux" msgstr "Linux" #: ../../docs/about/faq.rst:279 msgid "" "Move the Godot binary to a stable location (i.e. outside of your Downloads " "folder), so you don't accidentally move it and break the shortcut in the " "future." msgstr "" "Di chuyển các file Godot tới một chỗ ổn định hơn (ví dụ ra khỏi thư mục " "Downloads), để trong tương lai mình không vô tình di chuyển làm hỏng " "shortcut." #: ../../docs/about/faq.rst:281 msgid "" "Rename and move the Godot binary to a location present in your ``PATH`` " "environment variable. This is typically ``/usr/local/bin/godot`` or ``/usr/" "bin/godot``. Doing this requires administrator privileges, but this also " "allows you to :ref:`run the Godot editor from a terminal " "` by entering ``godot``." msgstr "" "Đổi tên rồi di chuyển binary của Godot vào thư mục ứng dụng (xem biến " "``PATH`` trên máy của bạn), Godot sẽ nên nằm ở ``/usr/local/bin/godot`` hoặc " "``/usr/bin/godot``). Bạn sẽ cần quyền sudo để chép, sau này ta có " "thể :ref:`chạy Godot từ Terminal `bằng lệnh " "``godot``." #: ../../docs/about/faq.rst:287 msgid "" "If you cannot move the Godot editor binary to a protected location, you can " "keep the binary somewhere in your home directory, and modify the ``Path=`` " "line in the ``.desktop`` file linked below to contain the full *absolute* " "path to the Godot binary." msgstr "" "Nếu bạn không có quyền admin để chép Godot vào thư mục hệ thống, bạn để nó " "đâu đó trong thư mục home cũng được, và sửa dòng ``Path=`` trong file " "``.desktop`` bên dưới để trỏ tới vị trí *tuyệt đối* của Godot." #: ../../docs/about/faq.rst:292 msgid "" "Save `this .desktop file `__ to " "``$HOME/.local/share/applications/``. If you have administrator privileges, " "you can also save the ``.desktop`` file to ``/usr/local/share/applications`` " "to make the shortcut available for all users." msgstr "" "Lưu `file .desktop này `__ về ``$HOME/.local/" "share/applications/``. Nếu bạn có quyền admin, bạn cũng có thể lưu file " "``.desktop`` về ``/usr/local/share/applications`` để khiến shortcut khả dụng " "với tất cả user." #: ../../docs/about/faq.rst:298 msgid "Is the Godot editor a portable application?" msgstr "Godot Editor có phải là ứng dụng Portable không?" #: ../../docs/about/faq.rst:300 msgid "" "In its default configuration, Godot is *semi-portable*. Its executable can " "run from any location (including non-writable locations) and never requires " "administrator privileges." msgstr "" "Theo cấu hình mặc định thì Godot là *semi-portable*. Nó có thể chạy từ bất " "kỳ thư mục nào (kể cả những thư mục chỉ đọc) và không bao giờ đòi quyền " "admin." #: ../../docs/about/faq.rst:304 msgid "" "However, configuration files will be written to the user-wide configuration " "or data directory. This is usually a good approach, but this means " "configuration files will not carry across machines if you copy the folder " "containing the Godot executable. See :ref:`doc_data_paths` for more " "information." msgstr "" "Tuy nhiên những file config lại được lưu trong những thư mục cấu hình nằm " "chỗ khác. Nếu bạn chép Godot đi máy khác mà vẫn muốn giữ lại cấu hình hiện " "tại thì bạn cũng phải chép luôn cả những file config này. " "Xem :ref:`doc_data_paths` để biết thêm thông tin." #: ../../docs/about/faq.rst:309 msgid "" "If *true* portable operation is desired (e.g. for use on a USB stick), " "follow the steps in :ref:`doc_data_paths_self_contained_mode`." msgstr "" "Nếu bạn muốn Portable *thực thụ* (ví dụ chạy trực tiếp trên USB chẳng hạn), " "hãy theo các bước trong :ref:`doc_data_paths_self_contained_mode`." #: ../../docs/about/faq.rst:313 msgid "Why does Godot aim to keep its core feature set small?" msgstr "Tại sao Godot đặt mục tiêu giữ bộ tính năng cốt lỗi càng nhỏ càng tốt?" #: ../../docs/about/faq.rst:315 msgid "" "Godot intentionally does not include features that can be implemented by add-" "ons unless they are used very often. One example of something not used often " "is advanced artificial intelligence functionality." msgstr "" "Những tính năng nào mà có thể được thêm bằng add-on thì Godot sẽ không thêm " "nó vào bộ tính năng cốt lỗi, trừ phi là nó được dùng quá nhiều. Ví dụ như " "các tính năng AI nâng cao thì không được sử dụng thường xuyên cho mấy." #: ../../docs/about/faq.rst:319 msgid "There are several reasons for this:" msgstr "Có một vài lý do cho điều này:" #: ../../docs/about/faq.rst:321 msgid "" "**Code maintenance and surface for bugs.** Every time we accept new code in " "the Godot repository, existing contributors often take the responsibility of " "maintaining it. Some contributors don't always stick around after getting " "their code merged, which can make it difficult for us to maintain the code " "in question. This can lead to poorly maintained features with bugs that are " "never fixed. On top of that, the \"API surface\" that needs to be tested and " "checked for regressions keeps increasing over time." msgstr "" "**Bảo trì code và debug.** Mỗi lần chúng tôi chấp nhận code mới lên Godot " "repository, ông nào đóng góp code lên thì ông đó cũng chịu trách nhiệm bảo " "trì code đó luôn. Mà ngặt cái là không phải ông nào cũng gắn bó lâu dài, " "nhiều khi đóng góp code lên được thời gian cái rồi biệt chim tăm cá thì " "những người ở lại không biết đường đâu mà bảo trì với lại debug, trong khi " "những API đó còn phải được test, được kiểm tra tới lui liên tục." #: ../../docs/about/faq.rst:329 msgid "" "**Ease of contribution.** By keeping the codebase small and tidy, it can " "remain fast and easy to compile from source. This makes it easier for new " "contributors to get started with Godot, without requiring them to purchase " "high-end hardware." msgstr "" "**Dễ đóng góp.** Để compile từ source sao cho vừa nhanh vừa dễ thì phải giữ " "code sao cho nhỏ, cho sạch. Làm vậy là tạo điều kiện cho ai cũng đóng góp " "được cho Godot, chứ không cần phải có máy tính cấu hình khủng mới đóng góp " "được." #: ../../docs/about/faq.rst:334 msgid "" "**Keeping the binary size small for the editor.** Not everyone has a fast " "Internet connection. Ensuring that everyone can download the Godot editor, " "extract it and run it in less than 5 minutes makes Godot more accessible to " "developers in all countries." msgstr "" "**Giữ cho kích thước Editor nhỏ.** Không phải ai cũng có mạng Internet " "nhanh. Từ lúc tải về, giải nén cho đến khi chạy Godot lên không tốn quá 5 " "phút, nên bất cứ ai ở bất cứ đâu cũng dùng được Godot." #: ../../docs/about/faq.rst:339 msgid "" "**Keeping the binary size small for export templates.** This directly " "impacts the size of projects exported with Godot. On mobile and web " "platforms, keeping file sizes low is important to ensure fast installation " "and loading on underpowered devices. Again, there are many countries where " "high-speed Internet is not readily available. To add to this, strict data " "usage caps are often in effect in those countries." msgstr "" "**Giữ cho kích thước Export Template nhỏ.** Điều này ảnh hưởng trực tiếp đến " "kích cỡ project được export bởi Godot. Trên nền web và di động, giữ cho kích " "thước file nhỏ là nguyên tắc cơ bản để những máy yếu có thể cài nhanh, load " "nhanh. Xin bạn nhớ rằng, nhiều vùng miền trên thế giới có tốc độ mạng chậm " "trong khi cước phí lại đắt đỏ." #: ../../docs/about/faq.rst:346 msgid "" "For all the reasons above, we have to be selective of what we can accept as " "core functionality in Godot. This is why we are aiming to move some core " "functionality to officially supported add-ons in future versions of Godot. " "In terms of binary size, this also has the advantage of making you pay only " "for what you actually use in your project. (In the meantime, you " "can :ref:`compile custom export templates with unused features disabled " "` to optimize the distribution size of your " "project.)" msgstr "" "Vì tất cả những lý do trên mà chúng tôi rất cân đo đong đếm những tính năng " "nào sẽ là tính năng cốt lõi của Godot. Trong những phiên bản tương lai của " "Godot, chúng tôi sẽ chuyển một số tính năng cốt lõi ngược trở lại thành các " "add-on. Cho nên là, bạn cần tính năng gì, thì bạn tự load thêm tính năng đó. " "(Nhưng mà thời điểm đó chưa tới, trong lúc này bạn có thể :ref:`biên dịch " "Export Template tuỳ chỉnh để tắt những tính năng không dùng tới " "` nhằm tối ưu dung lượng file.)" #: ../../docs/about/faq.rst:355 msgid "" "How should assets be created to handle multiple resolutions and aspect " "ratios?" msgstr "" "Làm sao để tạo các asset tương thích đa độ phân giải và đa tỷ lệ màn hình?" #: ../../docs/about/faq.rst:357 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 "" "Ngày xửa ngày xưa, khi Apple lần đầu tăng gấp đôi độ phân giải màn hình trên " "các thiết bị của họ, thì đó là lúc câu hỏi này nổi lên. Nó làm người ta " "tưởng rằng, có cùng một asset với nhiều độ phân giải khác nhau là tốt (và " "nhiều người vẫn đang làm như vậy). Tuy nhiên, điều này chỉ đúng với các " "thiết bị Apple hồi xưa, chứ thời nay các thiết bị di động đều bị phân mảnh " "với cả đống kích thước, tỷ lệ màn hình, độ phân giải, v.v." #: ../../docs/about/faq.rst:365 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 aspect ratios. " "This is mostly needed for 2D, as in 3D, it's just a matter of camera " "vertical or horizontal FOV." msgstr "" "Cách chuẩn nên làm là dùng một độ phân giải gốc cho game và chỉ quan tâm đến " "tỷ lệ màn hình. Đó là trong 2D nha, còn trong 3D thì chỉ cần chỉnh Camera " "XFov hoặc YFov là xong." #: ../../docs/about/faq.rst:370 msgid "" "Choose a single base resolution for your game. Even if there are devices " "that go up to 1440p and devices that go down to 400p, regular hardware " "scaling in your device will take care of this at little or no performance " "cost. The 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 "" "Chọn một độ phân giải gốc cho game của bạn. Bất kể thiết bị có màn hình lên " "đến 2K hoặc chỉ 400p, phần cứng sẽ scale giúp bạn mà không ảnh hưởng mấy đến " "hiệu suất. Thường người ta hay chọn 1080p (1920x1080) hay 720p (1280x720). " "Xin nhớ cho rằng, độ phân giải asset càng cao thì dung lượng càng nặng, dẫn " "tới thời gian load càng lâu." #: ../../docs/about/faq.rst:378 msgid "" "Use the stretch options in Godot; canvas items stretching while keeping " "aspect ratios works best. Check the :ref:`doc_multiple_resolutions` tutorial " "on how to achieve this." msgstr "" "Sử dụng các tùy chọn stretch trong Godot; tốt nhất nên stretch các canvas " "item trong khi vẫn giữ tỷ lệ. Xem hướng dẫn :ref:`doc_multiple_resolutions` " "để biết cách làm." #: ../../docs/about/faq.rst:382 msgid "" "Determine a minimum resolution and then decide if you want your game to " "stretch vertically or horizontally for different aspect ratios, or if there " "is one aspect ratio and you want black bars to appear instead. This is also " "explained in :ref:`doc_multiple_resolutions`." msgstr "" "Xác định một độ phân giải tối thiểu và quyết định xem bạn muốn game của mình " "stretch theo chiều dọc hay chiều ngang cho những tỷ lệ màn hình khác nhau, " "hoặc là bạn chấp nhận những khoảng đen để giữ tỷ lệ gốc. Cái này được giải " "thích trong :ref:`doc_multiple_resolutions`." #: ../../docs/about/faq.rst:387 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 "" "Đối với giao diện người dùng, sử dụng :ref:`anchoring " "` để xác định vị trí của các control. Nếu mà giao diện " "quá đỗi phức tạp, hãy nghiên cứu về các Container." #: ../../docs/about/faq.rst:391 msgid "And that's it! Your game should work in multiple resolutions." msgstr "Thế đấy! Trò chơi của bạn sẽ hoạt động trên nhiều độ phân giải." #: ../../docs/about/faq.rst:394 msgid "When is the next release of Godot out?" msgstr "Chừng nào Godot mới ra phiên bản mới?" #: ../../docs/about/faq.rst:396 msgid "" "When it's ready! See :ref:`doc_release_policy_when_is_next_release_out` for " "more information." msgstr "" "Khi nó được làm xong! Xem :ref:`doc_release_policy_when_is_next_release_out` " "để biết thêm." #: ../../docs/about/faq.rst:400 msgid "Which Godot version should I use for a new project?" msgstr "Tôi nên sử dụng phiên bản Godot nào cho project mới của mình?" #: ../../docs/about/faq.rst:402 msgid "" "We recommend using Godot 4.x for new projects, but depending on the feature " "set you need, it may be better to use 3.x instead. " "See :ref:`doc_release_policy_which_version_should_i_use` for more " "information." msgstr "" "Chúng tôi khuyên nên sử dụng Godot 4.x cho các project mới, tuy nhiên tùy " "thuộc vào tập tính năng bạn cần, đôi khi sử dụng 3.x sẽ tốt hơn. " "Xem :ref:`doc_release_policy_which_version_should_i_use` để biết thêm." #: ../../docs/about/faq.rst:407 msgid "Should I upgrade my project to use new Godot versions?" msgstr "" "Tôi có nên nâng cấp project của mình để nó chạy trên phiên bản Godot mới hơn " "không?" #: ../../docs/about/faq.rst:409 msgid "" "Some new versions are safer to upgrade to than others. In general, whether " "you should upgrade depends on your project's circumstances. " "See :ref:`doc_release_policy_should_i_upgrade_my_project` for more " "information." msgstr "" "Một vài phiên bản mới thì an toàn hơn để nâng cấp so với những phiên bản " "khác. Nhìn chung, việc bạn có nên nâng cấp hay không còn tùy thuộc vào hoàn " "cảnh dự án của bạn. " "Xem :ref:`doc_release_policy_should_i_upgrade_my_project` để biết thêm thông " "tin." #: ../../docs/about/faq.rst:414 msgid "Should I use the Forward+, Mobile, or Compatibility renderer?" msgstr "" #: ../../docs/about/faq.rst:416 msgid "" "You can find a detailed comparison of the renderers in :ref:`doc_renderers`." msgstr "" #: ../../docs/about/faq.rst:419 msgid "I would like to contribute! How can I get started?" msgstr "Tôi muốn đóng góp! Làm sao để bắt đầu?" #: ../../docs/about/faq.rst:421 msgid "" "Awesome! As an open source project, Godot thrives off of the innovation and " "the ambition of developers like you." msgstr "" "Thật tuyệt! Vì là một dự án mã nguồn mở, Godot phát triển hơn là nhờ sự " "nhiệt huyết và sáng kiến của những nhà phát triển như bạn." #: ../../docs/about/faq.rst:424 msgid "" "The best way to start contributing to Godot is by using it and reporting any " "`issues `_ that you might " "experience. A good bug report with clear reproduction steps helps your " "fellow contributors fix bugs quickly and efficiently. You can also report " "issues you find in the `online documentation `_." msgstr "" "Cách tốt nhất để bắt đầu đóng góp cho Godot là hãy sử dụng nó và báo cáo bất " "kỳ `lỗi `_ nào mà bạn gặp phải. " "Một báo cáo lỗi chất lượng với các bước thực hiện rõ ràng sẽ giúp những cộng " "tác viên khác sửa lỗi nhanh và hiệu quả. Bạn cũng có thể báo cáo lỗi bạn gặp " "trong `tài liệu trực tuyến `_." #: ../../docs/about/faq.rst:430 msgid "" "If you feel ready to submit your first PR, pick any issue that resonates " "with you from one of the links above and try your hand at fixing it. You " "will need to learn how to compile the engine from sources, or how to build " "the documentation. You also need to get familiar with Git, a version control " "system that Godot developers use." msgstr "" "Nếu bạn cảm thấy sẵn sàng gửi PR đầu tiên của mình, hãy chọn một sự cố bạn " "quan tâm từ một trong các đường link ở trên và thử khắc phục nó. Bạn sẽ cần " "học cách biên dịch engine từ source, hay cách build tài liệu. Bạn cũng cần " "phải rành Git, một hệ thống kiểm soát phiên bản mà các nhà phát triển Godot " "sử dụng." #: ../../docs/about/faq.rst:435 #, fuzzy msgid "" "We explain how to work with the engine source, how to edit the " "documentation, and what other ways to contribute are there in our " "`documentation for contributors `__." msgstr "" "Chúng tôi giải thích cách làm việc với mã nguồn của engine, cách soạn tài " "liệu, và nhiều cách khác để đóng góp trong :ref:`tài liệu dành cho cộng tác " "viên `." #: ../../docs/about/faq.rst:439 msgid "I have a great idea for Godot. How can I share it?" msgstr "Tôi có một sáng kiến tuyệt vời cho Godot. Làm sao để chia sẻ nó?" #: ../../docs/about/faq.rst:441 msgid "" "We are always looking for suggestions about how to improve the engine. User " "feedback is the main driving force behind our decision-making process, and " "limitations that you might face while working on your project are a great " "data point for us when considering engine enhancements." msgstr "" "Chúng tôi luôn tìm kiếm những gợi ý về cách cải thiện engine. Phản hồi của " "người dùng là động lực chính đằng sau quá trình ra quyết định của chúng tôi " "và những hạn chế mà bạn gặp phải khi thực hiện project của mình là dữ kiện " "tuyệt vời cho chúng tôi khi cân nhắc cải tiến engine." #: ../../docs/about/faq.rst:446 msgid "" "If you experience a usability problem or are missing a feature in the " "current version of Godot, start by discussing it with our `community " "`_. There may be other, perhaps better, " "ways to achieve the desired result that community members could suggest. And " "you can learn if other users experience the same issue, and figure out a " "good solution together." msgstr "" "Nếu bạn gặp vấn đề về khả năng sử dụng hoặc thiếu một tính năng trong phiên " "bản Godot hiện tại, trước tiên hãy thảo luận nó với `cộng đồng `_ của chúng ta. Có thể các thành viên cộng đồng " "sẽ đề xuất những cách hay hơn để đạt được kết quả mong muốn. Và bạn có thể " "tìm hiểu xem những người dùng khác có gặp vấn đề tương tự hay không để cùng " "nhau tìm ra giải pháp." #: ../../docs/about/faq.rst:452 msgid "" "If you come up with a well-defined idea for the engine, feel free to open a " "`proposal issue `_. " "Try to be specific and concrete while describing your problem and your " "proposed solution — only actionable proposals can be considered. It is not " "required, but if you want to implement it yourself, that's always " "appreciated!" msgstr "" "Nếu bạn nảy ra một ý tưởng hay cho engine, bạn có thể `gửi đề xuất `_. Cố gắng thật rõ ràng, cụ " "thể khi mô tả vấn đề và giải pháp đề xuất của bạn - chỉ những đề xuất khả " "thi mới được xét duyệt. Tuy không bắt buộc, nhưng sẽ vô cùng hoan nghênh nếu " "bạn tự mình cài đặt nó!" #: ../../docs/about/faq.rst:458 msgid "" "If you only have a general idea without specific details, you can open a " "`proposal discussion `_. These can be anything you want, and allow for a free-form " "discussion in search of a solution. Once you find one, a proposal issue can " "be opened." msgstr "" "Nếu bạn chỉ có ý tưởng chung chung mà không có chi tiết cụ thể, bạn có thể " "mở một cuộc `thảo luận đề xuất `_. Những đề xuất này có thể là bất cứ điều gì bạn " "muốn và cho phép thảo luận tự do để tìm kiếm giải pháp. Khi tìm được giải " "pháp, bạn có thể gửi đề xuất đó lên." #: ../../docs/about/faq.rst:463 msgid "" "Please, read the `readme `_ document before creating a proposal to learn more " "about the process." msgstr "" "Vui lòng đọc tài liệu `readme `_ trước khi gửi đề xuất để tìm hiểu thêm về " "quy trình." #: ../../docs/about/faq.rst:469 msgid "Is it possible to use Godot to create non-game applications?" msgstr "Có thể dùng Godot để làm app thay vì làm game không?" #: ../../docs/about/faq.rst:471 msgid "" "Yes! Godot features an extensive built-in UI system, and its small " "distribution size can make it a suitable alternative to frameworks like " "Electron or Qt." msgstr "" "Được chứ! Godot tích hợp sẵn hệ thống UI vô cùng đầy đủ trong khi kích thước " "file lại nhỏ, giúp nó đủ sức thay thế các framework như Electron hay Qt." #: ../../docs/about/faq.rst:474 msgid "" "When creating a non-game application, make sure to enable :ref:`low-" "processor mode ` in the Project Settings to decrease CPU and GPU usage." msgstr "" "Nếu bạn làm app thay vì game, hãy nhớ bật :ref:`low-processor mode " "` trong " "Project Settings để giảm mức tiêu thụ CPU và GPU." #: ../../docs/about/faq.rst:478 msgid "" "Check out `Material Maker `__ " "and `Pixelorama `__ for " "examples of open source applications made with Godot." msgstr "" "Xem qua `Material Maker `__ và " "`Pixelorama `_ để xem ví dụ " "về các app mã nguồn mở tạo bằng Godot." #: ../../docs/about/faq.rst:485 msgid "Is it possible to use Godot as a library?" msgstr "Có thể sử dụng Godot như là một thư viện được không?" #: ../../docs/about/faq.rst:487 msgid "" "If you are looking to make a game with Godot, keep in mind Godot is designed " "to be used with its editor. We recommend you give it a try, as it will most " "likely save you time in the long term." msgstr "" #: ../../docs/about/faq.rst:491 msgid "" "For more specialized applications, it can make sense to look into using " "Godot as a library. Since Godot 4.6, there is **experimental** support for " "using Godot as a static or shared library in the form of LibGodot. This is " "currently supported on Windows, macOS, and Linux. Support for Android and " "iOS is planned for a future release." msgstr "" #: ../../docs/about/faq.rst:497 msgid "" "You can find sample applications that use Godot as a library in the `migeran/" "libgodot_project GitHub repository `__." msgstr "" #: ../../docs/about/faq.rst:501 msgid "What user interface toolkit does Godot use?" msgstr "Bộ UI toolkit mà Godot sử dụng là gì?" #: ../../docs/about/faq.rst:503 #, fuzzy msgid "" "Godot does not use a standard :abbr:`GUI (Graphical User Interface)` toolkit " "like GTK, Qt or wxWidgets. Instead, Godot uses its own user interface " "toolkit, which is always rendered using hardware acceleration. There is no " "built-in software fallback, although external solutions that emulate " "graphics APIs on the CPU can be used." msgstr "" "Godot không sử dụng bộ :abbr:`GUI (Graphical User Interface)` toolkit như " "GTK, Qt hay wxWidgets mà thay vào đó nó xài bộ giao diện cây nhà lá vườn dựa " "trên OpenGL ES hoặc Vulkan. GUI này kết hợp với C++ đã làm nên Godot Editor " "mà bạn thấy đấy. Bộ giao diện này vẫn dựa trên các Node (cụ thể là các " "Control Node) và có thể được dùng trong bất kỳ ngôn ngữ script nào mà Godot " "hỗ trợ." #: ../../docs/about/faq.rst:508 #, fuzzy msgid "" "This toolkit is exposed in the form of Control nodes, which are used to " "render the editor (which is written in C++). These Control nodes can also be " "used in projects from any scripting language supported by Godot." msgstr "" "Godot không sử dụng bộ :abbr:`GUI (Graphical User Interface)` toolkit như " "GTK, Qt hay wxWidgets mà thay vào đó nó xài bộ giao diện cây nhà lá vườn dựa " "trên OpenGL ES hoặc Vulkan. GUI này kết hợp với C++ đã làm nên Godot Editor " "mà bạn thấy đấy. Bộ giao diện này vẫn dựa trên các Node (cụ thể là các " "Control Node) và có thể được dùng trong bất kỳ ngôn ngữ script nào mà Godot " "hỗ trợ." #: ../../docs/about/faq.rst:512 msgid "" "This custom toolkit makes it possible to benefit from hardware acceleration " "and have a consistent appearance across all platforms. On top of that, it " "doesn't have to deal with the LGPL licensing caveats that come with GTK or " "Qt. Lastly, this means Godot is \"eating its own dog food\" since the editor " "itself is one of the most complex users of Godot's UI system." msgstr "" "Bộ toolkit riêng này giúp bạn hưởng lợi từ khả năng tăng tốc phần cứng và có " "giao diện nhất quán trên tất cả các nền tảng. Trên hết, nó không phải đối " "mặt với các hạn chế trong giấy phép LGPL đi kèm với GTK hoặc Qt. Cuối cùng, " "điều này có nghĩa là Godot \":abbr:`tự cung tự cấp (nguyên văn là *eating " "its own dog food*, đây là một thành ngữ trong ngành công nghệ, ám chỉ việc " "một công ty sử dụng chính sản phẩm hoặc dịch vụ của mình để vận hành nội " "bộ)`\" vì bản thân cái editor đã là một trong những hệ thống UI phức tạp " "nhất tạo bởi Godot rồi." #: ../../docs/about/faq.rst:518 #, fuzzy msgid "" "This custom UI toolkit can be :ref:`embedded into other applications " "` (experimental). However, the preferred way " "to use it is to :ref:`use Godot to create non-game applications with the " "editor `." msgstr "" "Bộ UI toolkit riêng này :ref:`không thể được sử dụng làm thư viện " "`, nhưng bạn vẫn có thể :ref:`sử dụng Godot để " "làm app bằng editor `." #: ../../docs/about/faq.rst:525 msgid "Why does Godot use the SCons build system?" msgstr "Vì sao Godot sử dụng hệ thống build SCons?" #: ../../docs/about/faq.rst:527 msgid "" "Godot uses the `SCons `__ build system. There are no " "plans to switch to a different build system in the near future. There are " "many reasons why we have chosen SCons over other alternatives. For example:" msgstr "" "Godot sử dụng hệ thống build `SCons `__. Chúng tôi " "không có kế hoạch chuyển sang hệ thống build khác trong tương lai gần. Có " "nhiều nguyên nhân tại sao lại chọn SCons thay vì cái khác. Như:" #: ../../docs/about/faq.rst:531 msgid "" "Godot can be compiled for a dozen different platforms: all PC platforms, all " "mobile platforms, many consoles, and WebAssembly." msgstr "" "Godot có thể được biên dịch cho hàng tá nền tảng khác nhau: tất cả nền tảng " "PC, tất cả nền tảng di động, nhiều nền tảng console, và WebAssembly." #: ../../docs/about/faq.rst:533 msgid "" "Developers often need to compile for several of the platforms **at the same " "time**, or even different targets of the same platform. They can't afford " "reconfiguring and rebuilding the project each time. SCons can do this with " "no sweat, without breaking the builds." msgstr "" "Các nhà phát triển thường cần biên dịch cho nhiều nền tảng **cùng một lúc**, " "hoặc thậm chí là cùng một nền tảng nhưng nhiều target khác nhau. Không lẽ " "mỗi lần vậy phải cấu hình rồi build lại. SCons có thể làm điều này một cách " "dễ dàng mà không làm hư các bản build." #: ../../docs/about/faq.rst:537 msgid "" "SCons will *never* break a build no matter how many changes, configurations, " "additions, removals etc." msgstr "" "SCons sẽ *không bao giờ* làm hư một bản build bất kể có bao nhiêu thay đổi, " "cấu hình, bổ sung, loại bỏ, v.v." #: ../../docs/about/faq.rst:539 msgid "" "Godot's build process is not simple. Several files are generated by code " "(binders), others are parsed (shaders), and others need to offer " "customization (:ref:`modules `). This requires " "complex logic which is easier to write in an actual programming language " "(like Python) rather than using a mostly macro-based language only meant for " "building." msgstr "" "Tiến trình build của Godot không hề đơn giản. Một vài file được sinh bằng " "code (các binder), một số thì được parse (các shader), và số khác nữa cần " "cung cấp khả năng tùy chỉnh (:ref:`các module `). " "Điều này đòi hỏi logic phức tạp, dễ viết hơn bằng ngôn ngữ lập trình thực tế " "(như Python) thay vì sử dụng ngôn ngữ dựa trên macro chỉ dành riêng cho " "build." #: ../../docs/about/faq.rst:544 msgid "" "Godot's build process makes heavy use of cross-compiling tools. Each " "platform has a specific detection process, and all these must be handled as " "specific cases with special code written for each." msgstr "" "Tiến trình build của Godot sử dụng nhiều công cụ cross-compiling. Mỗi nền " "tảng có một quy trình phát hiện cụ thể và tất cả những điều này phải được xử " "lý theo từng trường hợp cụ thể với code đặc biệt được viết riêng cho từng " "nền tảng." #: ../../docs/about/faq.rst:548 msgid "" "Please try to keep an open mind and get at least a little familiar with " "SCons if you are planning to build Godot yourself." msgstr "" "Nếu bạn dự định tự build Godot, xin hãy mở lòng và làm quen một chút với " "SCons nhé." #: ../../docs/about/faq.rst:554 msgid "Why does Godot not use STL (Standard Template Library)?" msgstr "Tại sao Godot không sử dụng STL (Standard Template Library)?" #: ../../docs/about/faq.rst:556 msgid "" "Like many other libraries (Qt as an example), Godot does not make use of STL " "(with a few exceptions such as threading primitives). We believe STL is a " "great general-purpose library, but we had special requirements for Godot." msgstr "" "Như nhiều thư viện khác (ví dụ Qt), Godot không sử dụng STL (với một vài " "ngoại lệ như phân luồng các primitive). Chúng tôi tin rằng STL là một thư " "viện đa năng tuyệt vời, tuy nhiên chúng tôi có những yêu cầu đặc biệt đối " "với Godot." #: ../../docs/about/faq.rst:560 msgid "" "STL templates create very large symbols, which results in huge debug " "binaries. We use few templates with very short names instead." msgstr "" "Các template STL tạo ra các symbol rất lớn, dẫn tới các debug binary cũng " "rất lớn. Thay vì vậy, chúng tôi sử dụng một số template rất ngắn gọn." #: ../../docs/about/faq.rst:562 msgid "" "Most of our containers cater to special needs, like Vector, which uses copy " "on write and we use to pass data around, or the RID system, which requires " "O(1) access time for performance. Likewise, our hash map implementations are " "designed to integrate seamlessly with internal engine types." msgstr "" "Hầu hết các container của chúng tôi đều đáp ứng các nhu cầu chuyên biệt, như " "Vector, được copy khi làm tham số truyền đi, hoặc hệ thống RID, yêu cầu thời " "gian truy cập O(1) để có hiệu suất tốt. Tương tự, việc triển khai hash map " "của chúng tôi được thiết kế để tích hợp liền mạch với các kiểu nội bộ của " "engine." #: ../../docs/about/faq.rst:566 msgid "" "Our containers have memory tracking built-in, which helps better track " "memory usage." msgstr "" "Các container của chúng tôi được tích hợp tính năng theo dõi bộ nhớ, giúp " "theo dõi mức sử dụng bộ nhớ tốt hơn." #: ../../docs/about/faq.rst:567 msgid "" "For large arrays, we use pooled memory, which can be mapped to either a " "preallocated buffer or virtual memory." msgstr "" "Chúng tôi dùng pooled memory cho các mảng kích thước lớn, có thể ánh xạ vào " "bộ đệm hoặc bộ nhớ ảo." #: ../../docs/about/faq.rst:569 msgid "" "We use our custom String type, as the one provided by STL is too basic and " "lacks proper internationalization support." msgstr "" "Chúng tôi dùng kiểu String riêng vì String của STL quá cơ bản và không hỗ " "trợ đầy đủ quốc tế hóa." #: ../../docs/about/faq.rst:572 msgid "" "Check out :ref:`Godot's container types ` for alternatives." msgstr "" #: ../../docs/about/faq.rst:575 msgid "Why does Godot not use exceptions?" msgstr "Tại sao Godot không sử dụng ngoại lệ (exception)?" #: ../../docs/about/faq.rst:577 msgid "" "We believe games should not crash, no matter what. If an unexpected " "situation happens, Godot will print an error (which can be traced even to " "script), but then it will try to recover as gracefully as possible and keep " "going." msgstr "" "Chúng tôi cho rằng dù thế nào đi chăng nữa, thì game cũng không nên bị văng. " "Nếu xảy ra tình huống bất ngờ, Godot sẽ hiện thông báo lỗi (thậm chí có thể " "truy ngược về script), tuy nhiên sau đó nó sẽ ráng khôi phục lại một cách " "khéo léo nhất có thể và tiếp tục chạy." #: ../../docs/about/faq.rst:582 msgid "" "Additionally, exceptions significantly increase the binary size for the " "executable and result in increased compile times." msgstr "" "Ngoài ra, các ngoại lệ cũng làm tăng đáng kể kích thước binary, kéo theo " "thời gian biên dịch cũng lâu." #: ../../docs/about/faq.rst:586 msgid "Does Godot use an ECS (Entity Component System)?" msgstr "Godot có sử dụng ECS (Entity Component System) không?" #: ../../docs/about/faq.rst:588 msgid "" "Godot does **not** use an ECS and relies on inheritance instead. While there " "is no universally better approach, we found that using an inheritance-based " "approach resulted in better usability while still being fast enough for most " "use cases." msgstr "" "Godot **không** sử dụng ECS mà thay vào đó dựa trên kế thừa. Ta không thể " "phán cách này hay cách kia hay hơn, tuy nhiên chúng tôi nhận thấy rằng việc " "sử dụng cách tiếp cận dựa trên kế thừa sẽ mang lại khả năng sử dụng tốt hơn " "trong khi vẫn đủ nhanh trong hầu hết các trường hợp sử dụng." #: ../../docs/about/faq.rst:592 #, fuzzy msgid "" "That said, nothing prevents you from making use of composition in your " "project by creating child Nodes with individual scripts. These nodes can " "then be added and removed at runtime to dynamically add and remove behaviors." msgstr "" "Tuy nhiên, bạn vẫn có thể sử dụng composition trong project của mình bằng " "cách tạo các node con với script riêng. Những node này có thể được thêm bớt " "lúc thực thi để thêm bớt các hành vi." #: ../../docs/about/faq.rst:596 msgid "" "More information about Godot's design choices can be found in `this article " "`__." msgstr "" "Bạn có thể tìm thêm thông tin về các lựa chọn thiết kế của Godot trong `bài " "viết này `__." #: ../../docs/about/faq.rst:600 msgid "Why does Godot not force users to implement DOD (Data-Oriented Design)?" msgstr "" "Tại sao Godot không buộc người dùng triển khai DOD (Data-Oriented Design)?" #: ../../docs/about/faq.rst:602 msgid "" "While Godot internally attempts to use cache coherency as much as possible, " "we believe users don't need to be forced to use DOD practices." msgstr "" "Mặc dù Godot cố gắng tận dụng tối đa sự kết hợp bộ đệm nhưng chúng tôi tin " "rằng người dùng không nhất thiết phải bị bó buộc với các phương pháp của DOD." #: ../../docs/about/faq.rst:605 msgid "" "DOD is mostly a cache coherency optimization that can only provide " "significant performance improvements when dealing with dozens of thousands " "of objects which are processed every frame with little modification. That " "is, if you are moving a few hundred sprites or enemies per frame, DOD won't " "result in a meaningful improvement in performance. In such a case, you " "should consider a different approach to optimization." msgstr "" "DOD chủ yếu là tối ưu hóa kết hợp bộ đêm, chỉ tạo ra những cải tiến hiệu " "suất đáng kể khi xử lý hàng chục nghìn đối tượng mỗi khung hình với ít thay " "đổi. Nghĩa là, nếu bạn di chuyển chỉ vài trăm sprite hoặc enemy mỗi khung " "hình thì DOD chẳng giúp gì mấy. Trong trường hợp như vậy, bạn nên xem xét " "một cách tiếp cận tối ưu khác." #: ../../docs/about/faq.rst:612 msgid "" "The vast majority of games do not need this and Godot provides handy helpers " "to do the job for most cases when you do." msgstr "" "Trong phần lớn các game thì điều này là không cần thiết và Godot cung cấp " "những trợ giúp hữu ích để giúp bạn xong việc trong hầu hết các trường hợp." #: ../../docs/about/faq.rst:615 msgid "" "If a game needs to process such a large amount of objects, our " "recommendation is to use C++ and GDExtensions for performance-heavy tasks " "and GDScript (or C#) for the rest of the game." msgstr "" "Nếu game thực sự cần xử lý một lượng cực lớn các đối tượng như vậy, chúng " "tôi khuyến nghị sử dụng C++ và GDExtension cho chỗ nào yêu cầu hiệu suất cao " "và GDScript (hoặc C#) cho những phần còn lại." #: ../../docs/about/faq.rst:620 msgid "How can I support Godot development or contribute?" msgstr "Làm sao để hỗ trợ hoặc góp sức cho sự phát triển Godot?" #: ../../docs/about/faq.rst:622 msgid "" "See `How to contribute `__." msgstr "" #: ../../docs/about/faq.rst:625 msgid "Who is working on Godot? How can I contact you?" msgstr "Ai đang phát triển Godot? Làm thế nào để tôi có thể liên hệ?" #: ../../docs/about/faq.rst:627 msgid "" "See the corresponding page on the `Godot website `_." msgstr "" "Xem trang tương ứng trên `trang web Godot `_." #: ../../docs/about/complying_with_licenses.rst:6 msgid "Complying with licenses" msgstr "Tuân thủ giấy phép" #: ../../docs/about/complying_with_licenses.rst:10 msgid "" "The recommendations in this page **are not legal advice.** They are provided " "in good faith to help users navigate license attribution requirements." msgstr "" "Những khuyến nghị trong trang này **không phải là lời khuyên pháp lý.** " "Chúng để đây chỉ nhằm mục đích hỗ trợ thêm cho người dùng về vấn đề giấy " "phép." #: ../../docs/about/complying_with_licenses.rst:14 msgid "What are licenses?" msgstr "Giấy phép là gì?" #: ../../docs/about/complying_with_licenses.rst:16 msgid "" "Godot is created and distributed under the `MIT License `_. It doesn't have a sole owner, as every " "contributor that submits code to the project does it under this same license " "and keeps ownership of their contribution." msgstr "" "Godot được tạo và phân phối theo `Giấy phép MIT `_. Nó không có một chủ sở hữu duy nhất nào, vì bất kỳ ai đóng " "góp code cho dự án đều tuân thủ theo cùng giấy phép này và giữ quyền sở hữu " "phần đóng góp đó." #: ../../docs/about/complying_with_licenses.rst:21 msgid "" "The license is the legal requirement for you (or your company) to use and " "distribute the software (and derivative projects, including games made with " "it). Your game or project can have a different license, but it still needs " "to comply with the original one." msgstr "" "Giấy phép là yêu cầu pháp lý để bạn (hoặc công ty của bạn) sử dụng và phân " "phối phần mềm (và các project phái sinh, bao gồm cả các game tạo với nó). " "Game hoặc project của bạn có thể có giấy phép khác, tuy nhiên vẫn phải tuân " "thủ giấy phép gốc." #: ../../docs/about/complying_with_licenses.rst:28 #, fuzzy msgid "" "This section covers compliance with licenses from a user perspective. If you " "are interested in licence compliance as a contributor, you can find " "guidelines `here `__." msgstr "" "Phần này bao gồm việc tuân thủ giấy phép từ góc độ người dùng. Nếu bạn quan " "tâm đến việc tuân thủ giấy phép với tư cách là cộng tác viên, bạn có thể tìm " "thấy hướng dẫn :ref:`tại đây " "`." #: ../../docs/about/complying_with_licenses.rst:34 msgid "" "Alongside the Godot license text, remember to also list third-party notices " "for assets you're using, such as textures, models, sounds, music and fonts. " "This includes free assets, which often come with licenses that require " "attribution." msgstr "" "Trong màn hình credit, hãy nhớ ghi công cho bên thứ ba có nội dung mà bạn sử " "dụng của họ, chẳng hạn các texture, model, âm thanh, âm nhạc và font chữ. " "Điều này bao gồm cả các asset miễn phí, chúng thường đi kèm với giấy phép có " "yêu cầu ghi công." #: ../../docs/about/complying_with_licenses.rst:40 #: ../../docs/tutorials/export/exporting_for_macos.rst:27 #: ../../docs/tutorials/export/exporting_for_ios.rst:22 #: ../../docs/engine_details/development/compiling/compiling_for_windows.rst:14 #: ../../docs/engine_details/development/compiling/compiling_for_linuxbsd.rst:14 #: ../../docs/engine_details/development/compiling/compiling_for_macos.rst:14 #: ../../docs/engine_details/development/compiling/compiling_for_android.rst:25 #: ../../docs/engine_details/development/compiling/compiling_for_ios.rst:14 #: ../../docs/engine_details/development/compiling/compiling_for_web.rst:14 #: ../../docs/engine_details/development/compiling/cross-compiling_for_ios_on_linux.rst:25 #: ../../docs/engine_details/development/compiling/compiling_with_dotnet.rst:9 #: ../../docs/community/asset_library/submitting_to_assetlib.rst:24 msgid "Requirements" msgstr "Yêu cầu" #: ../../docs/about/complying_with_licenses.rst:42 msgid "" "In the case of the MIT license, the only requirement is to include the " "license text somewhere in your game or derivative project." msgstr "" "Trong trường hợp giấy phép MIT, yêu cầu duy nhất là đưa văn bản giấy phép " "này vào đâu đó trong game hoặc project phái sinh của bạn." #: ../../docs/about/complying_with_licenses.rst:45 #, fuzzy msgid "This text reads as follows:" msgstr "" "Văn bản này đọc như sau (bạn có thể tìm thấy bản dịch tương ứng `ở đây " "`_):" #: ../../docs/about/complying_with_licenses.rst:72 msgid "" "Beside its own MIT license, Godot includes code from a number of third-party " "libraries. See :ref:`doc_complying_with_licenses_thirdparty` for details." msgstr "" "Ngoài giấy phép MIT, Godot còn bao gồm code của nhiều thư viện bên thứ ba. " "Xem :ref:`doc_complying_with_licenses_thirdparty` để biết thêm chi tiết." #: ../../docs/about/complying_with_licenses.rst:77 msgid "" "Your games do not need to be under the same license. You are free to release " "your Godot projects under any license and to create commercial games with " "the engine." msgstr "" "Game của bạn không nhất thiết phải có cùng giấy phép. Bạn được tự do xuất " "bản các project Godot của mình theo bất kỳ giấy phép nào và phát triển game " "thương mại bằng engine này." #: ../../docs/about/complying_with_licenses.rst:82 msgid "Inclusion" msgstr "Cách tích hợp" #: ../../docs/about/complying_with_licenses.rst:84 msgid "" "The license text must be made available to the user. The license doesn't " "specify how the text has to be included, but here are the most common " "approaches (you only need to implement one of them, not all)." msgstr "" "Giấy phép không nói cách nó nên được đưa vào như thế nào, vì vậy bạn làm sao " "cũng được, miễn là giấy phép có thể được xem theo một cách nào đó. Dưới đây " "là các cách phổ biến nhất (chỉ cần làm một trong số chúng, không cần làm " "hết)." #: ../../docs/about/complying_with_licenses.rst:89 msgid "Credits screen" msgstr "Màn hình credit" #: ../../docs/about/complying_with_licenses.rst:91 msgid "" "Include the above license text somewhere in the credits screen. It can be at " "the bottom after showing the rest of the credits. Most large studios use " "this approach with open source licenses." msgstr "" "Tích hợp văn bản giấy phép ở đâu đó trong màn hình credit. Nó có thể nằm " "dưới cùng, sau khi đã hiển thị hết các credit khác. Hầu hết các studio lớn " "sử dụng cách này với giấy phép nguồn mở." #: ../../docs/about/complying_with_licenses.rst:96 msgid "Licenses screen" msgstr "Màn hình giấy phép" #: ../../docs/about/complying_with_licenses.rst:98 msgid "" "Some games have a special menu (often in the settings) to display licenses. " "This menu is typically accessed with a button called **Third-party " "Licenses** or **Open Source Licenses**." msgstr "" "Vài game thường có một menu đặc biệt (thường là ở trong settings) để xem " "giấy phép. Menu này thường được truy cập thông qua nút có tên **Third-party " "Licenses** hoặc **Open Source Licenses**." #: ../../docs/about/complying_with_licenses.rst:103 msgid "Output log" msgstr "Output log" #: ../../docs/about/complying_with_licenses.rst:105 msgid "" "Printing the license text using the :ref:`print() " "` function may be enough on platforms where " "a global output log is readable. This is the case on desktop platforms, " "Android and HTML5 (but not iOS)." msgstr "" "In văn bản giấy phép sử dụng hàm :ref:`print() " "` là đủ trên những nền tảng nào mà output " "log có thể đọc được. Có thể xài cách này trên các nền tảng desktop, Android " "và HTML5 (trừ iOS)." #: ../../docs/about/complying_with_licenses.rst:110 msgid "Accompanying file" msgstr "File đính kèm" #: ../../docs/about/complying_with_licenses.rst:112 msgid "" "If the game is distributed on desktop platforms, a file containing the " "license text can be added to the software that is installed to the user PC." msgstr "" "Nếu game được phân phối trên nền desktop, một file chứa giấy phép có thể " "được thêm vào phần mềm được cài đặt trên PC của người dùng." #: ../../docs/about/complying_with_licenses.rst:116 msgid "Printed manual" msgstr "Được in trong sách hướng dẫn" #: ../../docs/about/complying_with_licenses.rst:118 msgid "" "If the game includes a printed manual, the license text can be included " "there." msgstr "" "Nếu game có sách hướng dẫn dạng giấy in thì nội dung giấy phép có thể được " "đưa vào đó." #: ../../docs/about/complying_with_licenses.rst:121 msgid "Link to the license" msgstr "Link tới giấy phép" #: ../../docs/about/complying_with_licenses.rst:123 msgid "" "The Godot Engine developers consider that a link to ``godotengine.org/" "license`` in your game documentation or credits would be an acceptable way " "to satisfy the license terms." msgstr "" "Các nhà phát triển Godot Engine xét thấy việc để một đường link trỏ tới " "``godotengine.org/license`` trong tài liệu hoặc màn hình credit trong game " "của bạn là đủ thỏa mãn các điều khoản cấp phép." #: ../../docs/about/complying_with_licenses.rst:129 msgid "" "Godot provides several methods to get license information in " "the :ref:`Engine ` singleton. This allows you to source the " "license information directly from the engine binary, which prevents the " "information from becoming outdated if you update engine versions." msgstr "" "Godot cung cấp nhiều cách để lấy thông tin giấy phép từ ngay " "trong :ref:`Engine `. Điều này cho phép bạn lấy thông tin giấy " "phép trực tiếp từ binary của engine, giúp thông tin không bị lỗi thời nếu " "bạn cập nhật các phiên bản engine mới." #: ../../docs/about/complying_with_licenses.rst:134 msgid "For the engine itself:" msgstr "Cho chính engine:" #: ../../docs/about/complying_with_licenses.rst:136 msgid ":ref:`Engine.get_license_text`" msgstr ":ref:`Engine.get_license_text`" #: ../../docs/about/complying_with_licenses.rst:138 msgid "For third-party components used by the engine:" msgstr "Cho các thành phần của bên thứ ba được engine sử dụng:" #: ../../docs/about/complying_with_licenses.rst:140 msgid ":ref:`Engine.get_license_info`" msgstr ":ref:`Engine.get_license_info`" #: ../../docs/about/complying_with_licenses.rst:141 msgid ":ref:`Engine.get_copyright_info`" msgstr ":ref:`Engine.get_copyright_info`" #: ../../docs/about/complying_with_licenses.rst:146 msgid "Third-party licenses" msgstr "Các giấy phép của bên thứ ba" #: ../../docs/about/complying_with_licenses.rst:148 msgid "" "Godot itself contains software written by `third parties `_, which is compatible " "with, but not covered by Godot's MIT license." msgstr "" "Godot chứa các phần mềm được viết bởi `các bên thứ ba `_, có giấy phép tương " "thích, nhưng không thay thế giấy phép MIT của Godot." #: ../../docs/about/complying_with_licenses.rst:152 msgid "" "Many of these dependencies are distributed under permissive open source " "licenses which require attribution by explicitly citing their copyright " "statement and license text in the final product's documentation." msgstr "" "Những dependency này được phân phối dưới các giấy phép nguồn mở có yêu cầu " "ghi công bằng cách trích dẫn bản quyền và văn bản giấy phép trong giấy tờ " "của sản phẩm đầu cuối." #: ../../docs/about/complying_with_licenses.rst:156 msgid "" "Given the scope of the Godot project, this is fairly difficult to do " "thoroughly. For the Godot editor, the full documentation of third-party " "copyrights and licenses is provided in the `COPYRIGHT.txt `_ file." msgstr "" "Với phạm vi của dự án Godot, điều này khó thực hiện một cách triệt để. Đối " "với Godot editor, tài liệu đầy đủ về bản quyền và giấy phép của bên thứ ba " "được cung cấp trong file `COPYRIGHT.txt `_ file." #: ../../docs/about/complying_with_licenses.rst:161 msgid "" "A good option for end users to document third-party licenses is to include " "this file in your project's distribution, which you can e.g. rename to " "``GODOT_COPYRIGHT.txt`` to prevent any confusion with your own code and " "assets." msgstr "" "Một ý hay cho người dùng cuối muốn thêm giấy phép của bên thứ ba là hãy kèm " "thêm file này chung với project đã xuất bản của mình, đổi tên thành " "``GODOT_COPYRIGHT.txt`` để khỏi nhầm lẫn nó với code cũng như các asset khác." #: ../../docs/about/release_policy.rst:6 msgid "Godot release policy" msgstr "Chính sách phát hành của Godot" #: ../../docs/about/release_policy.rst:8 msgid "" "Godot's release policy is in constant evolution. The description below " "provides a general idea of what to expect, but what will actually happen " "depends on the choices of core contributors and the needs of the community " "at a given time." msgstr "" "Chính sách phát hành của Godot không ngừng phát triển. Mô tả bên dưới đưa ra " "ý tưởng đại khái về những gì sẽ xảy ra, tuy nhiên điều gì thực sự sẽ xảy ra " "lại tùy thuộc vào quyết định của những người đóng góp chính và nhu cầu của " "cộng đồng tại mỗi thời điểm nhất định." #: ../../docs/about/release_policy.rst:14 msgid "Godot versioning" msgstr "Đánh số phiên bản" #: ../../docs/about/release_policy.rst:16 msgid "" "Godot loosely follows `Semantic Versioning `__ with a " "``major.minor.patch`` versioning system, albeit with an interpretation of " "each term adapted to the complexity of a game engine:" msgstr "" "Godot áp dụng `Semantic Versioning `__ với hệ thống " "đánh số phiên bản dạng ``major.minor.patch``, nhưng có cách diễn giải từng " "thuật ngữ được điều chỉnh cho phù hợp với độ phức tạp của một game engine:" #: ../../docs/about/release_policy.rst:20 msgid "" "The ``major`` version is incremented when major compatibility breakages " "happen which imply significant porting work to move projects from one major " "version to another." msgstr "" "Phiên bản ``major`` được tăng lên mỗi khi có những thay đổi cực lớn khiến " "bản mới không tương thích với bản cũ, đòi hỏi người dùng phải sửa đổi đáng " "kể code của họ để nâng cấp lên phiên bản mới." #: ../../docs/about/release_policy.rst:24 msgid "" "For example, porting Godot projects from Godot 3.x to Godot 4.x requires " "running the project through a conversion tool, and then performing a number " "of further adjustments manually for what the tool could not do automatically." msgstr "" "Ví dụ, port các project từ Godot 3.x lên Godot 4.x đòi hỏi phải xài tool " "chuyển đổi, sau đó phải thực hiện nhiều tinh chỉnh thủ công khác vì có nhiều " "chuyện tool sẽ không tự động làm được." #: ../../docs/about/release_policy.rst:28 msgid "" "The ``minor`` version is incremented for feature releases that do not break " "compatibility in a major way. Minor compatibility breakage in very specific " "areas *may* happen in minor versions, but the vast majority of projects " "should not be affected or require significant porting work." msgstr "" "Phiên bản ``minor`` được tăng lên mỗi khi có các bản cập nhật bổ sung tính " "năng, tuy nhiên những tính năng này không gây ra sự bất tương thích nghiêm " "trọng nào với các phiên bản cũ. Thỉnh thoảng *có thể* xảy ra một số trường " "hợp không tương thích, nhưng nhỏ thôi, không đáng kể và không ảnh hưởng " "nhiều các project hiện tại." #: ../../docs/about/release_policy.rst:33 msgid "" "This is because Godot, as a game engine, covers many areas like rendering, " "physics, and scripting. Fixing bugs or implementing new features in one area " "might sometimes require changing a feature's behavior or modifying a class's " "interface, even if the rest of the engine API remains backwards compatible." msgstr "" "Vì Godot là một game engine, nó bao gồm nhiều lĩnh vực khác nhau như render, " "vật lý và lập trình. Khi sửa lỗi hoặc thêm tính năng mới trong một lĩnh vực, " "đôi khi cần phải thay đổi cách thức hoạt động của một tính năng khác hoặc " "phải sửa đổi interface của một class. Tuy nhiên, những thay đổi này được " "thực hiện để đảm bảo phần còn lại của API vẫn tương thích ngược." #: ../../docs/about/release_policy.rst:40 msgid "" "Upgrading to a new minor version is recommended for all users, but some " "testing is necessary to ensure that your project still behaves as expected." msgstr "" "Tất cả người dùng được khuyến nghị nâng cấp lên phiên bản minor mới, tuy " "nhiên việc test là cần thiết để chắc rằng project của bạn vẫn hoạt động như " "kỳ vọng." #: ../../docs/about/release_policy.rst:44 msgid "" "The ``patch`` version is incremented for maintenance releases which focus on " "fixing bugs and security issues, implementing new requirements for platform " "support, and backporting safe usability enhancements. Patch releases are " "backwards compatible." msgstr "" "Phiên bản ``patch`` được tăng lên mỗi khi có các bản cập nhật bảo trì, tập " "trung sửa các lỗi và các vấn đề bảo mật, triển khai các yêu cầu mới để hỗ " "trợ nền tảng, và cung cấp các cải tiến về khả năng sử dụng an toàn. Các bản " "patch là tương thích ngược." #: ../../docs/about/release_policy.rst:49 msgid "" "Patch versions may include minor new features which do not impact the " "existing API, and thus have no risk of impacting existing projects." msgstr "" "Các bản patch có thể bao gồm các tính năng nhỏ mới, không ảnh hưởng đến API " "hiện tại và do đó không ảnh hưởng đến các project hiện có." #: ../../docs/about/release_policy.rst:54 msgid "" "Updating to new patch versions is therefore considered safe and strongly " "recommended to all users of a given stable branch." msgstr "" "Nâng cấp lên các bản patch mới được coi là an toàn và đặc biệt khuyến nghị " "cho tất cả mọi người dùng trong cùng nhánh stable đó." #: ../../docs/about/release_policy.rst:57 msgid "" "We call ``major.minor`` combinations *stable branches*. Each stable branch " "starts with a ``major.minor`` release (without the ``0`` for ``patch``) and " "is further developed for maintenance releases in a Git branch of the same " "name (for example patch updates for the 4.0 stable branch are developed in " "the ``4.0`` Git branch)." msgstr "" "Chúng tôi gọi tổ hợp ``major.minor`` là *các nhánh stable*. Mỗi một nhánh " "stable bắt đầu với phiên bản ``major.minor`` (không có số ``0`` của " "``patch``) và được phát triển thêm để phát hành các bản patch trong nhánh " "Git cùng tên (ví dụ các bản patch cho nhánh stable 4.0 được phát triển trong " "nhánh Git ``4.0``)." #: ../../docs/about/release_policy.rst:64 msgid "Release support timeline" msgstr "Lịch trình hỗ trợ phát hành" #: ../../docs/about/release_policy.rst:68 msgid "" "Stable branches are supported *at least* until the next stable branch is " "released and has received its first patch update. In practice, we support " "stable branches on a *best effort* basis for as long as they have active " "users who need maintenance updates." msgstr "" "Các nhánh stable được hỗ trợ *ít nhất* cho tới khi nhánh stable tiếp theo " "được phát hành và nhận được bản patch đầu tiên. Trong thực tế, chúng tôi hỗ " "trợ các nhánh stable trên cơ sở nỗ lực hết mình miễn là còn có người dùng " "đang sử dụng." #: ../../docs/about/release_policy.rst:73 msgid "" "Whenever a new major version is released, we make the previous stable branch " "a long-term supported release, and do our best to provide fixes for issues " "encountered by users of that branch who cannot port complex projects to the " "new major version. This was the case for the 2.1 branch, and is the case for " "the 3.x branch." msgstr "" "Bất cứ khi nào một phiên bản chính mới được phát hành, chúng tôi sẽ biến " "nhánh ổn định trước đó thành bản phát hành được hỗ trợ dài hạn và cố gắng " "hết sức để sửa các lỗi mà người dùng của nhánh đó gặp phải khi không thể " "chuyển các dự án phức tạp sang phiên bản chính mới. Điều này đã được áp dụng " "với nhánh 2.1, và hiện tại là nhánh 3.x." #: ../../docs/about/release_policy.rst:79 msgid "" "In a given minor release series, only the latest patch release receives " "support. If you experience an issue using an older patch release, please " "upgrade to the latest patch release of that series and test again before " "reporting an issue on GitHub." msgstr "" "Trong mỗi phiên bản minor, chỉ bản patch mới nhất được hỗ trợ. Nếu bạn gặp " "vấn đề khi sử dụng một bản patch cũ hơn, vui lòng nâng cấp lên bản patch mới " "nhất trong cùng phiên bản minor đó rồi thử lại trước khi báo cáo sự cố lên " "GitHub." #: ../../docs/about/release_policy.rst:85 msgid "**Version**" msgstr "**Phiên bản**" #: ../../docs/about/release_policy.rst:85 msgid "**Release date**" msgstr "**Ngày phát hành**" #: ../../docs/about/release_policy.rst:85 msgid "**Support level**" msgstr "**Mức độ hỗ trợ**" #: ../../docs/about/release_policy.rst:87 #, fuzzy msgid "Godot 4.6 (`master`)" msgstr "Godot 4.3 (`master`)" #: ../../docs/about/release_policy.rst:87 #, fuzzy msgid "Q1 2026 (estimate)" msgstr "Q1 2024 (dự kiến)" #: ../../docs/about/release_policy.rst:87 msgid "" "|unstable| *Development.* Receives new features, usability and performance " "improvements, as well as bug fixes, while under development." msgstr "" "|unstable| *Đang phát triển.* Nhận các tính năng mới, cải tiến về khả năng " "sử dụng và hiệu suất cũng như sửa lỗi trong quá trình phát triển." #: ../../docs/about/release_policy.rst:133 msgid "unstable" msgstr "không ổn định" #: ../../docs/about/release_policy.rst:90 #, fuzzy msgid "Godot 4.5" msgstr "Godot 4.2" #: ../../docs/about/release_policy.rst:90 #, fuzzy msgid "September 2025" msgstr "T12 2014" #: ../../docs/about/release_policy.rst:90 #: ../../docs/about/release_policy.rst:106 msgid "" "|supported| Receives fixes for bugs and security issues, as well as patches " "that enable platform support." msgstr "" "|supported| Sửa các lỗi và vấn đề bảo mật cũng như các bản patch để hỗ trợ " "nền tảng." #: ../../docs/about/release_policy.rst:130 msgid "supported" msgstr "được hỗ trợ" #: ../../docs/about/release_policy.rst:93 #, fuzzy msgid "Godot 4.4" msgstr "Godot 4.2" #: ../../docs/about/release_policy.rst:93 #, fuzzy msgid "March 2025" msgstr "T3 2023" #: ../../docs/about/release_policy.rst:93 #, fuzzy msgid "|partial| Receives fixes for security and platform support issues only." msgstr "" "|supported| Sửa các lỗi và vấn đề bảo mật cũng như các bản patch để hỗ trợ " "nền tảng." #: ../../docs/about/release_policy.rst:131 msgid "partial" msgstr "partial" #: ../../docs/about/release_policy.rst:95 #, fuzzy msgid "Godot 4.3" msgstr "Godot 4.2" #: ../../docs/about/release_policy.rst:95 #, fuzzy msgid "August 2024" msgstr "T8 2022" #: ../../docs/about/release_policy.rst:95 #, fuzzy msgid "|eol| No longer supported (last update: 4.3)." msgstr "|Kết thúc vòng đời| Không còn được hỗ trợ (bản cập nhật cuối: 4.0.4)." #: ../../docs/about/release_policy.rst:132 msgid "eol" msgstr "Kết thúc vòng đời" #: ../../docs/about/release_policy.rst:97 msgid "Godot 4.2" msgstr "Godot 4.2" #: ../../docs/about/release_policy.rst:97 msgid "November 2023" msgstr "T11 2023" #: ../../docs/about/release_policy.rst:97 #, fuzzy msgid "|eol| No longer supported (last update: 4.2.2)." msgstr "|Kết thúc vòng đời| Không còn được hỗ trợ (bản cập nhật cuối: 4.0.4)." #: ../../docs/about/release_policy.rst:99 msgid "Godot 4.1" msgstr "Godot 4.1" #: ../../docs/about/release_policy.rst:99 msgid "July 2023" msgstr "T7 2023" #: ../../docs/about/release_policy.rst:99 msgid "|eol| No longer supported (last update: 4.1.4)." msgstr "|Kết thúc vòng đời| Không còn được hỗ trợ (bản cập nhật cuối: 4.0.4)." #: ../../docs/about/release_policy.rst:101 msgid "Godot 4.0" msgstr "Godot 4.0" #: ../../docs/about/release_policy.rst:101 msgid "March 2023" msgstr "T3 2023" #: ../../docs/about/release_policy.rst:101 msgid "|eol| No longer supported (last update: 4.0.4)." msgstr "|eol| Không còn được hỗ trợ (bản cập nhật cuối: 4.0.4)." #: ../../docs/about/release_policy.rst:103 #, fuzzy msgid "Godot 3.7 (`3.x`)" msgstr "Godot 3.6 (`3.x`, LTS)" #: ../../docs/about/release_policy.rst:103 msgid "No ETA for now" msgstr "" #: ../../docs/about/release_policy.rst:103 msgid "" "|supported| *Beta.* Receives new features, usability and performance " "improvements, as well as bug fixes, while under development." msgstr "" "|supported| *Beta.* Nhận các tính năng mới, cải tiến về khả năng sử dụng và " "hiệu suất cũng như sửa lỗi trong quá trình phát triển." #: ../../docs/about/release_policy.rst:106 #, fuzzy msgid "Godot 3.6" msgstr "Godot 3.5" #: ../../docs/about/release_policy.rst:106 #, fuzzy msgid "September 2024" msgstr "T12 2014" #: ../../docs/about/release_policy.rst:109 msgid "Godot 3.5" msgstr "Godot 3.5" #: ../../docs/about/release_policy.rst:109 msgid "August 2022" msgstr "T8 2022" #: ../../docs/about/release_policy.rst:109 #, fuzzy msgid "|eol| No longer supported (last update: 3.5.3)." msgstr "|eol| Không còn được hỗ trợ (bản cập nhật cuối cùng: 3.2.3)." #: ../../docs/about/release_policy.rst:111 msgid "Godot 3.4" msgstr "Godot 3.4" #: ../../docs/about/release_policy.rst:111 msgid "November 2021" msgstr "T11 2021" #: ../../docs/about/release_policy.rst:111 msgid "|eol| No longer supported (last update: 3.4.5)." msgstr "|eol| Không còn được hỗ trợ (bản cập nhật cuối cùng: 3.4.5)." #: ../../docs/about/release_policy.rst:113 msgid "Godot 3.3" msgstr "Godot 3.3" #: ../../docs/about/release_policy.rst:113 msgid "April 2021" msgstr "T4 2021" #: ../../docs/about/release_policy.rst:113 msgid "|eol| No longer supported (last update: 3.3.4)." msgstr "|eol| Không còn được hỗ trợ (bản cập nhật cuối cùng: 3.3.4)." #: ../../docs/about/release_policy.rst:115 msgid "Godot 3.2" msgstr "Godot 3.2" #: ../../docs/about/release_policy.rst:115 msgid "January 2020" msgstr "T1 2020" #: ../../docs/about/release_policy.rst:115 msgid "|eol| No longer supported (last update: 3.2.3)." msgstr "|eol| Không còn được hỗ trợ (bản cập nhật cuối cùng: 3.2.3)." #: ../../docs/about/release_policy.rst:117 msgid "Godot 3.1" msgstr "Godot 3.1" #: ../../docs/about/release_policy.rst:117 msgid "March 2019" msgstr "T3 2019" #: ../../docs/about/release_policy.rst:117 msgid "|eol| No longer supported (last update: 3.1.2)." msgstr "|eol| Không còn được hỗ trợ (bản cập nhật cuối cùng: 3.1.2)." #: ../../docs/about/release_policy.rst:119 msgid "Godot 3.0" msgstr "Godot 3.0" #: ../../docs/about/release_policy.rst:119 msgid "January 2018" msgstr "T1 2018" #: ../../docs/about/release_policy.rst:119 msgid "|eol| No longer supported (last update: 3.0.6)." msgstr "|eol| Không còn được hỗ trợ (bản cập nhật cuối cùng: 3.0.6)." #: ../../docs/about/release_policy.rst:121 msgid "Godot 2.1" msgstr "Godot 2.1" #: ../../docs/about/release_policy.rst:121 msgid "July 2016" msgstr "T7 2016" #: ../../docs/about/release_policy.rst:121 msgid "|eol| No longer supported (last update: 2.1.6)." msgstr "|eol| Không còn được hỗ trợ (bản cập nhật cuối cùng: 2.1.6)." #: ../../docs/about/release_policy.rst:123 msgid "Godot 2.0" msgstr "Godot 2.0" #: ../../docs/about/release_policy.rst:123 msgid "February 2016" msgstr "T2 2016" #: ../../docs/about/release_policy.rst:123 msgid "|eol| No longer supported (last update: 2.0.4.1)." msgstr "|eol| Không còn được hỗ trợ (bản cập nhật cuối cùng: 2.0.4.1)." #: ../../docs/about/release_policy.rst:125 msgid "Godot 1.1" msgstr "Godot 1.1" #: ../../docs/about/release_policy.rst:125 msgid "May 2015" msgstr "T5 2015" #: ../../docs/about/release_policy.rst:125 #: ../../docs/about/release_policy.rst:127 msgid "|eol| No longer supported." msgstr "|eol| Không còn được hỗ trợ." #: ../../docs/about/release_policy.rst:127 msgid "Godot 1.0" msgstr "Godot 1.0" #: ../../docs/about/release_policy.rst:127 msgid "December 2014" msgstr "T12 2014" #: ../../docs/about/release_policy.rst:135 msgid "" "**Legend:** |supported| Full support – |partial| Partial support – |eol| No " "support (end of life) – |unstable| Development version" msgstr "" "**Chú thích:** |supported| Hỗ trợ đầy đủ – |partial| Hỗ trợ một phần – |eol| " "Không còn hỗ trợ (hết vòng đời) – |unstable| Đang phát triển" #: ../../docs/about/release_policy.rst:141 msgid "" "Pre-release Godot versions aren't intended to be used in production and are " "provided for testing purposes only." msgstr "" "Các phiên bản tiền phát hành của Godot không nhằm mục đích tạo sản phẩm mà " "chỉ được cung cấp cho mục đích thử nghiệm." #: ../../docs/about/release_policy.rst:146 msgid "" "See :ref:`doc_upgrading_to_godot_4` for instructions on migrating a project " "from Godot 3.x to 4.x." msgstr "" "Xem :ref:`doc_upgrading_to_godot_4` để được hướng dẫn cách nâng cấp một " "project Godot 3.x lên 4.x." #: ../../docs/about/release_policy.rst:152 msgid "Which version should I use for a new project?" msgstr "Tôi nên sử dụng phiên bản nào cho một project mới?" #: ../../docs/about/release_policy.rst:154 msgid "" "We recommend using Godot 4.x for new projects, as the Godot 4.x series will " "be supported long after 3.x stops receiving updates in the future. One " "caveat is that a lot of third-party documentation hasn't been updated for " "Godot 4.x yet. If you have to follow a tutorial designed for Godot 3.x, we " "recommend keeping :ref:`doc_upgrading_to_godot_4` open in a separate tab to " "check which methods have been renamed (if you get a script error while " "trying to use a specific node or method that was renamed in Godot 4.x)." msgstr "" "Chúng tôi khuyên bạn nên sử dụng Godot 4.x cho các project mới, vì seri 4.x " "sẽ còn được hỗ trợ lâu dài sau khi 3.x ngừng nhận các bản cập nhật trong " "tương lai. Một lưu ý là nhiều tài liệu của bên thứ ba vẫn chưa được cập nhật " "cho Godot 4.x. Nếu bạn phải làm theo hướng dẫn được thiết kế cho Godot 3.x, " "chúng tôi khuyên bạn nên mở :ref:`doc_upgrading_to_godot_4` trong một tab " "riêng để đối chiếu xem phương thức nào đã bị đổi tên (trong trường hợp bạn " "gặp lỗi khi thử xài một Node hoặc phương thức nào đó đã bị đổi tên trong " "Godot 4.x)." #: ../../docs/about/release_policy.rst:162 msgid "" "If your project requires a feature that is missing in 4.x (such as GLES2/" "WebGL 1.0), you should use Godot 3.x for a new project instead." msgstr "" "Nếu project của bạn cần một tính năng bị thiếu trong 4.x (như GLES2/WebGL " "1.0), bạn nên sử dụng Godot 3.x cho project mới." #: ../../docs/about/release_policy.rst:168 msgid "Should I upgrade my project to use new engine versions?" msgstr "" "Tôi có nên nâng cấp project của mình để sử dụng các phiên bản engine mới " "không?" #: ../../docs/about/release_policy.rst:172 msgid "" "Upgrading software while working on a project is inherently risky, so " "consider whether it's a good idea for your project before attempting an " "upgrade. Also, make backups of your project or use version control to " "prevent losing data in case the upgrade goes wrong." msgstr "" "Nâng cấp phần mềm trong khi đang làm dang dở một project tiềm ẩn nhiều rủi " "ro. Do đó, trước khi nâng cấp, bạn hãy cân nhắc thật kỹ lưỡng. Ngoài ra, hãy " "sao lưu project của bạn hoặc sử dụng phần mềm kiểm soát phiên bản để tránh " "mất dữ liệu nếu quá trình nâng cấp gặp trục trặc." #: ../../docs/about/release_policy.rst:177 msgid "" "That said, we do our best to keep minor and especially patch releases " "compatible with existing projects." msgstr "" "Về phần mình, chúng tôi có gắng hết sức để giữ cho các bản phát hành minor " "và đặc biệt là các bản patch tương thích với các project hiện có." #: ../../docs/about/release_policy.rst:180 msgid "" "The general recommendation is to upgrade your project to follow new *patch* " "releases, such as upgrading from 4.0.2 to 4.0.3. This ensures you get bug " "fixes, security updates and platform support updates (which is especially " "important for mobile platforms). You also get continued support, as only the " "last patch release receives support on official community platforms." msgstr "" "Lời khuyên chung là bạn nên nâng cấp project của mình lên các bản patch mới, " "ví dụ từ 4.0.2 lên 4.0.3. Điều này đảm bảo rằng bạn nhận được các bản cập " "nhật sửa lỗi, cập nhật bảo mật và cập nhật hỗ trợ nền tảng (điều này đặc " "biệt quan trọng đối với nền tảng di động). Bạn cũng nhận được hỗ trợ liên " "tục vì chỉ bản patch mới nhất mới nhận được hỗ trợ từ nền tảng cộng đồng " "chính thức." #: ../../docs/about/release_policy.rst:186 msgid "" "For *minor* releases, you should determine whether it's a good idea to " "upgrade on a case-by-case basis. We've made a lot of effort in making the " "upgrade process as seamless as possible, but some breaking changes may be " "present in minor releases, along with a greater risk of regressions. Some " "fixes included in minor releases may also change a class' expected behavior " "as required to fix some bugs. This is especially the case in classes marked " "as *experimental* in the documentation." msgstr "" "Đối với các bản phát hành *minor*, tùy từng trường hợp mà bạn quyết định xem " "việc nâng cấp có hợp lý hay không. Chúng tôi đã cố gắng hết sức để làm cho " "quá trình nâng cấp diễn ra suôn sẻ nhất có thể, thế nhưng các bản phát hình " "minor có thể chứa một số thay đổi làm tăng nguy cơ xảy ra lỗi. Một số sửa " "lỗi trong các bản phát hành minor cũng có thay đổi cách thức hoạt động của " "một class, điều này đôi khi không thể tránh khỏi để sửa một số lỗi nhất " "định. Các class được đánh dấu là *thử nghiệm* trong tài liệu hay bị vấn đề " "này." #: ../../docs/about/release_policy.rst:194 msgid "" "*Major* releases bring a lot of new functionality, but they also remove " "previously existing functionality and may raise hardware requirements. They " "also require much more work to upgrade to compared to minor releases. As a " "result, we recommend sticking with the major release you've started your " "project with if you are happy with how your project currently works. For " "example, if your project was started with 3.5, we recommend upgrading to " "3.5.2 and possibly 3.6 in the future, but not to 4.0+, unless your project " "really needs the new features that come with 4.0+." msgstr "" "Các bản *major* tuy mang đến nhiều tính năng mới, nhưng cũng loại bỏ nhiều " "tính năng cũ và cũng tăng yêu cầu phần cứng. Nâng cấp giữa các phiên bản " "major khó khăn phức tạp hơn so với các bản minor. Vì vậy, nếu project của " "bạn đã chạy ngon lành rồi thì chúng tôi khuyên bạn nên ở lại với phiên bản " "major đó. Ví dụ, nếu project của bạn được tạo với phiên bản 3.5, chúng tôi " "khuyên nên nâng lên 3.5.2 và sau này là 3.6, chứ đừng lên 4.0+, trừ khi bạn " "thực sự cần tính năng gì đó chỉ có trong 4.0+." #: ../../docs/about/release_policy.rst:206 msgid "When is the next release out?" msgstr "Khi nào phiên bản tiếp theo sẽ được phát hành?" #: ../../docs/about/release_policy.rst:210 msgid "" "While Godot contributors aren't working under any deadlines, we strive to " "publish minor releases relatively frequently." msgstr "" "Mặc dù các cộng tác viên Godot không làm việc dưới áp lực của bất cứ " "deadline nào, chúng tôi vẫn cố gắng phát hành các phiên bản minor một cách " "thường xuyên." #: ../../docs/about/release_policy.rst:213 #, fuzzy msgid "" "In particular, after the very long release cycle for 4.0, we are pivoting to " "a faster-paced development workflow, 4.1 released 4 months after 4.0, and " "4.2 released 4 months after 4.1." msgstr "" "Sau chu kỳ phát hành 4.0 khá lề mề, chúng tôi đang chuyển sang quy trình " "phát triển nhanh hơn, với bản 4.1 được phát hành 4 tháng sau bản 4.0, còn " "bản 4.2 phát hành sau bản 4.1 cũng 4 tháng" #: ../../docs/about/release_policy.rst:217 msgid "" "Frequent minor releases will enable us to ship new features faster (possibly " "as experimental), get user feedback quickly, and iterate to improve those " "features and their usability. Likewise, the general user experience will be " "improved more steadily with a faster path to the end users." msgstr "" "Phát hành các bản minor thường xuyên sẽ giúp chúng tôi đưa vào các tính năng " "mới nhanh hơn (có thể là tính năng thử nghiệm), nhận phản hồi của người dùng " "nhanh hơn, rồi cải tiến liên tục các tính năng đó cũng như độ dễ dùng của " "chúng. Trải nghiệm người dùng nói chung sẽ không ngừng được cải thiện thông " "qua việc cung cấp các bản phát hành nhanh hơn cho họ." #: ../../docs/about/release_policy.rst:222 msgid "" "Maintenance (patch) releases are released as needed with potentially very " "short development cycles, to provide users of the current stable branch with " "the latest bug fixes for their production needs." msgstr "" "Các bản patch được phát hành khi cần thiết với chu kỳ phát triển có thể rất " "ngắn, nhằm cung cấp cho người dùng nhánh stable hiện tại các bản vá lỗi mới " "nhất, đáp ứng các nhu cầu phát triển của họ." #: ../../docs/about/release_policy.rst:226 msgid "" "There is currently no planned release date for the next 3.x minor version, " "3.7. The current stable release, 3.6, may be the last stable branch of Godot " "3.x. Godot 3.x is supported on a best-effort basis, as long as contributors " "continue to maintain it." msgstr "" #: ../../docs/about/release_policy.rst:232 msgid "What are the criteria for compatibility across engine versions?" msgstr "" "Tiêu chí nào ảnh hưởng đến khả năng tương thích giữa các phiên bản engine?" #: ../../docs/about/release_policy.rst:236 msgid "" "This section is intended to be used by contributors to determine which " "changes are safe for a given release. The list is not exhaustive; it only " "outlines the most common situations encountered during Godot's development." msgstr "" "Mục này nhằm giúp cộng tác viên xác định những thay đổi nào là an toàn cho " "một bản phát hành nhất định. Danh sách này không đầy đủ, nó chỉ đưa ra những " "tình huống phổ biến nhất phát sinh trong quá trình phát triển Godot." #: ../../docs/about/release_policy.rst:240 msgid "The following changes are acceptable in patch releases:" msgstr "Những thay đổi sau đây được chấp nhận trong các bản patch:" #: ../../docs/about/release_policy.rst:242 msgid "" "Fixing a bug in a way that has no major negative impact on most projects, " "such as a visual or physics bug. Godot's physics engine is not " "deterministic, so physics bug fixes are not considered to break " "compatibility. If fixing a bug has a negative impact that could impact a lot " "of projects, it should be made optional (e.g. using a project setting or " "separate method)." msgstr "" "Sửa lỗi không gây tác động tiêu cực lên phần lớn các project, như lỗi hình " "ảnh hoặc vật lý. Engine vật lý của Godot là không cố định nên việc sửa lỗi " "vật lý được coi là không phá vỡ tính tương thích. Nếu sửa lỗi mà gây tác " "động tiêu cực lên phần lớn các project, thì việc vá lỗi đó phải được thực " "hiện một cách tùy chọn (ví dụ: thông qua project setting hoặc bằng phương " "thức riêng)." #: ../../docs/about/release_policy.rst:247 msgid "Adding a new optional parameter to a method." msgstr "Thêm một tham số tùy chọn vào một phương thức." #: ../../docs/about/release_policy.rst:248 msgid "Small-scale editor usability tweaks." msgstr "Tinh chỉnh editor quy mô nhỏ." #: ../../docs/about/release_policy.rst:250 msgid "" "Note that we tend to be more conservative with the fixes we allow in each " "subsequent patch release. For instance, 4.0.1 may receive more impactful " "fixes than 4.0.4 would." msgstr "" "Lưu ý rằng chúng tôi trở nên thận trọng hơn trong việc chấp nhận các sửa lỗi " "khi triển khai các bản patch. Ví dụ: 4.0.1 có thể nhận được các sửa lỗi toàn " "diện hơn 4.0.4." #: ../../docs/about/release_policy.rst:254 msgid "" "The following changes are acceptable in minor releases, but not patch " "releases:" msgstr "" "Những thay đổi sau đây được chấp nhận trong các bản minor, không phải trong " "bản patch:" #: ../../docs/about/release_policy.rst:256 msgid "Significant new features." msgstr "Các tính năng mới đáng chú ý." #: ../../docs/about/release_policy.rst:257 msgid "" "Renaming a method parameter. In C#, method parameters can be passed by name " "(but not in GDScript). As a result, this can break some projects that use C#." msgstr "" "Thay đổi tham số của một phương thức. Trong C#, các tham số có thể được " "truyền bằng tên (GDScript thì không). Điều này có thể làm hỏng các project " "xài C#." #: ../../docs/about/release_policy.rst:259 msgid "" "Deprecating a method, member variable, or class. This is done by adding a " "deprecated flag to its class reference, which will show up in the editor. " "When a method is marked as deprecated, it's slated to be removed in the next " "*major* release." msgstr "" "Phương thức, biến thành viên hoặc class lỗi thời. Điều này được thực hiện " "bằng cách gắn cờ deprecated vào thao khảo class của nó, và cũng sẽ được hiển " "thị trong editor. Khi một phương thức được đánh dấu là deprecated, nó sẽ bị " "gỡ bỏ trong phiên bản *major* kế tiếp." #: ../../docs/about/release_policy.rst:263 msgid "Changes that affect the default project theme's visuals." msgstr "" "Những thay đổi ảnh hưởng đến thiết kế trực quan của theme project mặc định." #: ../../docs/about/release_policy.rst:264 msgid "" "Bug fixes which significantly change the behavior or the output, with the " "aim to meet user expectations better. In comparison, in patch releases, we " "may favor keeping a buggy behavior so we don't break existing projects which " "likely already rely on the bug or use a workaround." msgstr "" "Sửa lỗi làm thay đổi đáng kể cách thức hoạt động hoặc output, nhằm đáp ứng " "tốt hơn kỳ vọng của người dùng. Để so sánh, thì trong các bản patch, chúng " "tôi đôi khi giữ lại bug để không gây ảnh hưởng nghiêm trọng đến các project " "hiện tại." #: ../../docs/about/release_policy.rst:268 msgid "Performance optimizations that result in visual changes." msgstr "Tối ưu hiệu suất dẫn tới thay đổi hình ảnh trực quan." #: ../../docs/about/release_policy.rst:270 msgid "" "The following changes are considered **compatibility-breaking** and can only " "be performed in a new major release:" msgstr "" "Những thay đổi sau đây được coi là **không còn tương thích** và chỉ có thể " "được triển khai trong phiên bản major mới:" #: ../../docs/about/release_policy.rst:273 msgid "Renaming or removing a method, member variable, or class." msgstr "Đổi tên hoặc loại bỏ một phương thức, biến thành viên hoặc class." #: ../../docs/about/release_policy.rst:274 msgid "" "Modifying a node's inheritance tree by making it inherit from a different " "class." msgstr "" "Sửa lại cấu trúc kế thừa của một node bằng việc kế thừa nó từ một class khác." #: ../../docs/about/release_policy.rst:275 msgid "" "Changing the default value of a project setting value in a way that affects " "existing projects. To only affect new projects, the project manager should " "write a modified ``project.godot`` instead." msgstr "" "Thay đổi giá trị mặc định trong project setting, gây ảnh hưởng đến các " "project hiện có. Nếu muốn ảnh hưởng chỉ các project mới thì project manager " "nên sửa đổi ``project.godot``." #: ../../docs/about/release_policy.rst:279 msgid "" "Since Godot 5.0 hasn't been branched off yet, we currently discourage making " "compatibility-breaking changes of this kind." msgstr "" "Vì Godot 5.0 vẫn chưa được phân nhánh nên hiện tại chúng tôi không khuyến " "khích thực hiện những thay đổi có thể gây ra sự cố về khả năng tương thích." #: ../../docs/about/release_policy.rst:284 msgid "" "When modifying a method's signature in any fashion (including adding an " "optional parameter), a GDExtension compatibility method must be created. " "This ensures that existing GDExtensions continue to work across patch and " "minor releases, so that users don't have to recompile them. " "See :ref:`doc_handling_compatibility_breakages` for more information." msgstr "" "Bất cứ khi nào sửa đổi signature của một phương thức (kể cả việc thêm tham " "số tùy chọn) thì phải tạo một phương thức tương thích GDExtension. Điều này " "đảm bảo các GDExtension hiện có sẽ tiếp tục hoạt động xuyên suốt các bản " "patch và minor mà không cần người dùng phải biên dịch lại chúng. " "Xem :ref:`doc_handling_compatibility_breakages` để biết thêm thông tin." #: ../../docs/about/docs_changelog.rst:6 msgid "Documentation changelog" msgstr "Nhật ký thay đổi tài liệu" #: ../../docs/about/docs_changelog.rst:8 msgid "" "The documentation is continually being improved. New releases include new " "pages, fixes and updates to existing pages, and many updates to " "the :ref:`class reference `. Below is a list of new " "pages added since version 3.0." msgstr "" "Tài liệu này liên tục được cải thiện. Các phiên bản mới bao gồm các trang " "mới, các bản sửa lỗi và cập nhật cho các trang hiện có cũng như nhiều bản " "cập nhật cho :ref:`tham khảo class `. Dưới đây là danh " "sách các trang mới được thêm vào kể từ phiên bản 3.0." #: ../../docs/about/docs_changelog.rst:15 #, fuzzy msgid "" "This document only contains new pages, so not all changes are reflected. " "Many pages have been substantially updated but are not reflected in this " "document." msgstr "" "Trang này chỉ chứa các trang mới nên không phải tất cả mọi thay đổi đều được " "liệt kê ở đây, nhiều trang đã được cập nhật đáng kể nhưng không được phản " "ánh ở đây." #: ../../docs/about/docs_changelog.rst:19 #, fuzzy msgid "New pages since version 4.4" msgstr "Các trang mới từ phiên bản 4.1" #: ../../docs/about/docs_changelog.rst:24 #, fuzzy msgid ":ref:`doc_engine_compilation_configuration_editor`" msgstr "Thư viện tài nguyên" #: ../../docs/about/docs_changelog.rst:27 #: ../../docs/about/docs_changelog.rst:114 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.3.rst:25 #: ../../docs/engine_details/development/compiling/compiling_for_web.rst:81 msgid "GDExtension" msgstr "" #: ../../docs/about/docs_changelog.rst:29 #, fuzzy msgid ":ref:`doc_gdextension_c_example`" msgstr ":ref:`doc_what_is_gdextension`" #: ../../docs/about/docs_changelog.rst:32 #: ../../docs/about/docs_changelog.rst:66 #: ../../docs/about/docs_changelog.rst:120 #: ../../docs/about/docs_changelog.rst:154 #: ../../docs/about/docs_changelog.rst:178 #: ../../docs/about/docs_changelog.rst:226 msgid "Migrating" msgstr "Chuyển đổi" #: ../../docs/about/docs_changelog.rst:34 #, fuzzy msgid ":ref:`doc_upgrading_to_godot_4.5`" msgstr ":ref:`doc_upgrading_to_godot_4.2`" #: ../../docs/about/docs_changelog.rst:40 #, fuzzy msgid ":ref:`doc_logging`" msgstr ":ref:`doc_ios_plugin`" #: ../../docs/about/docs_changelog.rst:43 #, fuzzy msgid "New pages since version 4.3" msgstr "Các trang mới từ phiên bản 4.1" #: ../../docs/about/docs_changelog.rst:46 #: ../../docs/about/docs_changelog.rst:104 #: ../../docs/about/docs_changelog.rst:191 #: ../../docs/about/docs_changelog.rst:376 #: ../../docs/about/docs_changelog.rst:481 ../../docs/tutorials/2d/index.rst:13 msgid "2D" msgstr "2D" #: ../../docs/about/docs_changelog.rst:48 #, fuzzy msgid ":ref:`doc_introduction_to_2d`" msgstr ":ref:`doc_introduction_to_shaders`" #: ../../docs/about/docs_changelog.rst:51 #: ../../docs/about/docs_changelog.rst:196 #: ../../docs/about/docs_changelog.rst:264 #: ../../docs/about/docs_changelog.rst:290 #: ../../docs/about/docs_changelog.rst:487 ../../docs/tutorials/3d/index.rst:4 #: ../../docs/tutorials/performance/index.rst:75 msgid "3D" msgstr "3D" #: ../../docs/about/docs_changelog.rst:53 #, fuzzy msgid ":ref:`doc_spring_arm`" msgstr ":ref:`doc_using_decals`" #: ../../docs/about/docs_changelog.rst:56 #: ../../docs/tutorials/scripting/cpp/build_system/cmake.rst:61 #: ../../docs/tutorials/scripting/debug/index.rst:4 msgid "Debug" msgstr "Gỡ lỗi" #: ../../docs/about/docs_changelog.rst:58 #, fuzzy msgid ":ref:`doc_output_panel`" msgstr ":ref:`doc_debugger_panel`" #: ../../docs/about/docs_changelog.rst:63 #, fuzzy msgid ":ref:`doc_using_the_xr_editor`" msgstr ":ref:`doc_using_the_web_editor`" #: ../../docs/about/docs_changelog.rst:68 #, fuzzy msgid ":ref:`doc_upgrading_to_godot_4.4`" msgstr ":ref:`doc_upgrading_to_godot_4.2`" #: ../../docs/about/docs_changelog.rst:71 #: ../../docs/tutorials/3d/global_illumination/introduction_to_global_illumination.rst:115 #: ../../docs/tutorials/performance/index.rst:6 #: ../../docs/tutorials/ui/bbcode_in_richtextlabel.rst:165 msgid "Performance" msgstr "" #: ../../docs/about/docs_changelog.rst:73 #, fuzzy msgid ":ref:`doc_pipeline_compilations`" msgstr ":ref:`doc_interpolation`" #: ../../docs/about/docs_changelog.rst:76 #: ../../docs/about/docs_changelog.rst:183 #: ../../docs/about/docs_changelog.rst:231 #: ../../docs/about/docs_changelog.rst:343 #: ../../docs/about/docs_changelog.rst:494 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.1.rst:104 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.3.rst:73 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.4.rst:94 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.5.rst:276 #: ../../docs/tutorials/2d/using_tilemaps.rst:70 #: ../../docs/tutorials/performance/cpu_optimization.rst:246 #: ../../docs/tutorials/performance/thread_safe_apis.rst:104 #: ../../docs/tutorials/physics/index.rst:6 msgid "Physics" msgstr "Vật lý" #: ../../docs/about/docs_changelog.rst:78 #, fuzzy msgid ":ref:`doc_physics_interpolation`" msgstr ":ref:`doc_interpolation`" #: ../../docs/about/docs_changelog.rst:79 #, fuzzy msgid ":ref:`doc_physics_interpolation_quick_start_guide`" msgstr ":ref:`doc_interpolation`" #: ../../docs/about/docs_changelog.rst:80 #, fuzzy msgid ":ref:`doc_physics_interpolation_introduction`" msgstr ":ref:`doc_interpolation`" #: ../../docs/about/docs_changelog.rst:81 #, fuzzy msgid ":ref:`doc_using_physics_interpolation`" msgstr ":ref:`doc_interpolation`" #: ../../docs/about/docs_changelog.rst:82 #, fuzzy msgid ":ref:`doc_advanced_physics_interpolation`" msgstr ":ref:`doc_interpolation`" #: ../../docs/about/docs_changelog.rst:83 #, fuzzy msgid ":ref:`doc_2d_and_3d_physics_interpolation`" msgstr ":ref:`doc_interpolation`" #: ../../docs/about/docs_changelog.rst:88 #, fuzzy msgid ":ref:`doc_renderers`" msgstr ":ref:`doc_using_servers`" #: ../../docs/about/docs_changelog.rst:93 #, fuzzy msgid ":ref:`doc_shader_functions`" msgstr ":ref:`doc_c_sharp_collections`" #: ../../docs/about/docs_changelog.rst:96 #, fuzzy msgid "New pages since version 4.2" msgstr "Các trang mới từ phiên bản 4.1" #: ../../docs/about/docs_changelog.rst:101 #, fuzzy msgid ":ref:`doc_system_requirements`" msgstr "Yêu cầu hệ thống" #: ../../docs/about/docs_changelog.rst:106 #, fuzzy msgid ":ref:`doc_2d_parallax`" msgstr ":ref:`doc_2d_antialiasing`" #: ../../docs/about/docs_changelog.rst:109 msgid "Contributing" msgstr "Đóng góp" #: ../../docs/about/docs_changelog.rst:111 #, fuzzy msgid ":ref:`doc_handling_compatibility_breakages`" msgstr ":ref:`doc_visibility_ranges`" #: ../../docs/about/docs_changelog.rst:116 #, fuzzy msgid ":ref:`doc_gdextension_file`" msgstr ":ref:`doc_what_is_gdextension`" #: ../../docs/about/docs_changelog.rst:117 #, fuzzy msgid ":ref:`doc_godot_cpp_docs_system`" msgstr ":ref:`doc_version_control_systems`" #: ../../docs/about/docs_changelog.rst:122 #, fuzzy msgid ":ref:`doc_upgrading_to_godot_4.3`" msgstr ":ref:`doc_upgrading_to_godot_4.2`" #: ../../docs/about/docs_changelog.rst:127 #, fuzzy msgid ":ref:`doc_compositor`" msgstr "Xem :ref:`doc_ways_to_contribute`." #: ../../docs/about/docs_changelog.rst:130 #: ../../docs/about/docs_changelog.rst:249 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.2.rst:216 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.3.rst:198 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.5.rst:146 #: ../../docs/tutorials/rendering/renderers.rst:154 #: ../../docs/tutorials/xr/index.rst:4 msgid "XR" msgstr "XR" #: ../../docs/about/docs_changelog.rst:132 #, fuzzy msgid ":ref:`doc_a_better_xr_start_script`" msgstr ":ref:`doc_scenes_versus_scripts`" #: ../../docs/about/docs_changelog.rst:133 #, fuzzy msgid ":ref:`doc_openxr_passthrough`" msgstr ":ref:`doc_compute_shaders`" #: ../../docs/about/docs_changelog.rst:134 #, fuzzy msgid ":ref:`doc_xr_next_steps`" msgstr ":ref:`doc_2d_meshes`" #: ../../docs/about/docs_changelog.rst:135 #, fuzzy msgid ":ref:`doc_openxr_settings`" msgstr ":ref:`doc_2d_skeletons`" #: ../../docs/about/docs_changelog.rst:136 #, fuzzy msgid ":ref:`doc_openxr_composition_layers`" msgstr ":ref:`doc_vulkan_validation_layers`" #: ../../docs/about/docs_changelog.rst:137 #, fuzzy msgid ":ref:`doc_openxr_body_tracking`" msgstr ":ref:`doc_soft_body`" #: ../../docs/about/docs_changelog.rst:141 msgid "New pages since version 4.1" msgstr "Các trang mới từ phiên bản 4.1" #: ../../docs/about/docs_changelog.rst:144 #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:22 #: ../../docs/tutorials/performance/cpu_optimization.rst:180 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:49 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:89 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:123 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:253 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:372 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:401 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:510 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:595 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:606 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:624 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:661 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:677 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:692 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:709 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:721 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:729 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:742 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:750 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:763 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:797 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:805 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:813 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_collections.rst:78 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_collections.rst:118 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_collections.rst:216 msgid "C#" msgstr "C#" #: ../../docs/about/docs_changelog.rst:146 msgid ":ref:`doc_c_sharp_diagnostics`" msgstr ":ref:`doc_c_sharp_diagnostics`" #: ../../docs/about/docs_changelog.rst:149 #: ../../docs/about/docs_changelog.rst:172 #: ../../docs/about/docs_changelog.rst:221 #: ../../docs/about/docs_changelog.rst:307 msgid "Development" msgstr "Phát triển" #: ../../docs/about/docs_changelog.rst:151 msgid ":ref:`doc_2d_coordinate_systems`" msgstr ":ref:`doc_2d_coordinate_systems`" #: ../../docs/about/docs_changelog.rst:156 msgid ":ref:`doc_upgrading_to_godot_4.2`" msgstr ":ref:`doc_upgrading_to_godot_4.2`" #: ../../docs/about/docs_changelog.rst:159 msgid "I/O" msgstr "I/O" #: ../../docs/about/docs_changelog.rst:161 msgid ":ref:`doc_runtime_loading_and_saving`" msgstr ":ref:`doc_runtime_loading_and_saving`" #: ../../docs/about/docs_changelog.rst:164 #: ../../docs/about/docs_changelog.rst:336 #: ../../docs/about/docs_changelog.rst:537 #: ../../docs/tutorials/platform/index.rst:4 msgid "Platform-specific" msgstr "Nền tảng cụ thể" #: ../../docs/about/docs_changelog.rst:166 msgid ":ref:`doc_android_library`" msgstr ":ref:`doc_android_library`" #: ../../docs/about/docs_changelog.rst:169 msgid "New pages since version 4.0" msgstr "Các trang mới từ phiên bản 4.0" #: ../../docs/about/docs_changelog.rst:174 msgid ":ref:`doc_internal_rendering_architecture`" msgstr ":ref:`doc_internal_rendering_architecture`" #: ../../docs/about/docs_changelog.rst:175 msgid ":ref:`doc_using_sanitizers`" msgstr ":ref:`doc_using_sanitizers`" #: ../../docs/about/docs_changelog.rst:180 msgid ":ref:`doc_upgrading_to_godot_4.1`" msgstr ":ref:`doc_upgrading_to_godot_4.1`" #: ../../docs/about/docs_changelog.rst:185 msgid ":ref:`doc_troubleshooting_physics_issues`" msgstr ":ref:`doc_troubleshooting_physics_issues`" #: ../../docs/about/docs_changelog.rst:188 msgid "New pages since version 3.6" msgstr "Các trang mới từ phiên bản 3.6" #: ../../docs/about/docs_changelog.rst:193 msgid ":ref:`doc_2d_antialiasing`" msgstr ":ref:`doc_2d_antialiasing`" #: ../../docs/about/docs_changelog.rst:198 msgid ":ref:`doc_3d_antialiasing`" msgstr ":ref:`doc_3d_antialiasing`" #: ../../docs/about/docs_changelog.rst:199 msgid ":ref:`doc_faking_global_illumination`" msgstr ":ref:`doc_faking_global_illumination`" #: ../../docs/about/docs_changelog.rst:200 msgid ":ref:`doc_introduction_to_global_illumination`" msgstr ":ref:`doc_introduction_to_global_illumination`" #: ../../docs/about/docs_changelog.rst:201 msgid ":ref:`doc_mesh_lod`" msgstr ":ref:`doc_mesh_lod`" #: ../../docs/about/docs_changelog.rst:202 msgid ":ref:`doc_occlusion_culling`" msgstr ":ref:`doc_occlusion_culling`" #: ../../docs/about/docs_changelog.rst:203 msgid ":ref:`doc_using_sdfgi`" msgstr ":ref:`doc_using_sdfgi`" #: ../../docs/about/docs_changelog.rst:204 msgid ":ref:`doc_using_decals`" msgstr ":ref:`doc_using_decals`" #: ../../docs/about/docs_changelog.rst:205 msgid ":ref:`doc_visibility_ranges`" msgstr ":ref:`doc_visibility_ranges`" #: ../../docs/about/docs_changelog.rst:206 msgid ":ref:`doc_volumetric_fog`" msgstr ":ref:`doc_volumetric_fog`" #: ../../docs/about/docs_changelog.rst:207 msgid ":ref:`doc_variable_rate_shading`" msgstr ":ref:`doc_variable_rate_shading`" #: ../../docs/about/docs_changelog.rst:208 msgid ":ref:`doc_physical_light_and_camera_units`" msgstr ":ref:`doc_physical_light_and_camera_units`" #: ../../docs/about/docs_changelog.rst:213 msgid ":ref:`doc_creating_movies`" msgstr ":ref:`doc_creating_movies`" #: ../../docs/about/docs_changelog.rst:216 #: ../../docs/tutorials/assets_pipeline/index.rst:4 msgid "Assets pipeline" msgstr "Assets pipeline" #: ../../docs/about/docs_changelog.rst:218 msgid ":ref:`doc_retargeting_3d_skeletons`" msgstr ":ref:`doc_retargeting_3d_skeletons`" #: ../../docs/about/docs_changelog.rst:223 msgid ":ref:`doc_custom_platform_ports`" msgstr ":ref:`doc_custom_platform_ports`" #: ../../docs/about/docs_changelog.rst:228 msgid ":ref:`doc_upgrading_to_godot_4`" msgstr ":ref:`doc_upgrading_to_godot_4`" #: ../../docs/about/docs_changelog.rst:233 msgid ":ref:`doc_large_world_coordinates`" msgstr ":ref:`doc_large_world_coordinates`" #: ../../docs/about/docs_changelog.rst:238 msgid ":ref:`doc_custom_performance_monitors`" msgstr ":ref:`doc_custom_performance_monitors`" #: ../../docs/about/docs_changelog.rst:239 msgid ":ref:`doc_c_sharp_collections`" msgstr ":ref:`doc_c_sharp_collections`" #: ../../docs/about/docs_changelog.rst:240 msgid ":ref:`doc_c_sharp_global_classes`" msgstr ":ref:`doc_c_sharp_global_classes`" #: ../../docs/about/docs_changelog.rst:241 msgid ":ref:`doc_c_sharp_variant`" msgstr ":ref:`doc_c_sharp_variant`" #: ../../docs/about/docs_changelog.rst:246 msgid ":ref:`doc_compute_shaders`" msgstr ":ref:`doc_compute_shaders`" #: ../../docs/about/docs_changelog.rst:251 msgid ":ref:`doc_introducing_xr_tools`" msgstr ":ref:`doc_introducing_xr_tools`" #: ../../docs/about/docs_changelog.rst:252 msgid ":ref:`doc_xr_action_map`" msgstr ":ref:`doc_xr_action_map`" #: ../../docs/about/docs_changelog.rst:253 msgid ":ref:`doc_deploying_to_android`" msgstr ":ref:`doc_deploying_to_android`" #: ../../docs/about/docs_changelog.rst:256 msgid "New pages since version 3.5" msgstr "Các trang mới từ phiên bản 3.5" #: ../../docs/about/docs_changelog.rst:258 msgid "None." msgstr "Không có." #: ../../docs/about/docs_changelog.rst:261 msgid "New pages since version 3.4" msgstr "Các trang mới từ phiên bản 3.4" #: ../../docs/about/docs_changelog.rst:266 msgid ":ref:`doc_3d_text`" msgstr ":ref:`doc_3d_text`" #: ../../docs/about/docs_changelog.rst:271 msgid ":ref:`doc_playing_videos`" msgstr ":ref:`doc_playing_videos`" #: ../../docs/about/docs_changelog.rst:276 msgid ":ref:`doc_managing_editor_features`" msgstr ":ref:`doc_managing_editor_features`" #: ../../docs/about/docs_changelog.rst:279 msgid "New pages since version 3.3" msgstr "Các trang mới từ phiên bản 3.3" #: ../../docs/about/docs_changelog.rst:282 #: ../../docs/getting_started/step_by_step/scripting_languages.rst:59 #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:15 #: ../../docs/tutorials/performance/cpu_optimization.rst:171 #: ../../docs/tutorials/scripting/gdscript/index.rst:6 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:49 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:89 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:123 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:253 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:372 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:401 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:510 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:595 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:606 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:624 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:661 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:677 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:692 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:709 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:721 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:729 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:742 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:750 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:763 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:797 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:805 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:813 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_collections.rst:78 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_collections.rst:118 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_collections.rst:216 #: ../../docs/tutorials/scripting/debug/overview_of_debugging_tools.rst:257 #: ../../docs/engine_details/architecture/scripting_development.rst:7 msgid "GDScript" msgstr "GDScript" #: ../../docs/about/docs_changelog.rst:284 msgid ":ref:`doc_gdscript_documentation_comments`" msgstr ":ref:`doc_gdscript_documentation_comments`" #: ../../docs/about/docs_changelog.rst:287 msgid "New pages since version 3.2" msgstr "Các trang mới từ phiên bản 3.2" #: ../../docs/about/docs_changelog.rst:292 msgid ":ref:`doc_3d_rendering_limitations`" msgstr ":ref:`doc_3d_rendering_limitations`" #: ../../docs/about/docs_changelog.rst:297 msgid ":ref:`doc_troubleshooting`" msgstr ":ref:`doc_troubleshooting`" #: ../../docs/about/docs_changelog.rst:298 msgid ":ref:`doc_list_of_features`" msgstr ":ref:`doc_list_of_features`" #: ../../docs/about/docs_changelog.rst:299 msgid ":ref:`doc_release_policy`" msgstr ":ref:`doc_release_policy`" #: ../../docs/about/docs_changelog.rst:302 #: ../../docs/tutorials/best_practices/index.rst:4 #: ../../docs/tutorials/assets_pipeline/importing_images.rst:551 #: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:275 #: ../../docs/tutorials/audio/text_to_speech.rst:94 msgid "Best practices" msgstr "Các phương pháp hay nhất" #: ../../docs/about/docs_changelog.rst:304 msgid ":ref:`doc_version_control_systems`" msgstr ":ref:`doc_version_control_systems`" #: ../../docs/about/docs_changelog.rst:309 #, fuzzy msgid ":ref:`doc_common_engine_methods_and_macros_error_macros`" msgstr ":ref:`doc_common_engine_methods_and_macros`" #: ../../docs/about/docs_changelog.rst:310 msgid ":ref:`doc_vulkan_validation_layers`" msgstr ":ref:`doc_vulkan_validation_layers`" #: ../../docs/about/docs_changelog.rst:311 msgid ":ref:`doc_gdscript_grammar`" msgstr ":ref:`doc_gdscript_grammar`" #: ../../docs/about/docs_changelog.rst:312 msgid "Configuring an IDE: :ref:`doc_configuring_an_ide_code_blocks`" msgstr "Cấu hình một IDE: :ref:`doc_configuring_an_ide_code_blocks`" #: ../../docs/about/docs_changelog.rst:317 msgid ":ref:`doc_default_key_mapping`" msgstr ":ref:`doc_default_key_mapping`" #: ../../docs/about/docs_changelog.rst:318 msgid ":ref:`doc_using_the_web_editor`" msgstr ":ref:`doc_using_the_web_editor`" #: ../../docs/about/docs_changelog.rst:321 #: ../../docs/tutorials/export/index.rst:6 msgid "Export" msgstr "Xuất bản" #: ../../docs/about/docs_changelog.rst:323 msgid ":ref:`doc_exporting_for_dedicated_servers`" msgstr ":ref:`doc_exporting_for_dedicated_servers`" #: ../../docs/about/docs_changelog.rst:328 msgid ":ref:`doc_controllers_gamepads_joysticks`" msgstr ":ref:`doc_controllers_gamepads_joysticks`" #: ../../docs/about/docs_changelog.rst:331 #: ../../docs/about/docs_changelog.rst:387 #: ../../docs/tutorials/math/index.rst:4 msgid "Math" msgstr "Toán" #: ../../docs/about/docs_changelog.rst:333 msgid ":ref:`doc_random_number_generation`" msgstr ":ref:`doc_random_number_generation`" #: ../../docs/about/docs_changelog.rst:338 msgid ":ref:`doc_plugins_for_ios`" msgstr ":ref:`doc_plugins_for_ios`" #: ../../docs/about/docs_changelog.rst:339 msgid ":ref:`doc_ios_plugin`" msgstr ":ref:`doc_ios_plugin`" #: ../../docs/about/docs_changelog.rst:340 msgid ":ref:`doc_html5_shell_classref`" msgstr ":ref:`doc_html5_shell_classref`" #: ../../docs/about/docs_changelog.rst:345 msgid ":ref:`doc_collision_shapes_2d`" msgstr ":ref:`doc_collision_shapes_2d`" #: ../../docs/about/docs_changelog.rst:346 msgid ":ref:`doc_collision_shapes_3d`" msgstr ":ref:`doc_collision_shapes_3d`" #: ../../docs/about/docs_changelog.rst:351 msgid ":ref:`doc_shaders_style_guide`" msgstr ":ref:`doc_shaders_style_guide`" #: ../../docs/about/docs_changelog.rst:356 msgid ":ref:`doc_debugger_panel`" msgstr ":ref:`doc_debugger_panel`" #: ../../docs/about/docs_changelog.rst:357 msgid ":ref:`doc_creating_script_templates`" msgstr ":ref:`doc_creating_script_templates`" #: ../../docs/about/docs_changelog.rst:358 msgid ":ref:`doc_evaluating_expressions`" msgstr ":ref:`doc_evaluating_expressions`" #: ../../docs/about/docs_changelog.rst:359 msgid ":ref:`doc_what_is_gdextension`" msgstr ":ref:`doc_what_is_gdextension`" #: ../../docs/about/docs_changelog.rst:360 msgid "" ":ref:`doc_gdscript_warning_system` (split " "from :ref:`doc_gdscript_static_typing`)" msgstr "" ":ref:`doc_gdscript_warning_system` (split " "from :ref:`doc_gdscript_static_typing`)" #: ../../docs/about/docs_changelog.rst:363 msgid "User Interface (UI)" msgstr "User Interface (UI)" #: ../../docs/about/docs_changelog.rst:365 msgid ":ref:`doc_control_node_gallery`" msgstr ":ref:`doc_control_node_gallery`" #: ../../docs/about/docs_changelog.rst:368 msgid "New pages since version 3.1" msgstr "Các trang mới từ phiên bản 3.1" #: ../../docs/about/docs_changelog.rst:371 #: ../../docs/about/docs_changelog.rst:465 msgid "Project workflow" msgstr "Quy trình dự án" #: ../../docs/about/docs_changelog.rst:373 msgid ":ref:`doc_android_gradle_build`" msgstr ":ref:`doc_android_gradle_build`" #: ../../docs/about/docs_changelog.rst:378 msgid ":ref:`doc_2d_sprite_animation`" msgstr ":ref:`doc_2d_sprite_animation`" #: ../../docs/about/docs_changelog.rst:383 msgid ":ref:`doc_recording_with_microphone`" msgstr ":ref:`doc_recording_with_microphone`" #: ../../docs/about/docs_changelog.rst:384 msgid ":ref:`doc_sync_with_audio`" msgstr ":ref:`doc_sync_with_audio`" #: ../../docs/about/docs_changelog.rst:389 msgid ":ref:`doc_beziers_and_curves`" msgstr ":ref:`doc_beziers_and_curves`" #: ../../docs/about/docs_changelog.rst:390 msgid ":ref:`doc_interpolation`" msgstr ":ref:`doc_interpolation`" #: ../../docs/about/docs_changelog.rst:393 msgid "Inputs" msgstr "Các Input" #: ../../docs/about/docs_changelog.rst:395 msgid ":ref:`doc_input_examples`" msgstr ":ref:`doc_input_examples`" #: ../../docs/about/docs_changelog.rst:400 msgid ":ref:`doc_localization_using_gettext`" msgstr ":ref:`doc_localization_using_gettext`" #: ../../docs/about/docs_changelog.rst:403 #: ../../docs/about/docs_changelog.rst:517 #: ../../docs/tutorials/3d/standard_material_3d.rst:255 msgid "Shading" msgstr "Shading" #: ../../docs/about/docs_changelog.rst:405 msgid "Your First Shader Series:" msgstr "Chuỗi bài về Shader đầu tiên của bạn:" #: ../../docs/about/docs_changelog.rst:406 #: ../../docs/about/docs_changelog.rst:524 msgid ":ref:`doc_introduction_to_shaders`" msgstr ":ref:`doc_introduction_to_shaders`" #: ../../docs/about/docs_changelog.rst:407 msgid ":ref:`doc_your_first_canvasitem_shader`" msgstr ":ref:`doc_your_first_canvasitem_shader`" #: ../../docs/about/docs_changelog.rst:408 msgid ":ref:`doc_your_first_spatial_shader`" msgstr ":ref:`doc_your_first_spatial_shader`" #: ../../docs/about/docs_changelog.rst:409 msgid ":ref:`doc_your_second_spatial_shader`" msgstr ":ref:`doc_your_second_spatial_shader`" #: ../../docs/about/docs_changelog.rst:410 msgid ":ref:`doc_visual_shaders`" msgstr ":ref:`doc_visual_shaders`" #: ../../docs/about/docs_changelog.rst:415 msgid ":ref:`doc_webrtc`" msgstr ":ref:`doc_webrtc`" #: ../../docs/about/docs_changelog.rst:418 #: ../../docs/about/docs_changelog.rst:531 #: ../../docs/tutorials/plugins/index.rst:4 msgid "Plugins" msgstr "Các Plugin" #: ../../docs/about/docs_changelog.rst:420 msgid ":ref:`doc_android_plugin`" msgstr ":ref:`doc_android_plugin`" #: ../../docs/about/docs_changelog.rst:421 msgid ":ref:`doc_inspector_plugins`" msgstr ":ref:`doc_inspector_plugins`" #: ../../docs/about/docs_changelog.rst:422 msgid ":ref:`doc_visual_shader_plugins`" msgstr ":ref:`doc_visual_shader_plugins`" #: ../../docs/about/docs_changelog.rst:425 #: ../../docs/about/docs_changelog.rst:542 msgid "Multi-threading" msgstr "Đa tuyến" #: ../../docs/about/docs_changelog.rst:427 msgid ":ref:`doc_using_multiple_threads`" msgstr ":ref:`doc_using_multiple_threads`" #: ../../docs/about/docs_changelog.rst:430 #: ../../docs/about/docs_changelog.rst:547 msgid "Creating content" msgstr "Tạo nội dung" #: ../../docs/about/docs_changelog.rst:432 msgid "Procedural geometry series:" msgstr "Chuỗi bài về Sinh hình học bằng code:" #: ../../docs/about/docs_changelog.rst:433 msgid ":ref:`Procedural geometry `" msgstr ":ref:`Procedural geometry `" #: ../../docs/about/docs_changelog.rst:434 msgid ":ref:`doc_arraymesh`" msgstr ":ref:`doc_arraymesh`" #: ../../docs/about/docs_changelog.rst:435 msgid ":ref:`doc_surfacetool`" msgstr ":ref:`doc_surfacetool`" #: ../../docs/about/docs_changelog.rst:436 msgid ":ref:`doc_meshdatatool`" msgstr ":ref:`doc_meshdatatool`" #: ../../docs/about/docs_changelog.rst:437 msgid ":ref:`doc_immediatemesh`" msgstr ":ref:`doc_immediatemesh`" #: ../../docs/about/docs_changelog.rst:440 ../../docs/tutorials/3d/index.rst:37 msgid "Optimization" msgstr "Tối ưu hóa" #: ../../docs/about/docs_changelog.rst:442 msgid ":ref:`doc_using_multimesh`" msgstr ":ref:`doc_using_multimesh`" #: ../../docs/about/docs_changelog.rst:443 msgid ":ref:`doc_using_servers`" msgstr ":ref:`doc_using_servers`" #: ../../docs/about/docs_changelog.rst:446 msgid "Legal" msgstr "Pháp lý" #: ../../docs/about/docs_changelog.rst:448 msgid ":ref:`doc_complying_with_licenses`" msgstr ":ref:`doc_complying_with_licenses`" #: ../../docs/about/docs_changelog.rst:451 msgid "New pages since version 3.0" msgstr "Các trang mới từ phiên bản 3.0" #: ../../docs/about/docs_changelog.rst:454 #: ../../docs/getting_started/step_by_step/index.rst:6 #: ../../docs/engine_details/development/compiling/compiling_with_script_encryption_key.rst:26 msgid "Step by step" msgstr "Hướng dẫn từng bước" #: ../../docs/about/docs_changelog.rst:456 msgid ":ref:`doc_signals`" msgstr ":ref:`doc_signals`" #: ../../docs/about/docs_changelog.rst:457 #: ../../docs/tutorials/editor/command_line_tutorial.rst:443 msgid "Exporting" msgstr "Xuất bản" #: ../../docs/about/docs_changelog.rst:462 msgid ":ref:`doc_gdscript_static_typing`" msgstr ":ref:`doc_gdscript_static_typing`" #: ../../docs/about/docs_changelog.rst:467 msgid "Best Practices:" msgstr "Các phương pháp hay nhất:" #: ../../docs/about/docs_changelog.rst:469 msgid ":ref:`doc_introduction_best_practices`" msgstr ":ref:`doc_introduction_best_practices`" #: ../../docs/about/docs_changelog.rst:470 msgid ":ref:`doc_what_are_godot_classes`" msgstr ":ref:`doc_what_are_godot_classes`" #: ../../docs/about/docs_changelog.rst:471 msgid ":ref:`doc_scene_organization`" msgstr ":ref:`doc_scene_organization`" #: ../../docs/about/docs_changelog.rst:472 msgid ":ref:`doc_scenes_versus_scripts`" msgstr ":ref:`doc_scenes_versus_scripts`" #: ../../docs/about/docs_changelog.rst:473 msgid ":ref:`doc_autoloads_versus_internal_nodes`" msgstr ":ref:`doc_autoloads_versus_internal_nodes`" #: ../../docs/about/docs_changelog.rst:474 msgid ":ref:`doc_node_alternatives`" msgstr ":ref:`doc_node_alternatives`" #: ../../docs/about/docs_changelog.rst:475 msgid ":ref:`doc_godot_interfaces`" msgstr ":ref:`doc_godot_interfaces`" #: ../../docs/about/docs_changelog.rst:476 msgid ":ref:`doc_godot_notifications`" msgstr ":ref:`doc_godot_notifications`" #: ../../docs/about/docs_changelog.rst:477 msgid ":ref:`doc_data_preferences`" msgstr ":ref:`doc_data_preferences`" #: ../../docs/about/docs_changelog.rst:478 msgid ":ref:`doc_logic_preferences`" msgstr ":ref:`doc_logic_preferences`" #: ../../docs/about/docs_changelog.rst:483 msgid ":ref:`doc_2d_lights_and_shadows`" msgstr ":ref:`doc_2d_lights_and_shadows`" #: ../../docs/about/docs_changelog.rst:484 msgid ":ref:`doc_2d_meshes`" msgstr ":ref:`doc_2d_meshes`" #: ../../docs/about/docs_changelog.rst:489 msgid ":ref:`doc_csg_tools`" msgstr ":ref:`doc_csg_tools`" #: ../../docs/about/docs_changelog.rst:490 msgid ":ref:`doc_animating_thousands_of_fish`" msgstr ":ref:`doc_animating_thousands_of_fish`" #: ../../docs/about/docs_changelog.rst:491 msgid ":ref:`doc_controlling_thousands_of_fish`" msgstr ":ref:`doc_controlling_thousands_of_fish`" #: ../../docs/about/docs_changelog.rst:496 msgid ":ref:`doc_ragdoll_system`" msgstr ":ref:`doc_ragdoll_system`" #: ../../docs/about/docs_changelog.rst:497 msgid ":ref:`doc_soft_body`" msgstr ":ref:`doc_soft_body`" #: ../../docs/about/docs_changelog.rst:502 msgid ":ref:`doc_2d_skeletons`" msgstr ":ref:`doc_2d_skeletons`" #: ../../docs/about/docs_changelog.rst:503 msgid ":ref:`doc_animation_tree`" msgstr ":ref:`doc_animation_tree`" #: ../../docs/about/docs_changelog.rst:506 msgid "GUI" msgstr "GUI" #: ../../docs/about/docs_changelog.rst:508 msgid ":ref:`doc_gui_containers`" msgstr ":ref:`doc_gui_containers`" #: ../../docs/about/docs_changelog.rst:511 msgid "Viewports" msgstr "Các Viewport" #: ../../docs/about/docs_changelog.rst:513 msgid ":ref:`doc_viewport_as_texture`" msgstr ":ref:`doc_viewport_as_texture`" #: ../../docs/about/docs_changelog.rst:514 msgid ":ref:`doc_custom_postprocessing`" msgstr ":ref:`doc_custom_postprocessing`" #: ../../docs/about/docs_changelog.rst:519 msgid ":ref:`doc_converting_glsl_to_godot_shaders`" msgstr ":ref:`doc_converting_glsl_to_godot_shaders`" #: ../../docs/about/docs_changelog.rst:520 msgid ":ref:`doc_advanced_postprocessing`" msgstr ":ref:`doc_advanced_postprocessing`" #: ../../docs/about/docs_changelog.rst:522 msgid "Shading Reference:" msgstr "Shading Reference:" #: ../../docs/about/docs_changelog.rst:525 msgid ":ref:`doc_shading_language`" msgstr ":ref:`doc_shading_language`" #: ../../docs/about/docs_changelog.rst:526 msgid ":ref:`doc_spatial_shader`" msgstr ":ref:`doc_spatial_shader`" #: ../../docs/about/docs_changelog.rst:527 msgid ":ref:`doc_canvas_item_shader`" msgstr ":ref:`doc_canvas_item_shader`" #: ../../docs/about/docs_changelog.rst:528 msgid ":ref:`doc_particle_shader`" msgstr ":ref:`doc_particle_shader`" #: ../../docs/about/docs_changelog.rst:533 msgid ":ref:`doc_making_main_screen_plugins`" msgstr ":ref:`doc_making_main_screen_plugins`" #: ../../docs/about/docs_changelog.rst:534 msgid ":ref:`doc_3d_gizmo_plugins`" msgstr ":ref:`doc_3d_gizmo_plugins`" #: ../../docs/about/docs_changelog.rst:539 msgid ":ref:`doc_customizing_html5_shell`" msgstr ":ref:`doc_customizing_html5_shell`" #: ../../docs/about/docs_changelog.rst:544 msgid ":ref:`doc_thread_safe_apis`" msgstr ":ref:`doc_thread_safe_apis`" #: ../../docs/about/docs_changelog.rst:549 msgid ":ref:`doc_making_trees`" msgstr ":ref:`doc_making_trees`" #: ../../docs/about/docs_changelog.rst:554 msgid ":ref:`doc_jitter_stutter`" msgstr ":ref:`doc_jitter_stutter`" #: ../../docs/about/docs_changelog.rst:555 msgid ":ref:`doc_running_code_in_the_editor`" msgstr ":ref:`doc_running_code_in_the_editor`" #: ../../docs/about/docs_changelog.rst:556 msgid ":ref:`doc_change_scenes_manually`" msgstr ":ref:`doc_change_scenes_manually`" #: ../../docs/about/docs_changelog.rst:559 #: ../../docs/tutorials/scripting/cpp/build_system/cmake.rst:203 #: ../../docs/engine_details/development/compiling/compiling_for_windows.rst:116 #: ../../docs/engine_details/development/compiling/compiling_for_linuxbsd.rst:248 #: ../../docs/engine_details/development/compiling/compiling_for_macos.rst:52 #: ../../docs/engine_details/development/compiling/compiling_for_ios.rst:51 msgid "Compiling" msgstr "Biên dịch" #: ../../docs/about/docs_changelog.rst:561 msgid ":ref:`doc_optimizing_for_size`" msgstr ":ref:`doc_optimizing_for_size`" #: ../../docs/about/docs_changelog.rst:562 msgid ":ref:`doc_compiling_with_script_encryption_key`" msgstr ":ref:`doc_compiling_with_script_encryption_key`" #: ../../docs/about/docs_changelog.rst:565 #: ../../docs/engine_details/development/index.rst:6 msgid "Engine development" msgstr "Phát triển Engine" #: ../../docs/about/docs_changelog.rst:567 msgid ":ref:`doc_binding_to_external_libraries`" msgstr ":ref:`doc_binding_to_external_libraries`" #: ../../docs/getting_started/introduction/index.rst:12 msgid "" "This series will introduce you to Godot and give you an overview of its " "features." msgstr "" "Loạt bài này giới thiệu Godot và cung cấp cái tình tổng quan về các tính " "năng của nó." #: ../../docs/getting_started/introduction/index.rst:15 msgid "" "In the following pages, you will get answers to questions such as \"Is Godot " "for me?\" or \"What can I do with Godot?\". We will then introduce the " "engine's most essential concepts, run you through the editor's interface, " "and give you tips to make the most of your time learning it." msgstr "" "Trong những trang dưới đây, bạn sẽ tìm thấy câu trả lời cho những câu hỏi " "như \"Liệu Godot có dành cho tôi?\" hoặc \"Tôi có thể làm gì với Godot?\". " "Sau đó chúng tôi sẽ giới thiệu những khái niệm căn bản nhất, giới thiệu bạn " "giao diện của Editor, và gợi ý bạn những mẹo để học một cách nhanh nhất." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:4 msgid "Introduction to Godot" msgstr "Giới thiệu về Godot" #: ../../docs/getting_started/introduction/introduction_to_godot.rst:6 msgid "" "This article is here to help you figure out whether Godot might be a good " "fit for you. We will introduce some broad features of the engine to give you " "a feel for what you can achieve with it and answer questions such as \"what " "do I need to know to get started?\"." msgstr "" "Bài viết này nhằm giúp bạn xác định xem Godot có phù hợp với mình hay không. " "Chúng tôi sẽ giới thiệu một vài tính năng tổng thể của engine để bạn mường " "tượng những gì mình có thể làm với nó và trả lời các câu hỏi như \"Để bắt " "đầu tôi cần biết gì\"." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:11 msgid "" "This is by no means an exhaustive overview. We will introduce many more " "features in this getting started series." msgstr "" "Đây chỉ là bài giới thiệu sơ lược. Chúng tôi sẽ giới thiệu đầy đủ hơn trong " "các bài sau." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:15 msgid "What is Godot?" msgstr "Godot là gì?" #: ../../docs/getting_started/introduction/introduction_to_godot.rst:17 msgid "" "Godot is a general-purpose 2D and 3D game engine designed to support all " "sorts of projects. You can use it to create games or applications you can " "then release on desktop or mobile, as well as on the web." msgstr "" "Godot là một game engine 2D và 3D, mục đích tổng quát, phù hợp với mọi loại " "dự án. Bạn có thể dùng nó để tạo game hoặc app, rồi phát hành lên desktop, " "mobile cũng như web." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:21 msgid "" "You can also create console games with it, although you either need strong " "programming skills or a developer to port the game for you." msgstr "" "Bạn cũng có dùng nó để tạo các game cho console, tuy nhiên bạn cần có kỹ " "năng lập trình thượng thừa hoặc là nhờ ai đó port game dùm bạn." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:24 msgid "" "The Godot team can't provide an open source console export due to the " "licensing terms imposed by console manufacturers. Regardless of the engine " "you use, though, releasing games on consoles is always a lot of work. You " "can read more on that here: :ref:`doc_consoles`." msgstr "" "Đội ngũ phát triển Godot không thể cung cấp khả năng export nguồn mở cho " "console vì các điều kiện cấp phép do nhà sản xuất console áp đặt. Bất kể bạn " "xài engine nào thì việc xuất bản game cho console cũng luôn đòi hỏi rất " "nhiều công sức. Bạn có thể đọc thêm ở đây: :ref:`doc_consoles`." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:30 msgid "What can the engine do?" msgstr "Engine có thể làm gì?" #: ../../docs/getting_started/introduction/introduction_to_godot.rst:32 msgid "" "Godot was initially developed in-house by an Argentinian game studio. Its " "development started in 2001, and the engine was rewritten and improved " "tremendously since its open source release in 2014." msgstr "" "Godot ban đầu được phát triển nội bộ bởi một game studio ở Argentina. Quá " "trình phát triển bắt đầu vào năm 2001, phát hành nguồn mở năm 2014, và kể từ " "đó engine đã được sửa đổi và cải tiến rất nhiều." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:36 msgid "" "Some examples of games created with Godot include Cassette Beasts, PVKK, and " "Usagi Shima. As for applications, the open source pixel art drawing program " "Pixelorama is powered by Godot, and so is the voxel RPG creator RPG in a " "Box. You can find many more examples in the `Official Showcase `_." msgstr "" #: ../../docs/getting_started/introduction/introduction_to_godot.rst:45 msgid "Usagi Shima" msgstr "" #: ../../docs/getting_started/introduction/introduction_to_godot.rst:50 msgid "Cassette Beasts" msgstr "" #: ../../docs/getting_started/introduction/introduction_to_godot.rst:55 msgid "PVKK: Planetenverteidigungskanonenkommandant" msgstr "" #: ../../docs/getting_started/introduction/introduction_to_godot.rst:60 msgid "RPG in a Box" msgstr "" #: ../../docs/getting_started/introduction/introduction_to_godot.rst:63 msgid "How does it work and look?" msgstr "Nó hoạt động thế nào và trông ra sao?" #: ../../docs/getting_started/introduction/introduction_to_godot.rst:65 msgid "" "Godot comes with a fully-fledged game editor with integrated tools to answer " "the most common needs. It includes a code editor, an animation editor, a " "tilemap editor, a shader editor, a debugger, a profiler, and more." msgstr "" "Godot đi kèm một editor hoàn chỉnh với các công cụ được tích hợp sẵn nhằm " "đáp ứng gần như mọi nhu cầu. Nó bao gồm trình gõ code, trình chỉnh " "animation, trình chỉnh tilemap, trình chỉnh shader, trình gỡ lỗi, profiler, " "v.v..." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:71 msgid "" "The team strives to offer a feature-rich game editor with a consistent user " "experience. While there is always room for improvement, the user interface " "keeps getting refined." msgstr "" "Đội ngũ luôn phấn đấu cung cấp một editor giàu tính năng với trải ngiệm " "người dùng nhất quán. Dù vẫn còn nhiều chỗ cần được cải thiện, giao diện " "người dùng gần như đã đạt độ chín muồi." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:75 msgid "" "Of course, if you prefer, you can work with external programs. We officially " "support importing 3D scenes designed in Blender_ and maintain plugins to " "code in VSCode_ and Emacs_ for GDScript and C#. We also support Visual " "Studio for C# on Windows." msgstr "" "Tất nhiên là bạn cũng có thể làm việc với các chương trình bên ngoài nếu " "muốn. Chúng tôi chính thức hỗ trợ import các scene từ Blender_ và duy trì " "các plugin trong VSCode_, Emacs_ cho GDScript và C#. Chúng tôi cũng hỗ trợ " "Visual Studio cho C# trên Windows." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:83 #: ../../docs/tutorials/scripting/index.rst:-1 msgid "Programming languages" msgstr "Các ngôn ngữ lập trình" #: ../../docs/getting_started/introduction/introduction_to_godot.rst:85 msgid "Let's talk about the available programming languages." msgstr "Giờ hãy nói về các ngôn ngữ lập trình được hỗ trợ." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:87 #, fuzzy msgid "" "You can code your games using :ref:`GDScript `, a Godot-" "specific and tightly integrated language with a lightweight syntax, " "or :ref:`C# `, which is popular in the games industry. These " "are the two main scripting languages we support." msgstr "" "Bạn có thể code game của mình bằng :ref:`GDScript `, một ngôn ngữ tích hợp chặt chẽ và dành riêng cho Godot với cú " "pháp nhẹ nhàng, hoặc :ref:`C# `, rất phổ biến trong " "ngành game. Đây là hai ngôn ngữ chính mà chúng tôi hỗ trợ." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:92 #, fuzzy msgid "" "With the :ref:`GDExtension ` technology, you can " "also write gameplay or high-performance algorithms in :ref:`C++ " "` or :ref:`other languages ` without " "recompiling the engine. You can use this technology to integrate third-party " "libraries and other Software Development Kits (SDK) in the engine." msgstr "" "Với công nghệ GDExtension, bạn có thể viết gameplay hoặc các thuật toán hiệu " "năng cao bằng C hoặc C++ mà không cần phải biên dịch lại engine. Bạn có thể " "sử dụng công nghệ này để tích hợp các thư viện bên thứ ba hoặc " "các :abbr:`SDK (Software Development Kit)` khác vào engine." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:98 msgid "" "Of course, you can also directly add modules and features to the engine, as " "it's completely free and open source." msgstr "" "Dĩ nhiên, bạn có thể trực tiếp thêm các module và tính năng vào engine, vì " "nó hoàn toàn tự do và mã nguồn mở." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:104 msgid "What do I need to know to use Godot?" msgstr "Điều kiện tiên quyết để sử dụng Godot?" #: ../../docs/getting_started/introduction/introduction_to_godot.rst:106 msgid "" "Godot is a feature-packed game engine. With its thousands of features, there " "is a lot to learn. To make the most of it, you need good programming " "foundations. While we try to make the engine accessible, you will benefit a " "lot from knowing how to think like a programmer first." msgstr "" "Godot là một game engine giàu tính năng. Với vô vàn tính năng như thế, có " "rất nhiều điều để tìm hiểu. Để khai thác tối đa nó, bạn cần nền tảng lập " "trình vững chắc. Tuy chúng tôi cố gắng hết sức để làm cho engine này dễ xài " "nhất có thể, trước tiên bạn phải học cách suy nghĩ như một lập trình viên " "trước đã thì mới thành tựu nó được." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:111 msgid "" "Godot relies on the object-oriented programming paradigm. Being comfortable " "with concepts such as classes and objects will help you code efficiently in " "it." msgstr "" "Godot dựa trên mô hình lập trình hướng đối tượng. Thành thạo các khái niệm " "về class và object sẽ giúp bạn code một cách hiệu quả." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:114 msgid "" "If you are entirely new to programming, GDQuest's *Learn GDScript From Zero* " "is a free and open source interactive tutorial for absolute beginners to " "learn to program with Godot's GDScript language. It is available as a " "`desktop application `__ or " "`in the browser `__." msgstr "" #: ../../docs/getting_started/introduction/introduction_to_godot.rst:120 msgid "" "We will provide you with more Godot-specific learning resources " "in :ref:`doc_learning_new_features`." msgstr "" "Chúng tôi còn cung cấp cho bạn nhiều học liệu dành riêng cho Godot khác " "trong :ref:`doc_learning_new_features`." #: ../../docs/getting_started/introduction/introduction_to_godot.rst:123 #: ../../docs/getting_started/introduction/learn_to_code_with_gdscript.rst:33 msgid "" "In the next part, you will get an overview of the engine's essential " "concepts." msgstr "" "Trong phần tiếp theo, bạn sẽ tìm hiểu về các khái niệm cơ bản của engine." #: ../../docs/getting_started/introduction/learn_to_code_with_gdscript.rst:4 msgid "Learn to code with GDScript" msgstr "Học code với GDScript" #: ../../docs/getting_started/introduction/learn_to_code_with_gdscript.rst:6 msgid "" "In Godot, you can write code using the GDScript and C# programming languages." msgstr "" "Trong Godot, bạn có thể viết code sử dụng ngôn ngữ lập trình GDScript hoặc " "C#." #: ../../docs/getting_started/introduction/learn_to_code_with_gdscript.rst:8 msgid "" "If you are new to programming, we recommend starting with GDScript because " "we designed it to be simpler than all-purpose languages like C#. It will be " "both faster and easier to learn." msgstr "" "Nếu bạn mới bắt đầu với lập trình, chúng tôi khuyên nên bắt đầu với GDScript " "vì nó được thiết kế sao cho đơn giản hơn so với các ngôn ngữ lập trình tổng " "quát như C#. Học nó thì nhanh hơn và dễ hơn." #: ../../docs/getting_started/introduction/learn_to_code_with_gdscript.rst:12 msgid "" "While GDScript is a language specific to Godot, the techniques you will " "learn with it will apply to other programming languages." msgstr "" "Dù GDScript là ngôn ngữ dành riêng cho Godot, các kỹ thuật lập trình bạn học " "được với nó hoàn toàn có thể đem áp dụng vào các ngôn ngữ lập trình khác." #: ../../docs/getting_started/introduction/learn_to_code_with_gdscript.rst:15 msgid "" "Note that it is completely normal for a programmer to learn and use multiple " "languages. Programming languages have more similarities than differences, so " "once you know one, you can learn another much faster." msgstr "" "Lưu ý rằng một lập trình viên biết nhiều ngôn ngữ là chuyện bình thường. Các " "ngôn ngữ lập trình rất giống nhau, bạn biết một ngôn ngữ rồi thì học cái thứ " "hai rất nhanh." #: ../../docs/getting_started/introduction/learn_to_code_with_gdscript.rst:20 msgid "Learn in your browser with the GDScript app" msgstr "Học bằng trình duyệt của bạn với ứng dụng GDScript" #: ../../docs/getting_started/introduction/learn_to_code_with_gdscript.rst:22 msgid "" "To learn GDScript, you can use the app Learn GDScript From Zero. It is a " "complete beginner course with interactive practices you can do right in your " "browser." msgstr "" "Để học GDScript, bạn có thể xài app GDScript From Zero. Đây là khóa học đi " "đôi với thực hành trực tiếp trên trình duyệt dành cho người hoàn toàn chưa " "biết gì." #: ../../docs/getting_started/introduction/learn_to_code_with_gdscript.rst:28 msgid "Click here to access the app: `Learn GDScript From Zero app`_" msgstr "Click vào đây để truy cập: `Learn GDScript From Zero app`_" #: ../../docs/getting_started/introduction/learn_to_code_with_gdscript.rst:30 msgid "" "This app is an open-source project. To report bugs or contribute, head to " "the app's source code repository: `GitHub repository`_." msgstr "" "App này là một dự án mã nguồn mở. Để báo cáo lỗi hoặc đóng góp, bạn hãy truy " "cập `GitHub repository`_." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:8 msgid "Overview of Godot's key concepts" msgstr "Các khái niệm chính trong Godot" #: ../../docs/getting_started/introduction/key_concepts_overview.rst:10 msgid "" "Every game engine revolves around abstractions you use to build your " "applications. In Godot, a game is a **tree** of **nodes** that you group " "together into **scenes**. You can then wire these nodes so they can " "communicate using **signals**." msgstr "" "Bạn phải có nền tảng lập trình đàng hoàng, nếu bạn không biết tree là gì thì " "đọc tới khúc này bạn điếc ngắc. Mọi game engine đều xoay quanh những khái " "niệm trừu tượng mà bạn sử dụng để xây dựng ứng dụng của mình. Trong Godot, " "các **node** được biễu diễn theo dạng **tree**, một hoặc nhiều node gom lại " "thì thành một **scene**. Các node giao tiếp lẫn nhau thông qua **signal**." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:15 msgid "" "These are the four concepts you will learn here. We're going to look at them " "briefly to give you a sense of how the engine works. In the getting started " "series, you will get to use them in practice." msgstr "" "Đó là bốn khái niệm mà chúng ta sẽ tìm hiểu. Ở đây chúng ta chỉ xem xét lý " "thuyết để bạn dễ hình dung cách engine vận hành, còn trong các bài sau, bạn " "sẽ được thực chiến." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:22 #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:40 #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:49 msgid "Scenes" msgstr "Các Scene" #: ../../docs/getting_started/introduction/key_concepts_overview.rst:24 msgid "" "In Godot, you break down your game in reusable scenes. A scene can be a " "character, a weapon, a menu in the user interface, a single house, an entire " "level, or anything you can think of. Godot's scenes are flexible; they fill " "the role of both prefabs and scenes in some other game engines." msgstr "" "Trong Godot, bạn chia nhỏ game của mình thành các scene để tái sử dụng sau " "này. Một scene có thể là một nhân vật, một vũ khí, một menu trong giao diện " "người dùng, một ngôi nhà, nguyên cái map, hoặc bất cứ thứ gì bạn có thể hình " "dung. Scene của Godot cũng linh hoạt như prefab hoặc scene trong engine khác." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:31 msgid "" "You can also nest scenes. For example, you can put your character in a " "level, and drag and drop a scene as a child of it." msgstr "" "Các scene có thể lồng ghép vào nhau. Lấy ví dụ, bạn có thể lồng thằng nhân " "vật vào bên trong một map." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:37 #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:14 #: ../../docs/tutorials/2d/2d_lights_and_shadows.rst:33 #: ../../docs/tutorials/scripting/gdscript/gdscript_exports.rst:254 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_exports.rst:306 #: ../../docs/tutorials/scripting/debug/objectdb_profiler.rst:160 #: ../../docs/engine_details/file_formats/tscn.rst:47 msgid "Nodes" msgstr "Các Node" #: ../../docs/getting_started/introduction/key_concepts_overview.rst:39 msgid "" "A scene is composed of one or more **nodes**. Nodes are your game's smallest " "building blocks that you arrange into trees. Here's an example of a " "character's nodes." msgstr "" "Một scene là tập hợp của một hoặc nhiều **node**. Node là thành phần cơ bản " "nhất trong game của bạn, chúng được biễu diễn theo dạng tree. Hình dưới đây " "minh hoạ các node của một nhân vật." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:45 msgid "" "It is made of a ``CharacterBody2D`` node named \"Player\", a ``Camera2D``, a " "``Sprite2D``, and a ``CollisionShape2D``." msgstr "" "Nhân vật trên được tạo từ node ``CharacterBody2D`` tên \"Player\", một " "``Camera2D``, một ``Sprite2D``, và một ``CollisionShape2D``." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:48 msgid "" "The node names end with \"2D\" because this is a 2D scene. Their 3D " "counterparts have names that end with \"3D\". Be aware that \"Spatial\" " "Nodes are now called \"Node3D\" starting with Godot 4." msgstr "" "Các node có tên kết thúc bằng chữ \"2D\" vì đây là một scene 2D. Tương tự, " "bên 3D thì tên node kết thúc bằng \"3D\". Lưu ý rằng kể từ Godot 4, các node " "\"Spatial\" bị đổi thành \"Node3D\"." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:52 msgid "" "Notice how nodes and scenes look the same in the editor. When you save a " "tree of nodes as a scene, it then shows as a single node, with its internal " "structure hidden in the editor." msgstr "" "Bạn có để ý rằng trong editor, các node và scene được hiển thị y như nhau? " "Khi bạn lưu một tập hợp các node thành một scene, thì scene đó sẽ được hiển " "thị như một node đơn nhất (các thành phần của nó bị ẩn đi)." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:56 msgid "" "Godot provides an extensive library of base node types you can combine and " "extend to build more powerful ones. 2D, 3D, or user interface, you will do " "most things with these nodes." msgstr "" "Godot cung cấp một thư viện đồ sộ các node cơ bản mà bạn có thể kết hợp hay " "mở rộng nhằm tạo những node mạnh mẽ hơn. 2D, 3D, hay UI, chủ yếu bạn sẽ làm " "việc với các node này." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:63 #: ../../docs/engine_details/file_formats/tscn.rst:99 msgid "The scene tree" msgstr "Scene tree" #: ../../docs/getting_started/introduction/key_concepts_overview.rst:65 msgid "" "All your game's scenes come together in the **scene tree**, literally a tree " "of scenes. And as scenes are trees of nodes, the scene tree also is a tree " "of nodes. But it's easier to think of your game in terms of scenes as they " "can represent characters, weapons, doors, or your user interface." msgstr "" "Tập các scene trong game của bạn hợp thành **scene tree**. Vì scene là tập " "của các node, nên scene tree cũng là tập của các node. Nhưng sẽ dễ dàng hơn " "khi nghĩ về game của bạn dưới dạng các scene vì chúng đại diện cho các nhân " "vật, vũ khí, cánh cửa hoặc giao diện người dùng." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:75 #: ../../docs/tutorials/scripting/gdscript/gdscript_basics.rst:2660 #: ../../docs/tutorials/scripting/gdscript/gdscript_styleguide.rst:659 #: ../../docs/tutorials/scripting/gdscript/gdscript_styleguide.rst:724 #: ../../docs/tutorials/scripting/cpp/gdextension_cpp_example.rst:545 #: ../../docs/tutorials/scripting/how_to_read_the_godot_api.rst:103 #: ../../docs/engine_details/architecture/object_class.rst:220 msgid "Signals" msgstr "Các Signal" #: ../../docs/getting_started/introduction/key_concepts_overview.rst:77 msgid "" "Nodes emit signals when some event occurs. This feature allows you to make " "nodes communicate without hard-wiring them in code. It gives you a lot of " "flexibility in how you structure your scenes." msgstr "" "Các node bắn ra signal khi có sự kiện nào đó phát sinh. Tính năng này giúp " "các node giao tiếp với nhau mà không cần phải gắn kết chúng bằng hardcode. " "Điều này mang lại cho bạn sự linh hoạt tuyệt vời khi cấu trúc các scene của " "mình." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:83 msgid "" "Signals are Godot's version of the *observer* pattern. You can read more " "about it here: https://gameprogrammingpatterns.com/observer.html" msgstr "" "Signal là phiên bản Godot của mô hình *observer*. Bạn có thể đọc thêm về nó " "ở đây: https://gameprogrammingpatterns.com/observer.html" #: ../../docs/getting_started/introduction/key_concepts_overview.rst:87 #, fuzzy msgid "" "For example, buttons emit a signal when pressed. You can connect a piece of " "code to this signal which will run in reaction to this event, like starting " "the game or opening a menu." msgstr "" "Ví dụ, các button bắn ra signal khi được nhấn. Bạn có thể kết nối tới signal " "này để chạy code phản hồi lại với sự kiện click, như bắt đầu game hoặc mở " "một menu nào đó." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:91 msgid "" "Other built-in signals can tell you when two objects collided, when a " "character or monster entered a given area, and much more. You can also " "define new signals tailored to your game." msgstr "" "Các signal tích hợp sẵn khác có thể báo cho bạn biết khi nào hai đối tượng " "va chạm nhau, khi một nhân vật hoặc quái thú đi vào một khu vực nhất định, " "v.v... Bạn cũng có thể định nghĩa các signal mới phù hợp với game của mình." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:96 #: ../../docs/getting_started/step_by_step/instancing.rst:232 #: ../../docs/getting_started/step_by_step/scripting_languages.rst:156 #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:199 #: ../../docs/getting_started/step_by_step/signals.rst:549 #: ../../docs/tutorials/2d/2d_sprite_animation.rst:279 #: ../../docs/tutorials/2d/2d_movement.rst:312 #: ../../docs/tutorials/3d/global_illumination/introduction_to_global_illumination.rst:328 #: ../../docs/tutorials/export/exporting_pcks.rst:171 #: ../../docs/tutorials/scripting/gdscript/static_typing.rst:671 msgid "Summary" msgstr "Tổng kết" #: ../../docs/getting_started/introduction/key_concepts_overview.rst:98 msgid "" "Nodes, scenes, the scene tree, and signals are four core concepts in Godot " "that you will manipulate all the time." msgstr "" "Các node, scene, scene tree và signal là bốn khái niệm trọng tâm trong Godot " "mà bạn sẽ thường xuyên làm việc cùng." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:101 msgid "" "Nodes are your game's smallest building blocks. You combine them to create " "scenes that you then combine and nest into the scene tree. You can then use " "signals to make nodes react to events in other nodes or different scene tree " "branches." msgstr "" "Các node là các đơn vị xây dựng nhỏ nhất trong game của bạn. Bạn kết hợp " "chúng để tạo các scene, rồi kết hợp và lồng ghép các scene để tạo scene " "tree. Bạn có thể dùng signal để khiến các node phản hồi với các sự kiện phát " "sinh từ các node khác hoặc từ các nhánh khác của scene tree." #: ../../docs/getting_started/introduction/key_concepts_overview.rst:105 msgid "" "After this short breakdown, you probably have many questions. Bear with us " "as you will get many answers throughout the getting started series." msgstr "" "Ngay lúc này, có lẽ bạn sẽ cảm thấy hơi ù ù cạc cạc. Xin hãy kiên nhẫn đồng " "hành tiếp với chúng tôi vì mọi thứ sẽ ngày càng sáng tỏ thông qua các loạt " "bài sau." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:10 #, fuzzy msgid "First look at Godot's interface" msgstr "Cái nhìn đầu tiên về editor của Godot" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:12 msgid "" "This page will give you a brief overview of Godot's interface. We're going " "to look at the different main screens and docks to help you situate yourself." msgstr "" "Trang này cung cấp cái nhìn tổng quan về giao diện của Godot. Chúng ta sẽ " "xem qua cửa sổ chính và các cửa sổ con để giúp bạn xác định phương hướng." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:15 #, fuzzy msgid "" "For a comprehensive breakdown of the editor's interface and how to use it, " "see the :ref:`Editor manual `." msgstr "" "Để biết thông tin toàn diện về giao diện của editor và cách sử dụng nó, hãy " "xem :ref:`Hướng dẫn xài Editor `." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:19 msgid "The Project Manager" msgstr "Project Manager" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:21 #, fuzzy msgid "" "When you launch Godot, the first window you see is the Project Manager. In " "the default tab **Projects**, you can manage existing projects, import or " "create new ones, and more." msgstr "" "Khi bạn khởi chạy Godot, Project Manager sẽ là cửa sổ đầu tiên bạn nhìn " "thấy. Trong tab mặc định **Local Projects**, bạn có thể quản lý những " "project đã tạo, import hoặc tạo project mới, v.v..." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:27 #, fuzzy msgid "" "At the top of the window, there is another tab named **Asset Library**. The " "first time you go to this tab you'll see a \"Go Online\" button. For privacy " "reasons, the Godot project manager does not access the internet by default. " "To change this click the \"Go Online\" button. You can change this option " "later in the settings." msgstr "" "Ở phía trên cùng còn một tab khác tên là \"Asset Library Projects\". Lần đầu " "bấm vô tab này bạn sẽ thấy nút \"Go Online\". Vì lý do bảo mật nên mặc định " "thì project manager sẽ không truy cập internet. Để cho phép truy cập, click " "vào nút \"Go Online\", bạn có thể đổi về lại \"offline\" trong project " "manager settings." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:32 #, fuzzy msgid "" "Once your network mode is set to \"online\", you can search for demo " "projects in the open source asset library, which includes many projects " "developed by the community:" msgstr "" "Một khi đổi sang chế độ \"online\" bạn có thể tìm kiếm các project demo " "trong thư viện asset mã nguồn mở, hầu hết chúng được phát triển bởi cộng " "đồng." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:37 msgid "" "The Project Manager's settings can be opened using the **Settings** menu:" msgstr "" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:41 msgid "" "From here, you can change the editor's language (default is the system " "language), interface theme, display scale, network mode, and also the " "directory naming convention." msgstr "" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:44 msgid "" "To learn the Project Manager's ins and outs, read :ref:`doc_project_manager`." msgstr "" "Nếu bạn muốn tìm hiểu thêm về Project Manager, hãy " "đọc :ref:`doc_project_manager`." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:49 msgid "First look at Godot's editor" msgstr "Cái nhìn đầu tiên về editor của Godot" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:51 #, fuzzy msgid "" "When you open a new or an existing project, the editor's interface appears. " "Let's look at its main areas:" msgstr "" "Khi bạn mở một project, giao diện của editor sẽ xuất hiện. Hãy cùng xem qua " "các khu vực chính của nó." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:56 msgid "" "By default, along the window's top edge, it features **main menu** on the " "left, **workspace** switching buttons in the center (active workspace is " "highlighted), and **playtest** buttons and the **Movie Maker Mode** toggle " "on the right:" msgstr "" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:62 msgid "" "Just below the workspace buttons, the opened :ref:`scenes " "` as tabs are seen. The plus (+) button " "right next to the tabs will add a new scene to the project. With the button " "on the far right, distraction-free mode can be toggled, which maximizes or " "restores the **viewport**'s size by hiding **docks** in the interface:" msgstr "" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:69 #, fuzzy msgid "" "In the center, below the scene selector is the **viewport** with its " "**toolbar** at the top, where you'll find different tools to move, scale, or " "lock the scene's nodes (currently the 3D workspace is active):" msgstr "" "Trung tâm màn hình là **viewport** cùng với **toolbar** của nó nằm trên, nơi " "bạn có thể tìm các công cụ để move, scale hoặc lock các node." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:74 #, fuzzy msgid "" "This toolbar changes based on the context and selected node. Here is the 2D " "toolbar:" msgstr "" "Toolbar sẽ thay đổi tuỳ theo ngữ cảnh và node được chọn. Đây là 2D toolbar." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:78 #, fuzzy msgid "Below is the 3D one:" msgstr "Còn đây là của 3D." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:82 msgid "" "To learn more on workspaces, " "read :ref:`doc_intro_to_the_editor_interface_five_screens`." msgstr "" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:84 msgid "" "To learn more on the 3D viewport and 3D in general, " "read :ref:`doc_introduction_to_3d`." msgstr "" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:86 msgid "" "On either side of the viewport sit the **docks**. And at the bottom of the " "window lies the **bottom panel**." msgstr "" "Hai bên cạnh viewport là các **cửa sổ con** hay các **dock**. Còn bên dưới " "là **bottom panel**." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:89 #, fuzzy msgid "" "Let's look at the docks. The **FileSystem** dock lists your project files, " "including scripts, images, audio samples, and more:" msgstr "" "Giờ hãy nhìn vào các cửa sổ con. Cửa sổ **FileSystem** liệt kê các file của " "project, bao gồm các script, hình ảnh, âm thanh, v.v..." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:94 #, fuzzy msgid "The **Scene** dock lists the active scene's nodes:" msgstr "Cửa sổ **Scene** liệt kê các node của scene hiện tại." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:98 #, fuzzy msgid "The **Inspector** allows you to edit the properties of a selected node:" msgstr "" "Cửa sổ **Inspector** cho phép bạn chỉnh sửa các thuộc tính của node đang " "được chọn." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:102 msgid "To read more on inspector, see :ref:`doc_editor_inspector_dock`." msgstr "" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:104 msgid "" "Docks can be customized. Read more " "on :ref:`doc_customizing_editor_moving_docks`." msgstr "" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:106 #, fuzzy msgid "" "The **bottom panel**, situated below the viewport, is the host for the debug " "console, the animation editor, the audio mixer, and more. They can take " "precious space, that's why they're folded by default:" msgstr "" "Cửa sổ **bottom panel**, nằm bên dưới viewport, là nơi chứa debug console, " "trình chỉnh animation, audio mixer, v.v... Các cửa sổ này có thể chiếm nhiều " "không gian, nên mặc định chúng bị thu nhỏ." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:112 #, fuzzy msgid "" "When you click on one, it expands vertically. Below, you can see the " "animation editor opened:" msgstr "" "Khi bạn click vào, nó sẽ bung ra theo chiều dọc. Trong hình bên dưới, bạn có " "thể thấy trình chỉnh animation được mở bung." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:116 msgid "" "Bottom panels can also be shown or hidden using the shortcuts defined in " "**Editor Settings > Shortcuts**, under the **Bottom Panels** category." msgstr "" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:122 #, fuzzy msgid "The five main screens" msgstr "Bốn màn hình làm việc chính" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:124 #, fuzzy msgid "" "There are five main screen buttons centered at the top of the editor: 2D, " "3D, Script, Game and Asset Library." msgstr "" "Bốn nút chọn màn hình làm việc ở chính giữa trên cùng của editor: 2D, 3D, " "Script, và AssetLib." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:127 msgid "" "You'll use the **2D screen** for all types of games. In addition to 2D " "games, the 2D screen is where you'll build your interfaces." msgstr "" "Bạn sẽ dùng màn hình **2D** cho mọi loại game, vì ngoài làm game 2D thì màn " "hình 2D còn là nơi bạn tạo UI." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:132 msgid "" "In the **3D screen**, you can work with meshes, lights, and design levels " "for 3D games." msgstr "" "Trong màn hình **3D**, bạn có thể làm việc với các mesh, ánh sáng, thiết kế " "map cho các game 3D." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:137 msgid "" "Read :ref:`doc_introduction_to_3d` for more detail about the **3D main " "screen**." msgstr "" "Hãy đọc :ref:`doc_introduction_to_3d` để biết thêm chi tiết về màn hình " "**3D**." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:140 msgid "" "The **Game screen** is where your project will appear when running it from " "the editor. You can go through your project to test it, and pause it and " "adjust it in real time. Note that this is for testing how adjustments would " "work, any changes made here are not saved when the game stops running." msgstr "" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:147 msgid "" "The **Script screen** is a complete code editor with a debugger, rich auto-" "completion, and built-in code reference." msgstr "" "Màn hình **Script** là một trình gõ code hoàn chỉnh với trình gỡ lỗi, auto-" "completion, và code reference được tích hợp sẵn." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:152 #, fuzzy msgid "" "Finally, the **Asset Library** is a library of free and open source add-ons, " "scripts, and assets to use in your projects." msgstr "" "Cuối cùng, **AssetLib** là một thư viện các add-on, script và asset tự do " "nguồn mở để sử dụng trong các project của bạn." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:157 msgid "" "You can learn more about the asset library in :ref:`doc_what_is_assetlib`." msgstr "" "Thông tin chi tiết về thư viện asset có trong :ref:`doc_what_is_assetlib`." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:163 msgid "Integrated class reference" msgstr "Tham khảo class được tích hợp sẵn" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:165 msgid "Godot comes with a built-in class reference." msgstr "Godot đi kèm với thao khảo Class được tích hợp sẵn." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:167 msgid "" "You can search for information about a class, method, property, constant, or " "signal by any one of the following methods:" msgstr "" "Bạn có thể tìm kiếm thông tin về một class, method, property, constant, hoặc " "signal bằng một trong các cách sau:" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:170 #, fuzzy msgid "" "Pressing :kbd:`F1` (or :kbd:`Opt + Space` on macOS, or :kbd:`Fn + F1` for " "laptops with a :kbd:`Fn` key) anywhere in the editor." msgstr "" "Nhấn :kbd:`F1` (hoặc :kbd:`Opt + Space` trên macOS, hoặc :kbd:`fn + F1` trên " "các laptop có phím :kbd:`fn`) bất cứ đâu trong editor." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:172 msgid "" "Clicking the \"Search Help\" button in the top-right of the Script main " "screen." msgstr "Nhấn nút \"Search Help\" nằm góc trên bên phải của màn hình Script." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:173 msgid "Clicking on the Help menu and Search Help." msgstr "Click vào menu Help rồi chọn Search Help." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:174 msgid "" ":kbd:`Ctrl + Click` (:kbd:`Cmd + Click` on macOS) on a class name, function " "name, or built-in variable in the script editor." msgstr "" "Trong trình gõ code, giữ phím :kbd:`Ctrl` rồi click chuột lên một class, " "function, hoặc biến tích hợp sẵn." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:179 msgid "" "When you do any of these, a window pops up. Type to search for any item. You " "can also use it to browse available objects and methods." msgstr "" "Bất kể dùng cách nào ở trên, thì một cửa sổ sẽ hiện lên. Tại đây bạn có thể " "tìm kiếm, duyệt qua các object và method sẵn có." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:184 msgid "" "Double-click on an item to open the corresponding page in the script main " "screen." msgstr "" "Click đúp chuột lên một item để mở nội dung tương ứng trong màn hình Script." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:188 msgid "Alternatively," msgstr "" #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:190 #, fuzzy msgid "" "Clicking while pressing the :kbd:`Ctrl` key on a class name, function name, " "or built-in variable in the script editor." msgstr "" "Trong trình gõ code, giữ phím :kbd:`Ctrl` rồi click chuột lên một class, " "function, hoặc biến tích hợp sẵn." #: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:192 msgid "" "Right-clicking on nodes and choosing **Open Documentation** or choosing " "**Lookup Symbol** for elements in script editor will directly open their " "documentation." msgstr "" #: ../../docs/getting_started/introduction/learning_new_features.rst:8 msgid "Learning new features" msgstr "Tìm hiểu các tính năng mới" #: ../../docs/getting_started/introduction/learning_new_features.rst:10 msgid "" "Godot is a feature-rich game engine. There is a lot to learn about it. This " "page explains how you can use the online manual, built-in code reference, " "and join online communities to learn new features and techniques." msgstr "" "Godot là một game engine giàu tính năng. Có vô vàn thứ để tìm hiểu về nó. " "Trang này hướng dẫn bạn cách sử dụng tài liệu online, code reference được " "tích hợp sẵn, và tham gia vào các cộng đồng trực tuyến để nghiên cứu các kỹ " "thuật và tính năng mới." #: ../../docs/getting_started/introduction/learning_new_features.rst:15 msgid "Making the most of this manual" msgstr "Tận dụng tối đa tài liệu này" #: ../../docs/getting_started/introduction/learning_new_features.rst:17 msgid "" "What you are reading now is the user manual. It documents each of the " "engine's concepts and available features. When learning a new topic, you can " "start by browsing the corresponding section of this website. The left menu " "allows you to explore broad topics while the search bar will help you find " "more specific pages. If a page exists for a given theme, it will often link " "to more related content." msgstr "" "Cái mà bạn đang đọc ở đây là tài liệu hướng dẫn. Nó bao hàm tất cả các khái " "niệm và tính năng sẵn có của engine. Nếu bạn muốn khám phá một chủ đề mới, " "bạn có thể bắt đầu bằng cách duyệt qua nội dung tương ứng trong trang web " "này. Menu bên trái liệt kê các chủ đề chung, trong khi thanh tìm kiếm giúp " "bạn tìm các trang cụ thể hơn. Một trang bất kỳ thường sẽ có liên kết đến các " "trang có nội dung liên quan khác." #: ../../docs/getting_started/introduction/learning_new_features.rst:26 msgid "" "The manual has a companion class reference that explains each Godot class's " "available functions and properties when programming. While the manual covers " "general features, concepts, and how to use the editor, the reference is all " "about using Godot's scripting API (Application Programming Interface). You " "can access it both online and offline. We recommend browsing the reference " "offline, from within the Godot editor. To do so, go to Help -> Search Help " "or press :kbd:`F1`." msgstr "" "Tài liệu hướng dẫn bao gồm thao khảo Class diễn giải các function và các " "property sẵn có cho mỗi class của Godot. Trong khi tài liệu hướng dẫn chủ " "yếu trình bày các tính năng, khái niệm và cách sử dụng editor thì thao khảo " "chuyên nói về các :abbr:`API (Application Programming Interface)` của Godot. " "Bạn có thể truy cập nó cả online lẫn offline, nhưng chúng tôi khuyến khích " "sử dụng nó offline ngay bên trong Godot editor bằng menu Help -> Search Help " "hoặc nhấn :kbd:`F1`." #: ../../docs/getting_started/introduction/learning_new_features.rst:36 msgid "" "To browse it online, head to the manual's :ref:`Class Reference " "` section." msgstr "" "Để sử dụng nó online, hãy truy cập :ref:`Tham khảo Class " "`." #: ../../docs/getting_started/introduction/learning_new_features.rst:39 msgid "A class reference's page tells you:" msgstr "Một trang tham khảo Class sẽ cho bạn biết:" #: ../../docs/getting_started/introduction/learning_new_features.rst:41 msgid "" "Where the class exists in the inheritance hierarchy. You can click the top " "links to jump to parent classes and see the properties and methods a type " "inherits." msgstr "" "Class nằm ở đâu trong cây phân cấp kế thừa. Bạn có thể click vào các đường " "link nằm trên cùng để nhảy thẳng đến các lớp cha và xem các thuộc tính và " "phương thức của nó." #: ../../docs/getting_started/introduction/learning_new_features.rst:47 msgid "A summary of the class's role and use cases." msgstr "Tóm tắt về vai trò cũng như trường hợp sử dụng của class." #: ../../docs/getting_started/introduction/learning_new_features.rst:49 msgid "" "An explanation of the class's properties, methods, signals, enums, and " "constants." msgstr "Diễn giải các thuộc tính, phương thức, signal, enum và các hằng số." #: ../../docs/getting_started/introduction/learning_new_features.rst:52 msgid "Links to manual pages further detailing the class." msgstr "Đường link tới học liệu có liên quan trong tài liệu hướng dẫn." #: ../../docs/getting_started/introduction/learning_new_features.rst:54 msgid "" "If the manual or class reference is missing or has insufficient information, " "please open an Issue in the official `godot-docs `_ GitHub repository to report it." msgstr "" "Nếu thông tin trong tài liệu hướng dẫn hoặc tham khảo bị thiếu hoặc không " "đầy đủ, vui lòng mở một Issue trên GitHub repository chính thức `godot-docs " "`_ để báo cáo sự cố." #: ../../docs/getting_started/introduction/learning_new_features.rst:59 msgid "" "You can hold :kbd:`Ctrl` (macOS :kbd:`Cmd`) and then mouseover text like the " "name of a class, property, method, signal, or constant to underline it, " "then :kbd:`Ctrl + Click` (macOS :kbd:`Cmd + Click`) it to jump to it." msgstr "" "Bạn có thể Ctrl-click (Cmd-click trên MacOS) bất kỳ văn bản được gạch chân " "nào như tên của một class, thuộc tính, phương thức, signal, hoặc hằng để mở " "nó." #: ../../docs/getting_started/introduction/learning_new_features.rst:63 msgid "Learning to think like a programmer" msgstr "Học cách tư duy như một lập trình viên" #: ../../docs/getting_started/introduction/learning_new_features.rst:65 msgid "" "Teaching programming foundations and how to think like a game developer is " "beyond the scope of Godot's documentation. If you're new to programming, we " "recommend two excellent free resources to get you started:" msgstr "" "Việc dạy nền tảng lập trình và cách tư duy như một nhà phát triển game vượt " "ngoài phạm vi của tài liệu này. Nếu bạn chưa biết gì về lập trình, chúng tôi " "khuyến nghị hai học liệu miễn phí vô cùng xuất sắc để bạn bắt đầu:" #: ../../docs/getting_started/introduction/learning_new_features.rst:69 msgid "" "GDQuest's *Learn GDScript From Zero* is a free and open source interactive " "tutorial for absolute beginners to learn to program with Godot's GDScript " "language. It is available as a `desktop application `__ or `in the browser `__." msgstr "" #: ../../docs/getting_started/introduction/learning_new_features.rst:75 msgid "" "If you prefer books, check out the free ebook `Automate The Boring Stuff " "With Python `_ by Al Sweigart." msgstr "" "Nếu bạn thích đọc sách hơn, hãy xem qua ebook miễn phí `Automate The Boring " "Stuff With Python `_ của Al Sweigart." #: ../../docs/getting_started/introduction/learning_new_features.rst:79 msgid "Learning with the community" msgstr "Học cùng cộng đồng" #: ../../docs/getting_started/introduction/learning_new_features.rst:81 msgid "" "Godot has a growing community of users. If you're stuck on a problem or need " "help to better understand how to achieve something, you can ask other users " "for help on one of the many `active communities `_." msgstr "" "Godot có một cộng đồng với lượng thành viên ngày càng tăng. Nếu bạn đang bị " "vướng mắc hoặc cần tìm hiểu kỹ hơn về một chủ đề nào đó, bạn có thể nhờ " "những thành viên khác trợ giúp tại một trong `những cộng đồng tích cực " "`_." #: ../../docs/getting_started/introduction/learning_new_features.rst:86 #, fuzzy msgid "" "The best place to ask questions and find already answered ones is the " "official `Godot Forum `_. These responses " "show up in search engine results and get saved, allowing other users to " "benefit from discussions on the platform. Once you have asked a question " "there, you can share its link on other social platforms. Before asking a " "question, be sure to look for existing answers that might solve your problem " "on this website or using your preferred search engine." msgstr "" "Nơi tốt nhất để hỏi hoặc tìm những câu hỏi đã được trả lời là trang `Hỏi và " "Đáp `_ chính thức. Những câu trả lời này xuất " "hiện trong kết quả của công cụ tìm kiếm và được giữ lại để những người dùng " "khác được lợi lạc từ các cuộc thảo luận trên nền tảng này. Khi bạn đặt câu " "hỏi trên đó, bạn có thể chia sẻ đường link tới các nền tảng xã hội khác. " "Trước khi bạn hỏi, vui lòng check kỹ xem đã có ai hỏi câu đó chưa, và vấn đề " "đó đã được giải quyết chưa." #: ../../docs/getting_started/introduction/learning_new_features.rst:94 msgid "" "Asking questions well and providing details will help others answer you " "faster and better. When asking questions, we recommend including the " "following information:" msgstr "" "Đặt câu hỏi một cách chuẩn chỉ và chi tiết sẽ giúp những thành viên khác trả " "lời bạn nhanh hơn và chất lượng hơn. Chúng tôi đề nghị bao gồm các thông tin " "sau trong câu hỏi của bạn:" #: ../../docs/getting_started/introduction/learning_new_features.rst:98 msgid "" "**Describe your goal**. You want to explain what you are trying to achieve " "design-wise. If you are having trouble figuring out how to make a solution " "work, there may be a different, easier solution that accomplishes the same " "goal." msgstr "" "**Mô tả mục tiêu của bạn**. Giải thích ý tưởng bạn muốn thực hiện. Nếu giải " "pháp bạn đang thực hiện quá khó triển khai, không chừng sẽ có một giải pháp " "khác đơn giản hơn để đạt mục tiêu tương tự." #: ../../docs/getting_started/introduction/learning_new_features.rst:103 msgid "" "If there is an error involved, **share the exact error message**. You can " "copy the exact error message in the editor's Debugger bottom panel by " "clicking the Copy Error icon. Knowing what it says can help community " "members better identify how you triggered the error." msgstr "" "Nếu bạn gặp lỗi, vui lòng **ghi rõ chính xác thông báo lỗi**. Bạn có thể " "copy thông báo lỗi trong trình gỡ lỗi dưới bottom panel bằng cách click vào " "biểu tượng Copy Error. Việc biết chính xác thông báo lỗi sẽ giúp các thành " "viên cộng đồng xác định rõ hơn nguyên nhân gây ra lỗi đó." #: ../../docs/getting_started/introduction/learning_new_features.rst:108 msgid "" "If there is code involved, **share a code sample**. Other users won't be " "able to help you fix a problem without seeing your code. Share the code as " "text directly. To do so, you can copy and paste a short code snippet in a " "chat box, or use a website like `Pastebin `_ to share " "long files." msgstr "" "Nếu có liên quan đến code, **hãy share code của bạn lên đây**. Những thành " "viên khác sẽ chẳng giúp gì được nếu không xem qua code của bạn. Vui lòng " "share code dạng text, không phải dạng hình ảnh, bằng cách copy paste đoạn " "code vào chatbox, hoặc nếu code dài thì sử dụng `Pastebin `_." #: ../../docs/getting_started/introduction/learning_new_features.rst:114 msgid "" "**Share a screenshot** of your *Scene* dock along with your written code. " "Most of the code you write affects nodes in your scenes. As a result, you " "should think of those scenes as part of your source code." msgstr "" "**Chia sẻ ảnh chụp màn hình** từ cửa sổ *Scene* của bạn cùng với code bạn " "viết. Phần lớn code bạn viết ảnh hưởng lên các node trong scene của bạn, nên " "bạn hãy xem những scene đó là một phần source code." #: ../../docs/getting_started/introduction/learning_new_features.rst:120 msgid "" "Also, please don't take a picture with your phone, the low quality and " "screen reflections can make it hard to understand the image. Your operating " "system should have a built-in tool to take screenshots with the :kbd:`PrtSc` " "(Print Screen) key (macOS: use :kbd:`Cmd + Shift + 3` for a full screen " "shot, `more information here `_)." msgstr "" "Ngoài ra, vui lòng đừng chụp màn hình bằng điện thoại của bạn, vì chất lượng " "thấp cộng với hiện tượng loá khiến cho hình ảnh mờ ảo khó xem. Hệ điều hành " "của bạn có công cụ chụp ảnh màn hình bằng nút :kbd:`PrtSc` (Print Screen)." #: ../../docs/getting_started/introduction/learning_new_features.rst:126 #, fuzzy msgid "" "Alternatively, you can use a program like `ShareX `_ " "on Windows, or `Flameshot `_ on Windows/macOS/Linux." msgstr "" "Bạn cũng có thể sử dụng những chương trình như `ShareX `_ trên Windows hoặc `FlameShot `_ " "trên Linux." #: ../../docs/getting_started/introduction/learning_new_features.rst:129 msgid "" "Sharing a video of your running game can also be really **useful to " "troubleshoot your game**. You can use programs like `OBS Studio `_ and `Screen to GIF `_ to " "capture your screen." msgstr "" "Video quay lại cảnh game đang chạy sẽ **rất hữu ích trong việc khắc phục sự " "cố**. Bạn có thể sử dụng các chương trình như `OBS Studio `_ hay `Screen to GIF `_ để " "ghi lại màn hình." #: ../../docs/getting_started/introduction/learning_new_features.rst:134 msgid "" "You can then use a service like `streamable `_ or a " "cloud provider to upload and share your videos for free." msgstr "" "Sau đó bạn có thể up file lên dịch vụ `streamable `_ hoặc các nhà cung cấp dịch vụ video miễn phí khác." #: ../../docs/getting_started/introduction/learning_new_features.rst:137 msgid "" "If you're not using the stable version of Godot, please mention the version " "you're using. The answer can be different as available features and the " "interface evolve rapidly." msgstr "" "Nếu bạn không sử dụng phiên bản stable, vui lòng ghi rõ bạn đang sử dụng " "phiên bản nào. Câu trả lời có thể khác nhau tuỳ phiên bản vì các tính năng " "và giao diện được phát triển rất nhanh." #: ../../docs/getting_started/introduction/learning_new_features.rst:141 msgid "" "Following these guidelines will maximize your chances of getting the answer " "you're looking for. They will save time both for you and the persons helping " "you." msgstr "" "Tuân thủ những nguyên tắc trên sẽ tối đa hoá cơ hội bạn nhận được câu trả " "lời mình muốn, giúp tiết kiệm thời gian cho cả bạn và những người giúp đỡ " "bạn." #: ../../docs/getting_started/introduction/learning_new_features.rst:145 msgid "Community tutorials" msgstr "Các hướng dẫn từ cộng đồng" #: ../../docs/getting_started/introduction/learning_new_features.rst:147 msgid "" "This manual aims to provide a comprehensive reference of Godot's features. " "Aside from the 2D and 3D getting started series, it does not contain " "tutorials to implement specific game genres. If you're looking for a " "tutorial about creating a role-playing game, a platformer, or other, please " "see :ref:`doc_community_tutorials`, which lists content made by the Godot " "community." msgstr "" "Trang web này nhằm mục đích cung cấp tài liệu tham khảo toàn diện về các " "tính năng của Godot. Ngoài loạt bài 2D và 3D trong phần căn bản, nó không " "hướng dẫn tạo bất kỳ thể loại game cụ thể nào. Nếu bạn đang tìm hướng dẫn " "tạo game nhập vai, platformer, v.v... vui lòng " "xem :ref:`doc_community_tutorials`, nơi liệt kê nội dung tạo bởi cộng đồng " "Godot." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:4 msgid "Godot's design philosophy" msgstr "Triết lý thiết kế của Godot" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:6 msgid "Now that you've gotten your feet wet, let's talk about Godot's design." msgstr "Bạn đã có cái nhìn tổng quan rồi, giờ hãy nói về thiết kế của Godot." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:8 msgid "" "**Every game engine is different and fits different needs.** Not only do " "they offer a range of features, but 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 "" "**Mỗi game engine đều khác nhau và đáp ứng các nhu cầu khác nhau.** Không " "chỉ cung cấp nhiều tính năng mà thiết kế của mỗi engine còn độc nhất vô nhị. " "Điều này dẫn đến các quy trình làm việc cũng khác nhau và các cách khác nhau " "để tạo cấu trúc game của bạn. Tất cả đều bắt nguồn từ triết lý thiết kế của " "chúng." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:13 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 "" "Trang này nhằm giúp bạn hiểu cách Godot hoạt động, bắt đầu với một số trụ " "cột chính. Đây vừa không phải là danh sách các tính năng sẵn có vừa không " "phải là một bản so sánh các engine với nhau. Để biết xem một engine có phù " "hợp với project của bạn không, bạn cần tìm hiểu thiết kế, các hạn chế của nó " "và tự thực chứng." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:19 #, fuzzy msgid "" "Please watch `Godot explained in 7 minutes `_ if you're looking for an overview of the engine's features." msgstr "" "Vui lòng xem `Godot explained in 5 minutes `_ nếu bạn đang tìm giới thiệu tổng quan về các tính năng của " "engine." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:24 msgid "Object-oriented design and composition" msgstr "Thiết kế và thành phần hướng đối tượng" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:26 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 "" "Godot dựa trên thiết kế hướng đối tượng với hệ thống scene linh hoạt và hệ " "thống phân cấp Node. Để kiến tạo game một cách trực quan, engine cố né xa " "các kiểu lập trình quá chặt chẽ." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:30 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 "" "Ví dụ, các scene có thể được **phối hoặc sắp xếp** trong Godot. Tương tự như " "các prefab lồng nhau: bạn có thể tạo một scene BlinkingLight và một scene " "BrokenLantern có sử dụng BlinkingLight. Sau đó, tạo nguyên một thành phố " "toàn BrokenLantern. Một khi thay đổi màu của BlinkingLight, bấm lưu lại, và " "bùm, tất cả các BrokenLantern trong thành phố sẽ được update ngay tức thì." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:37 msgid "On top of that, you can **inherit** from any scene." msgstr "Ngoài ra, bạn có thể **kế thừa** từ bất kỳ scene nào." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:39 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 "" "Một scene trong Godot có thể là một Vũ khí, một Nhân vật, một Item, một Cánh " "cửa, một Level, một phần của level... bất cứ thứ gì bạn thích. Nó tương " "đương với một class trong code, nhưng thay vì phải gõ code thì bạn được tự " "do thoải mái thiết kế sử dụng editor." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:44 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 "" "Nó khác prefab trong các engine 3D khác ở chỗ bạn có thể kế thừa và mở rộng " "từ những scene này. Bạn có thể tạo Magician kế thừa từ Character. Một khi " "bạn sửa đổi Character trong editor thì Magician cũng được cập nhật theo. Nó " "giúp bạn xây dựng các project của mình sao cho cấu trúc của chúng phù hợp " "với thiết kế của game." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:50 #: ../../docs/getting_started/first_2d_game/index.rst:12 #: ../../docs/getting_started/first_3d_game/index.rst:12 #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:25 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:22 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:9 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:40 #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:22 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:10 #: ../../docs/community/asset_library/using_assetlib.rst:16 #: ../../docs/community/asset_library/submitting_to_assetlib.rst:128 msgid "|image0|" msgstr "|image0|" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:174 #: ../../docs/getting_started/first_2d_game/index.rst:80 #: ../../docs/getting_started/first_3d_game/index.rst:74 #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:451 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:334 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:346 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:375 #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:514 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:616 #: ../../docs/community/asset_library/using_assetlib.rst:186 #: ../../docs/community/asset_library/submitting_to_assetlib.rst:218 msgid "image0" msgstr "image0" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:52 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 " "some nodes like collision shapes that a parent physics body will use, most " "nodes work independently from one another." msgstr "" "Cũng lưu ý rằng Godot cung cấp nhiều loại đối tượng khác nhau được gọi là " "các node, mỗi loại có một mục đích cụ thể. Các node là một phần của tree, " "mỗi node đều kế thừa từ một node cha nào đó và node thuỷ tổ nhất có tên là " "\"Node\". Mặc dù engine có một số node kiểu collision shape được dùng bởi " "một physics body, hầu hết các node hoạt động độc lập với nhau." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:58 msgid "" "In other words, Godot's nodes do not work like components in some other game " "engines." msgstr "" "Nói cách khác, các node của Godot không hoạt động như component trong các " "game engine khác." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:61 #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:361 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:27 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:19 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:47 #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:26 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:17 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:24 #: ../../docs/community/asset_library/using_assetlib.rst:47 msgid "|image1|" msgstr "|image1|" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:175 #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:452 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:335 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:347 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:376 #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:515 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:449 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:617 #: ../../docs/community/asset_library/using_assetlib.rst:187 msgid "image1" msgstr "image1" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:63 msgid "" "Sprite2D 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 "" "Sprite2D là một Node2D kế thừa từ CanvasItem kế thừa từ Node. Nó có tất cả " "thuộc tính và chức năng của cả ba lớp cha, như transform hoặc vẽ hình học và " "render bằng custom shader." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:68 msgid "All-inclusive package" msgstr "Bao trọn gói" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:70 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 "" "Godot cố gắng cung cấp bộ công cụ của riêng mình để đáp ứng những nhu cầu " "thông dụng nhất. Nó sỡ hữu trình gõ code chuyên dụng, trình chỉnh animation, " "trình chỉnh tilemap, trình chỉnh shader, trình gỡ lỗi, profiler, khả năng " "hot-reload cục bộ lẫn từ xa, v.v..." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:75 #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:369 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:31 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:26 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:58 #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:34 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:21 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:32 #: ../../docs/community/asset_library/using_assetlib.rst:57 msgid "|image2|" msgstr "|image2|" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:176 #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:453 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:336 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:348 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:377 #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:516 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:450 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:618 #: ../../docs/community/asset_library/using_assetlib.rst:188 msgid "image2" msgstr "image2" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:77 #, fuzzy 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 available in Godot for it." msgstr "" "Mục tiêu là bao trọn gói và cung cấp một trải nghiệm người dùng toàn diện. " "Bạn vẫn có thể làm việc với các chương trình bên ngoài miễn là có plugin để " "import vào Godot. Hoặc bạn có thể tự tạo một cái, như `Tiled Map Importer " "`__." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:81 msgid "" "That is also partly why Godot offers its own programming language GDScript " "along with C#. GDScript is designed for the needs of game developers and " "game designers, and is tightly integrated in the engine and the editor." msgstr "" "Đó cũng là một phần lý do tại sao Godot cung cấp ngôn ngữ lập trình GDScript " "của riêng mình bên cạnh C#. GDScript được thiết kế để đáp ứng các nhu cầu " "của game developer và game designer, đồng thời được tích hợp chặt chẽ vào " "engine và editor." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:86 msgid "" "GDScript lets you write code using an indentation-based 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 "" "Trong GDScript bạn viết code theo cú pháp đơn giản giống Python, nhưng nó " "detect được kiểu và cung cấp khả năng auto-completion chất lượng như trong " "ngôn ngữ kiểu tĩnh. Nó cũng được tối ưu để code gameplay với các kiểu nội bộ " "như Vector và Color." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:90 msgid "" "Note that with GDExtension, you can write high-performance code using " "compiled languages like C, C++, Rust, D, Haxe, or Swift without recompiling " "the engine." msgstr "" "Lưu ý rằng với GDExtension, bạn có thể viết code hiệu năng cao bằng các ngôn " "ngữ biên dịch như C, C++, Rust, D, Haxe hay Swift mà không cần phải tái biên " "dịch engine." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:93 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 "" "Cũng lưu ý rằng workspace 3D không cung cấp nhiều công cụ như trong " "workspace 2D. Bạn cần sử dụng các chương trình bên ngoài hoặc các add-on để " "chỉnh sửa terrain, animate những nhân vật phức tạp, v.v... Godot cung cấp " "một API hoàn chỉnh để mở rộng chức năng của editor bằng game code. Xem " "`Godot editor cũng là một Godot game`_ bên dưới." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:99 msgid "Open source" msgstr "Mã nguồn mở" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:101 #, fuzzy msgid "" "Godot offers a fully open source codebase under the **MIT license**. This " "means that the codebase is free for anyone to download, use, modify, or " "share, as long as its license file is kept intact." msgstr "" "Godot cung cấp codebase mã nguồn mở hoàn toàn theo **giấy phép MIT**. Điều " "này có nghĩa là tất cả các công nghệ đi kèm với nó cũng phải Free (theo " "nghĩa tự do). Phần lớn chúng được phát triển từ con số 0 bởi những người " "đóng góp." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:105 msgid "" "All technologies that ship with Godot, including third-party libraries, must " "be legally compatible with this open source license. Therefore, most parts " "of Godot are developed from the ground up by community contributors." msgstr "" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:109 msgid "" "Anyone can plug in proprietary tools for the needs of their projects — they " "just won't ship with the engine. This may include Google AdMob, or FMOD. Any " "of these can come as third-party plugins instead." msgstr "" "Bất kỳ ai cũng có thể chèn vào các công cụ độc quyền như Google AdMob hay " "FMOD cho nhu cầu dự án của mình — chỉ là chúng không đi kèm với engine. Bất " "kỳ công cụ độc quyền nào cũng đều có thể là plugin của bên thứ ba." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:114 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 "" "Mặt khác, một codebase nguồn mở có nghĩa là bạn có thể **tìm hiểu và mở rộng " "engine** theo ý muốn của mình. Bạn cũng có thể debug game một cách dễ dàng " "vì Godot sẽ in các lỗi với stack trace, ngay cả khi chúng xuất phát từ chính " "engine." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:120 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 "" "Điều này **không ảnh hưởng đến công việc bạn làm với Godot** dưới bất kỳ " "hình thức nào: không có ràng buộc nào với engine hoặc bất cứ thứ gì bạn tạo " "ra với nó." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:124 msgid "Community-driven" msgstr "Hướng tới cộng đồng" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:126 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 "" "**Godot được tạo ra bởi cộng đồng, vì cộng đồng và cho tất cả những người " "sáng tạo trò chơi ngoài kia.** Chính nhu cầu của người dùng và các cuộc thảo " "luận cởi mở đã thúc đẩy các bản cập nhật cốt lõi. Các tính năng mới từ các " "nhà phát triển cốt lõi thường tập trung vào những gì sẽ mang lại lợi ích cho " "nhiều người dùng nhất trước tiên." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:131 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has thousands of 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 "" "Mặc dù chỉ có một số nhà phát triển cốt lõi làm việc toàn thời gian trên " "engine nhưng dự án đã có hàng ngàn cộng tác viên tại thời điểm viết bài này. " "Các lập trình viên làm việc trên những tính năng mà bản thân họ có thể cần, " "vì vậy, bạn sẽ thấy tất cả các khía cạnh của engine đồng thời được cải tiến " "trong mọi bản phát hành major." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:138 msgid "The Godot editor is a Godot game" msgstr "Godot editor cũng là một Godot game" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:140 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 "" "Godot editor chạy trên game engine. Nó sử dụng hệ thống UI của chính engine, " "nó có thể hot-reload lại code và scene khi bạn test các project của mình, " "hoặc chạy code game trong editor. Như vậy, **code và scene** vừa có thể được " "dùng để tạo game, vừa có thể được dùng để **tạo plugin nhằm mở rộng editor.**" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:145 msgid "" "This leads to a reliable and flexible UI system, as it powers the editor " "itself. With the ``@tool`` annotation, you can run any game code in the " "editor." msgstr "" "Điều này dẫn tới một hệ thống UI linh hoạt và đáng tin cậy vì nó được xài " "bởi chính editor. Với annotation ``@tool``, bạn có thể chạy bất kỳ code game " "nào trong editor." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:151 #, fuzzy msgid "" "RPG in a Box is a voxel RPG editor made with Godot. It uses Godot's UI tools " "for its node-based programming system and for the rest of the interface." msgstr "" "*RPG in a Box là một trình tạo RPG voxel làm bằng Godot 2. Nó sử dụng bộ " "công cụ UI của Godot cho hệ thống lập trình dựa trên node và cho phần còn " "lại của giao diện.*" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:155 msgid "" "Put the ``@tool`` annotation 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 "" "Đặt annotation ``@tool`` ở dòng đầu của bất kỳ file GDScript nào và nó sẽ " "chạy trong editor. Điều này cho phép bạn import và export các plugin, tạo " "các plugin như custom level editor, hoặc tạo các script với cùng những node " "và API bạn sử dụng trong các project của mình." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:162 msgid "" "The editor is fully written in C++ and is statically compiled into the " "binary. This means you can't import it as a typical project that would have " "a ``project.godot`` file." msgstr "" "Editor được viết hoàn toàn bằng C++ và được liên kết tĩnh thành file binary. " "Điều này có nghĩa là bạn không thể import nó như một project thông thường " "với file ``project.godot`` được." #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:167 msgid "Separate 2D and 3D engines" msgstr "Tách biệt các engine 2D và 3D" #: ../../docs/getting_started/introduction/godot_design_philosophy.rst:169 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 interfaces over " "your 3D world." msgstr "" "Godot sử dụng các engine chuyên biệt để render 2D và 3D. Kết quả là, **đơn " "vị cơ bản của scene 2D là pixel.** Mặc dù các engine là riêng biệt, bạn có " "thể render 2D trong 3D, 3D trong 2D, và phủ các sprite 2D lên thế giới 3D " "của bạn." #: ../../docs/getting_started/step_by_step/index.rst:8 msgid "" "This series builds upon the :ref:`Introduction to Godot ` and will get you started with the editor and the engine. You " "will learn more about nodes and scenes, code your first classes with " "GDScript, use signals to make nodes communicate with one another, and more." msgstr "" "Loạt bài viết này theo sau phần :ref:`Introduction to Godot ` và sẽ hướng dẫn bạn cách sử dụng editor cũng như engine. Ta " "sẽ cùng tìm hiểu thêm về các node, các scene, lập trình những class đầu tiên " "bằng GDScript, sử dụng các signal để khiến các node tương tác với nhau cùng " "nhiều thứ hay ho khác." #: ../../docs/getting_started/step_by_step/index.rst:13 msgid "" "The following lessons are here to prepare you " "for :ref:`doc_your_first_2d_game`, a step-by-step tutorial where you will " "code a game from scratch. By the end of it, you will have the necessary " "foundations to explore more features in other sections. We also included " "links to pages that cover a given topic in-depth where appropriate." msgstr "" "Một khi đã thuần thục những chủ đề dưới đây, bạn sẵn sàng để đọc bài hướng " "dẫn tạo game từng bước :ref:`doc_your_first_2d_game`. Những kiến thức căn " "bản ở đây sẽ là nền tảng vững chắc để khám phá thêm nhiều tính năng từ các " "chủ đề khác. Chúng tôi cũng đính kèm nhiều link tới các trang nhằm phục vụ " "những bạn muốn tìm hiểu sâu hơn." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:7 msgid "Nodes and Scenes" msgstr "Các scene và các node" #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:9 msgid "" "In :ref:`doc_key_concepts_overview`, we saw that a Godot game is a tree of " "scenes and that each scene is a tree of nodes. In this lesson, we explain a " "bit more about them. You will also create your first scene." msgstr "" "Trong :ref:`doc_key_concepts_overview`, ta đã thấy rằng, trong Godot một " "game được tạo thành bởi một tập các scene, mà mỗi scene lại là một tập các " "node. Trong bài này, chúng ta sẽ cùng tìm hiểu thêm về chúng cũng như thực " "hành tạo chiếc scene đầu tiên." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:16 msgid "" "**Nodes are the fundamental building blocks of your game**. They are like " "the ingredients in a recipe. There are dozens of kinds that can display an " "image, play a sound, represent a camera, and much more." msgstr "" "**Node là thành phần cơ bản nhất để tạo game**. Giống như các thành phần " "trong một công thức nấu ăn vậy. Có node thì hiển thị hình ảnh, cái thì phát " "âm thanh, có cái thì để biễu diễn một camera, v.v." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:22 msgid "All nodes have the following characteristics:" msgstr "Mọi node đều có chung các đặc điểm sau:" #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:24 msgid "A name." msgstr "Có tên." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:25 msgid "Editable properties." msgstr "Thay đổi được các thuộc tính." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:26 msgid "They receive callbacks to update every frame." msgstr "Có các callback để update mỗi frame." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:27 msgid "You can extend them with new properties and functions." msgstr "Có thể thêm các property và function mới." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:28 msgid "You can add them to another node as a child." msgstr "Có thể lồng ghép các node vào nhau." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:30 msgid "" "The last characteristic is important. **Together, nodes form a tree**, which " "is a powerful feature to organize projects. Since different nodes have " "different functions, combining them produces more complex behavior. As we " "saw before, you can build a playable character the camera follows using " "a :ref:`CharacterBody2D ` node, a :ref:`Sprite2D " "` node, a :ref:`Camera2D ` node, and " "a :ref:`CollisionShape2D ` node." msgstr "" "Đặc điểm cuối khá quan trọng. **Các node được biểu diễn dưới dạng tree**, " "một cấu trúc vô cùng linh hoạt để tổ chức project. Vì mỗi node có một nhiệm " "vụ riêng, gom chúng lại với nhau ta sẽ được một thực thể phức tạp hơn. Trong " "các bài trước bạn đã thấy, ta có thể gom các node :ref:`CharacterBody2D " "`, :ref:`Sprite2D `, :ref:`Camera2D " "` và :ref:`CollisionShape2D ` để " "khiến camera bám theo nhân vật chính." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:42 msgid "" "When you organize nodes in a tree, like our character, we call this " "construct a scene. Once saved, scenes work like new node types in the " "editor, where you can add them as a child of an existing node. In that case, " "the instance of the scene appears as a single node with its internals hidden." msgstr "" "Khi bạn tổ chức các node dưới dạng tree, như Character trong hình minh họa " "trên, ta gọi đó là một scene. Một khi được lưu vào đĩa cứng, ta có thể xem " "nguyên cái scene đó như là một node, và có thể đem lồng ghép vào trong các " "node khác. Trong trường hợp đó, editor sẽ hiển thị scene như là một node " "đơn, và các thành phần chi tiết bên trong nó bị ẩn đi." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:47 msgid "" "Scenes allow you to structure your game's code however you want. You can " "**compose nodes** to create custom and complex node types, like a game " "character that runs and jumps, a life bar, a chest with which you can " "interact, and more." msgstr "" "Các scene giúp bạn cấu trúc game của mình theo cách bạn muốn. Bạn có thể " "**phối trộn các node** để tạo các node phức tạp hơn, như tạo một nhân vật có " "thể chạy và nhảy, tạo thanh máu, hòm đồ, v.v." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:53 msgid "" "The Godot editor essentially is a **scene editor**. It has plenty of tools " "for editing 2D and 3D scenes, as well as user interfaces. A Godot project " "can contain as many of these scenes as you need. The engine only requires " "one as your application's **main scene**. This is the scene Godot will first " "load when you or a player runs the game." msgstr "" "Về bản chất, Godot editor là một **scene editor**. Nó có nhiều công cụ để " "tinh chỉnh các scene 2D, 3D cũng như giao diện người dùng. Bạn có thể tạo " "nhiều scene tùy thích, nhưng tối thiểu phải tạo một cái, gọi là **main " "scene**. Scene này được load trước nhất mỗi khi người chơi chạy game." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:59 msgid "On top of acting like nodes, scenes have the following characteristics:" msgstr "" "Ngoài những đặc điểm giống node thì scene còn có những đặc điểm sau đây:" #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:61 msgid "They always have one root node, like the \"Player\" in our example." msgstr "Có duy nhất một node gốc, như \"Player\" trong ví dụ trên." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:62 msgid "You can save them to your local drive and load them later." msgstr "Có thể lưu xuống đĩa cứng để load lại sau." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:63 msgid "" "You can create as many instances of a scene as you'd like. You could have " "five or ten characters in your game, created from your Character scene." msgstr "" "Từ một scene, bạn có thể tạo bao nhiêu bản sao của nó tùy thích. Bạn có thể " "tạo năm hoặc mười nhân vật từ một scene Character duy nhất." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:67 msgid "Creating your first scene" msgstr "Thực hành tạo scene" #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:69 msgid "" "Let's create our first scene with a single node. To do so, you will need " "to :ref:`create a new project ` first. " "After opening the project, you should see an empty editor." msgstr "" "Giờ ta hãy tạo thử scene có một node duy nhất. Trước tiên bạn hãy :ref:`tạo " "project mới `, mở nó lên và bạn sẽ thấy " "giao diện editor như dưới đây." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:75 #, fuzzy msgid "" "In an empty scene, the :ui:`Scene` dock on the left shows several options to " "add a root node quickly. :button:`2D Scene` adds a :ref:`Node2D " "` node, :button:`3D Scene` adds a :ref:`Node3D ` " "node, and :button:`User Interface` adds a :ref:`Control ` " "node. These presets are here for convenience; they are not " "mandatory. :button:`Other Node` lets you select any node to be the root " "node. In an empty scene, :button:`Other Node` is equivalent to pressing " "the :button:`Add Child Node` button at the top-left of the Scene dock, which " "usually adds a new node as a child of the currently selected node." msgstr "" "Trong một scene chưa có dữ liệu, cửa sổ Scene nằm bên tay trái sẽ cung cấp " "một vài tùy chọn để tạo nhanh node gốc. \"2D Scene\" thêm một " "node :ref:`Node2D `, \"3D Scene\" thêm một node :ref:`Node3D " "`, và \"User Interface\" thêm một node :ref:`Control " "`. Những preset này chỉ để cho tiện chứ không bắt buộc. Bạn " "có thể chọn \"Other Node\" để thêm bất kỳ loại node nào bạn thích. Trong một " "scene trống, \"Other Node\" tương ứng với nút dấu cộng \"Add Child Node\" ở " "góc trên bên trái cửa sổ Scene, được dùng để lồng thêm một node con vào node " "đang được chọn." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:85 msgid "" "We're going to add a single :ref:`Label ` node to our scene. " "Its function is to draw text on the screen." msgstr "" "Giờ ta sẽ thêm node :ref:`Label ` vào trong scene. Nó dùng để " "hiển thị text lên màn hình." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:88 #, fuzzy msgid "" "Press the :button:`Add Child Node` button or :button:`Other Node` to create " "a root node." msgstr "Nhấp nút \"Add Child Node\" hoặc \"Other Node\" để tạo node gốc." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:93 #, fuzzy msgid "" "The :ui:`Create New Node` dialog opens, showing the long list of available " "nodes." msgstr "" "Hộp thoại Create Node mở lên cùng danh sách dài hàng loạt các node khả dụng." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:97 msgid "Select the Label node. You can type its name to filter down the list." msgstr "Chọn node Label. Hoặc bạn có thể search để lọc ra." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:101 #, fuzzy msgid "" "Click on the Label node to select it and click the :button:`Create` button " "at the bottom of the window." msgstr "Nhấp vào node Label để chọn nó rồi nhấp nút Create phía dưới." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:106 msgid "" "A lot happens when you add a scene's first node. The scene changes to the 2D " "workspace because Label is a 2D node type. The Label appears, selected, in " "the top-left corner of the viewport. The node appears in the Scene dock on " "the left, and the node's properties appear in the Inspector dock on the " "right." msgstr "" "Nhiều thứ xảy ra khi bạn thêm node gốc vào scene. Thứ nhất là workspace đổi " "sang 2D vì Label là một node kiểu 2D. Thứ hai là Label xuất hiện phía trên " "bên trái của viewport và được chọn sẵn. Thứ nữa là node được thêm vào cửa sổ " "Scene bên tay trái và các thuộc tính của nó xuất hiện trong cửa sổ Inspector " "bên tay phải." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:112 msgid "Changing a node's properties" msgstr "Thay đổi thuộc tính của một node" #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:114 #, fuzzy msgid "" "The next step is to change the Label's :inspector:`Text` property. Let's " "change it to \"Hello World\"." msgstr "" "Bước kế là thay đổi thuộc tính \"Text\" của Label. Ta sẽ đổi sang \"Hello " "World\"." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:117 #, fuzzy msgid "" "Head to the Inspector dock on the right of the viewport. Click inside the " "field below the :inspector:`Text` property and type \"Hello World\"." msgstr "" "Bạn hãy nhìn vào cửa sổ Inspector nằm bên phải viewport. Nhấp vào ô nhập bên " "dưới thuộc tính Text rồi gõ \"Hello World\"." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:122 msgid "You will see the text draw in the viewport as you type." msgstr "Bạn gõ tới đâu thì trên viewport cập nhật tới đó." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:124 msgid "" "You can edit any property listed in the Inspector as we did with the Text. " "For a complete reference of the Inspector dock, " "see :ref:`doc_editor_inspector_dock`." msgstr "" "Bạn có thể chỉnh sửa bất kỳ thuộc tính nào có trong cửa sổ Inspector giống " "như ta đã làm với Text. Thông tin tham khảo đầy đủ về Inspector dock, " "xem :ref:`doc_editor_inspector_dock`." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:128 msgid "" "You can move your Label node in the viewport by selecting the move tool in " "the toolbar." msgstr "Bạn có thể di chuyển Label đi chỗ khác bằng công cụ move trên toolbar." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:133 msgid "" "With the Label selected, click and drag anywhere in the viewport to move it " "to the center of the view delimited by the rectangle." msgstr "Chọn Label, nắm kéo nó vào giữa viewport bao quanh bởi khung chữ nhật." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:139 msgid "Running the scene" msgstr "Chạy lên thử" #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:141 #, fuzzy msgid "" "Everything's ready to run the scene! Press the :button:`Run Current Scene` " "button in the top-right of the screen or press :kbd:`F6` (:kbd:`Cmd + R` on " "macOS)." msgstr "" "Mọi thứ đã sẵn sàng để chạy! Nhấp nút Play Scene ở phía trên bên phải màn " "hình hoặc nhấn :kbd:`F6` (:kbd:`Cmd + R` trên macOS)." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:147 #, fuzzy msgid "" "A popup invites you to save the scene, which is required to run it. Click " "the :button:`Save` button in the file browser to save it as ``label.tscn``." msgstr "" "Scene phải được lưu trước khi chạy, nên một hộp thoại sẽ hiện ra nhắc bạn " "lưu scene, hãy đặt tên nó là ``label.tscn``." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:152 #, fuzzy msgid "" "The :ui:`Save Scene As` dialog, like other file dialogs in the editor, only " "allows you to save files inside the project. The ``res://`` path at the top " "of the window represents the project's root directory and stands for " "\"resource path\". For more information about file paths in Godot, " "see :ref:`doc_filesystem`." msgstr "" "Hộp thoại Save Scene As, giống như bất kỳ hộp thoại nào khác trong editor, " "chỉ cho phép ta lưu file nội bộ trong project. Đường dẫn ``res://`` ở phía " "trên đại diện cho thư mục gốc của project và là viết tắt của \"resource " "path\". Thông tin chi tiết về đường dẫn file trong Godot, " "xem :ref:`doc_filesystem`." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:158 msgid "" "The application should open in a new window and display the text \"Hello " "World\"." msgstr "Ứng dụng sẽ chạy trong cửa sổ mới và hiển thị \"Hello World\"." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:162 msgid "" "Close the window or press :kbd:`F8` (:kbd:`Cmd + .` on macOS) to quit the " "running scene." msgstr "" "Đóng cửa sổ hoặc nhấn :kbd:`F8` (:kbd:`Cmd + .` trên macOS) để dừng scene " "đang chạy." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:165 msgid "Setting the main scene" msgstr "Cài đặt main scene" #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:167 #, fuzzy msgid "" "To run our test scene, we used the :button:`Run Current Scene` button. " "Another button next to it, :button:`Run Project`, allows you to set and run " "the project's **main scene**. You can also press :kbd:`F5` (:kbd:`Cmd + B` " "on macOS) to do so." msgstr "" "Để chạy thử scene, ta sử dụng nút Run Current Scene. Còn nút kế bên nó dùng " "để thiết lập và chạy scene main. Bạn có thể nhấn :kbd:`F5` (:kbd:`Cmd + B` " "trên macOS)." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:173 msgid "" "Running the project's *main scene* is distinct from running the *current " "scene*. If you encounter unexpected behavior, check to ensure you are " "running the correct scene." msgstr "" #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:177 msgid "A popup window appears and invites you to select the main scene." msgstr "Một hộp thoại hiện ra nhắc bạn chọn main scene." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:181 #, fuzzy msgid "" "Click the :button:`Select` button, and in the file dialog that appears, " "double click on ``label.tscn``." msgstr "Nhấp nút Select, chọn ``label.tscn`` trong hộp thoại hiện ra." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:186 msgid "" "The demo should run again. Moving forward, every time you run the project, " "Godot will use this scene as a starting point." msgstr "" "Từ đây về sau, mỗi lần bạn chạy project này, Godot sẽ tự động load main " "scene trước tiên." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:189 #, fuzzy msgid "" "The editor saves the main scene's path in a project.godot file in your " "project's directory. While you can edit this text file directly to change " "project settings, you can also use the :menu:`Project > Project Settings` " "window to do so. For more information, see :ref:`doc_project_settings`." msgstr "" "Editor sẽ lưu đường dẫn tới file main scene vào file project.godot nằm trong " "thư mục gốc của project. Đây chỉ là một file config dạng text nên bạn có thể " "chỉnh sửa trực tiếp hoặc dùng giao diện \"Project -> Project Settings\". " "Thông tin chi tiết, xem :ref:`doc_project_settings`." #: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:194 msgid "" "In the next part, we will discuss another key concept in games and in Godot: " "creating instances of a scene." msgstr "" "Trong bài kế, chúng ta sẽ thảo luận về một khái niệm quan trọng khác trong " "game nói chung và trong Godot nói riêng: tạo các bản sao của một scene." #: ../../docs/getting_started/step_by_step/instancing.rst:4 msgid "Creating instances" msgstr "Tạo các bản sao" #: ../../docs/getting_started/step_by_step/instancing.rst:8 msgid "" "This tutorial refers to instancing scenes in the editor. To learn how to " "instance scenes from code, see :ref:`doc_nodes_and_scene_instances`." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:11 msgid "" "Godot's approach to *instancing* described below should not be confused with " "hardware instancing that can be used to render large amounts of similar " "objects quickly. See :ref:`doc_using_multimesh` instead." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:15 msgid "" "In the previous part, we saw that a scene is a collection of nodes organized " "in a tree structure, with a single node as its root. You can split your " "project into any number of scenes. This feature helps you break down and " "organize your game's different components." msgstr "" "Trong phần trước, chúng ta đã thấy rằng một scene là một tập các node được " "tổ chức dưới dạng cây, với một node gốc duy nhất. Bạn có thể chia project " "của mình thành nhiều scene. Tính năng này giúp ta chia nhỏ và tổ chức game " "thành các thành phần khác nhau." #: ../../docs/getting_started/step_by_step/instancing.rst:20 msgid "" "You can create as many scenes as you'd like and save them as files with the " "``.tscn`` extension, which stands for \"text scene\". The ``label.tscn`` " "file from the previous lesson was an example. We call those files \"Packed " "Scenes\" as they pack information about your scene's content." msgstr "" "Bạn có thể tạo bao nhiêu scene tùy ý rồi lưu chúng với đuôi file ``.tscn``, " "viết tắt của \"text scene\". File ``label.tscn`` trong bài trước là một ví " "dụ. Ta gọi các scene này là \"Những scene được đóng gói\" (Packed Scenes) vì " "chúng đóng gói toàn bộ nội dung của scene." #: ../../docs/getting_started/step_by_step/instancing.rst:25 msgid "" "Here's an example of a ball. It's composed of a :ref:`RigidBody2D " "` node as its root named Ball, which allows the ball to " "fall and bounce on walls, a :ref:`Sprite2D ` node, and " "a :ref:`CollisionShape2D `." msgstr "" "Dưới đây là minh họa về một quả bóng. Nó được tạo bởi một node " "gốc :ref:`RigidBody2D ` tên là Ball, node này sẽ giúp " "bóng có khả năng rơi và nảy, một node :ref:`Sprite2D `, và " "một node :ref:`CollisionShape2D `." #: ../../docs/getting_started/step_by_step/instancing.rst:32 msgid "" "Once you have saved a scene, it works as a blueprint: you can reproduce it " "in other scenes as many times as you'd like. Replicating an object from a " "template like this is called **instancing**." msgstr "" "Một khi scene được lưu, nó đóng vai trò như một bản thiết kế vậy: bạn có thể " "dùng bản thiết kế này để tạo ra bao nhiêu quả bóng trong scene khác tùy ý. " "Tạo một đối tượng bằng cách sao chép từ một mẫu thiết kế như thế gọi là " "**tạo bản sao** (**instancing**)." #: ../../docs/getting_started/step_by_step/instancing.rst:38 msgid "" "As we mentioned in the previous part, instanced scenes behave like a node: " "the editor hides their content by default. When you instance the Ball, you " "only see the Ball node. Notice also how each duplicate has a unique name." msgstr "" "Như đã đề cập trong bài trước, scene được tạo bản sao sẽ được xem như là một " "node: editor sẽ ẩn đi nội dung bên trong nó. Khi bạn tạo bản sao của Ball, " "bạn sẽ chỉ thấy node Ball mà thôi. Cũng lưu ý rằng mỗi bản sao có một tên " "duy nhất." #: ../../docs/getting_started/step_by_step/instancing.rst:42 msgid "" "Every instance of the Ball scene starts with the same structure and " "properties as ``ball.tscn``. However, you can modify each independently, " "such as changing how they bounce, how heavy they are, or any property " "exposed by the source scene." msgstr "" "Mỗi một bản sao của scene Ball có cùng cấu trúc và thuộc tính như " "``ball.tscn``. Tuy nhiên, bạn có thể tinh chỉnh riêng cho từng cái, như thay " "đổi độ nảy, độ nặng, hoặc bất kỳ thuộc tính nào khác từ scene gốc." #: ../../docs/getting_started/step_by_step/instancing.rst:48 msgid "In practice" msgstr "Thực hành" #: ../../docs/getting_started/step_by_step/instancing.rst:50 msgid "" "Let's use instancing in practice to see how it works in Godot. We invite you " "to download the ball's sample project we prepared for you: " "`instancing_starter.zip `_." msgstr "" "Giờ ta hãy cùng xem cách tạo các bản sao trong Godot như thế nào. Mời bạn " "tải về project mẫu mà chúng tôi đã chuẩn bị sẵn: `instancing_starter.zip " "`_." #: ../../docs/getting_started/step_by_step/instancing.rst:54 #, fuzzy msgid "" "Extract the archive on your computer. To import it, you need the Project " "Manager. The Project Manager is accessed by opening Godot, or if you already " "have Godot opened, click on :menu:`Project > Quit to Project List` " "(:kbd:`Ctrl + Shift + Q`, :kbd:`Ctrl + Option + Cmd + Q` on macOS)" msgstr "" "Sau khi giải nén, bạn hãy import nó vào Godot bằng Project Manager. Nếu đang " "có một project đang mở, hãy thoát ra Project Manager bằng menu *Project -> " "Quit to Project List* (:kbd:`Ctrl + Shift + Q`, :kbd:`Ctrl + Option + Cmd + " "Q` trên macOS)" #: ../../docs/getting_started/step_by_step/instancing.rst:58 #, fuzzy msgid "" "In the Project Manager, click the :button:`Import` button to import the " "project." msgstr "Trong Project Manager, click vào nút *Import* để import project." #: ../../docs/getting_started/step_by_step/instancing.rst:62 msgid "" "In the pop-up that appears navigate to the folder you extracted. Double-" "click the ``project.godot`` file to open it." msgstr "" "Trong hộp thoại hiện ra, mở thư mục mà bạn vừa giải nén. Click đúp file " "``project.godot`` để mở nó." #: ../../docs/getting_started/step_by_step/instancing.rst:67 #, fuzzy msgid "Finally, click the :button:`Import` button." msgstr "Cuối cùng, click nút Import & Edit." #: ../../docs/getting_started/step_by_step/instancing.rst:71 msgid "" "A window notifying you that the project was last opened in an older Godot " "version may appear, that's not an issue. Click :button:`Ok` to open the " "project." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:74 msgid "" "The project contains two packed scenes: ``main.tscn``, containing walls " "against which the ball collides, and ``ball.tscn``. The Main scene should " "open automatically. If you're seeing an empty 3D scene instead of the main " "scene, click the 2D button at the top of the screen." msgstr "" "Project chứa hai scene: ``main.tscn``, chứa các bức tường để những quả bóng " "va vào, và ``ball.tscn``. Scene Main sẽ được mở lên tự động. Nếu bạn thấy " "một scene 3D trống rỗng thay vì scene main, click nút 2D ở trên cùng màn " "hình." #: ../../docs/getting_started/step_by_step/instancing.rst:82 msgid "" "Let's add a ball as a child of the Main node. In the Scene dock, select the " "Main node. Then, click the link icon at the top of the scene dock. This " "button allows you to add an instance of a scene as a child of the currently " "selected node." msgstr "" "Giờ ta sẽ thêm một quả bóng vào như một node con của Main. Trong cửa sổ " "Scene, chọn node Main, sau đó click biểu tượng liên kết nằm phía trên. Nút " "này giúp ta tạo bản sao của một scene, thêm nó vào scene hiện tại như là " "node con của node đang được chọn." #: ../../docs/getting_started/step_by_step/instancing.rst:88 msgid "Double-click the ball scene to instance it." msgstr "Click đúp vào scene Ball để tạo bản sao của nó." #: ../../docs/getting_started/step_by_step/instancing.rst:92 msgid "The ball appears in the top-left corner of the viewport." msgstr "Quả bóng xuất hiện ở góc trên bên trái viewport." #: ../../docs/getting_started/step_by_step/instancing.rst:96 msgid "Click on it and drag it towards the center of the view." msgstr "Nắm đầu nó lôi vô giữa." #: ../../docs/getting_started/step_by_step/instancing.rst:100 msgid "" "Play the game by pressing :kbd:`F5` (:kbd:`Cmd + B` on macOS). You should " "see it fall." msgstr "" "Chạy game bằng phím :kbd:`F5` (:kbd:`Cmd + B` trên macOS). Bạn sẽ thấy quả " "bóng rơi." #: ../../docs/getting_started/step_by_step/instancing.rst:102 msgid "" "Now, we want to create more instances of the Ball node. With the ball still " "selected, press :kbd:`Ctrl + D` (:kbd:`Cmd + D` on macOS) to call the " "duplicate command. Click and drag to move the new ball to a different " "location." msgstr "" "Giờ ta sẽ tạo nhiều quả bóng hơn. Chọn quả bóng rồi nhấn :kbd:`Ctrl + D` " "(:kbd:`Cmd + D` trên macOS) để nhân đôi. Nắm đầu lôi quả bóng mới đi chỗ " "khác." #: ../../docs/getting_started/step_by_step/instancing.rst:108 msgid "You can repeat this process until you have several in the scene." msgstr "Lặp lại thao tác trên để tạo một vài quả bóng trong scene." #: ../../docs/getting_started/step_by_step/instancing.rst:112 msgid "" "Play the game again. You should now see every ball fall independently from " "one another. This is what instances do. Each is an independent reproduction " "of a template scene." msgstr "" "Chạy lại game và bạn sẽ thấy các quả bóng độc lập với nhau. Các bản sao là " "như thế đấy. Mỗi cái là một phiên bản độc lập được tạo từ một bản mẫu ban " "đầu." #: ../../docs/getting_started/step_by_step/instancing.rst:117 msgid "Editing scenes and instances" msgstr "Chỉnh sửa các scene và các bản sao" #: ../../docs/getting_started/step_by_step/instancing.rst:119 msgid "There is more to instances. With this feature, you can:" msgstr "Các bản sao còn làm được nhiều hơn thế. Bạn có thể:" #: ../../docs/getting_started/step_by_step/instancing.rst:121 #, fuzzy msgid "" "Change the properties of one ball without affecting the others using " "the :ui:`Inspector`." msgstr "" "Thay đổi thuộc tính của một quả bóng bất kỳ mà không làm ảnh hưởng những quả " "còn lại bằng Inspector." #: ../../docs/getting_started/step_by_step/instancing.rst:123 msgid "" "Change the default properties of every Ball by opening the ``ball.tscn`` " "scene and making a change to the Ball node there. Upon saving, all instances " "of the Ball in the project will see their values update." msgstr "" "Thay đổi thuộc tính mặc định của tất cả mọi quả bóng bằng cách mở scene " "``ball.tscn`` rồi thay đổi node Ball trong đó. Save một cái, tất cả các bản " "sao của quả bóng sẽ cập nhật thay đổi ngay tắp lự." #: ../../docs/getting_started/step_by_step/instancing.rst:127 msgid "" "Changing a property on an instance always overrides values from the " "corresponding packed scene." msgstr "Đổi thuộc tính trên bản sao sẽ chỉ ảnh hưởng đến chính bản sao đó." #: ../../docs/getting_started/step_by_step/instancing.rst:130 msgid "" "Let's try this. Double-click ``ball.tscn`` in the FileSystem to open it." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:134 #, fuzzy msgid "" "In the Scene dock on the left, select the Ball node. Then, in " "the :ui:`Inspector` on the right, click on the :inspector:`PhysicsMaterial` " "property to expand it." msgstr "" "Thử ngay thôi. Mở ``ball.tscn`` rồi chọn node Ball. Trong cửa sổ Inspector " "bên tay phải, click vào thuộc tính PhysicsMaterial để bung nó ra." #: ../../docs/getting_started/step_by_step/instancing.rst:139 msgid "" "Set its Bounce property to ``0.5`` by clicking on the number field, typing " "``0.5``, and pressing :kbd:`Enter`." msgstr "" "Thiết lập thuộc tính Bounce thành ``0.5`` bằng cách click vào ô nhập, gõ " "``0.5``, rồi nhấn :kbd:`Enter`." #: ../../docs/getting_started/step_by_step/instancing.rst:144 msgid "" "Play the game by pressing :kbd:`F5` (:kbd:`Cmd + B` on macOS) and notice how " "all balls now bounce a lot more. As the Ball scene is a template for all " "instances, modifying it and saving causes all instances to update " "accordingly." msgstr "" "Chạy game bằng phím :kbd:`F5` (:kbd:`Cmd + B` trên macOS) và ta thấy các quả " "bóng đã nảy hơn. Vì scene Ball là bản thiết kế mẫu, thay đổi nó sẽ làm tất " "cả các bản sao thay đổi theo." #: ../../docs/getting_started/step_by_step/instancing.rst:148 msgid "" "Let's now adjust an individual instance. Head back to the Main scene by " "clicking on the corresponding tab above the viewport." msgstr "" "Giờ ta hãy thay đổi chỉ một bản sao nào đó thử xem. Trở lại scene Main bằng " "cách click tab tương ứng phía trên viewport." #: ../../docs/getting_started/step_by_step/instancing.rst:153 #, fuzzy msgid "" "Select one of the instanced Ball nodes and, in the :ui:`Inspector`, set " "its :inspector:`Gravity Scale` value to ``10``." msgstr "" "Chọn một bản sao bất kỳ, xong qua cửa sổ Inspector, đổi Gravity Scale thành " "``10``." #: ../../docs/getting_started/step_by_step/instancing.rst:158 msgid "A grey \"revert\" button appears next to the adjusted property." msgstr "Một nút \"revert\" xuất hiện ngay bên cạnh thuộc tính vừa chỉnh." #: ../../docs/getting_started/step_by_step/instancing.rst:162 msgid "" "This icon indicates you are overriding a value from the source packed scene. " "Even if you modify the property in the original scene, the value override " "will be preserved in the instance. Clicking the revert icon will restore the " "property to the value in the saved scene." msgstr "" "Biểu tượng này biểu thị rằng bạn vừa ghi đè lên giá trị gốc. Sau này dù bạn " "có thay đổi giá trị trong scene gốc, thì giá trị ở đây cũng sẽ được giữ " "nguyên. Nhấn nút revert sẽ trả lại nguyên giá trị từ scene gốc." #: ../../docs/getting_started/step_by_step/instancing.rst:167 msgid "" "Rerun the game and notice how this ball now falls much faster than the " "others." msgstr "" "Chạy lại game và ta sẽ thấy riêng quả bóng này rớt nhanh hơn những quả còn " "lại." #: ../../docs/getting_started/step_by_step/instancing.rst:171 #, fuzzy msgid "" "You may notice you are unable to change the values of " "the :inspector:`PhysicsMaterial` of the ball. This is " "because :inspector:`PhysicsMaterial` is a *resource*, and needs to be made " "unique before you can edit it in a scene that is linking to its original " "scene. To make a resource unique for one instance, right-click on " "the :inspector:`Physics Material` property in the :ui:`Inspector` and " "click :button:`Make Unique` in the context menu." msgstr "" "Bạn có thể phát hiện ra rằng không thể thay đổi các giá trị " "``PhysicsMaterial`` của các bản sao. Điều này do ``PhysicsMaterial`` là một " "resource, và cần phải được tách riêng ra mới có thể chỉnh sửa cho từng bản " "sao. Để tách riêng resource cho một bản sao, click phải vào resource đó " "trong Inspector rồi chọn Make Unique trong menu hiện ra." #: ../../docs/getting_started/step_by_step/instancing.rst:178 msgid "" "Resources are another essential building block of Godot games we will cover " "in a later lesson." msgstr "" "Các resource cũng là một khối xây dựng căn bản trong Godot mà chúng ta sẽ " "bàn sau." #: ../../docs/getting_started/step_by_step/instancing.rst:182 msgid "Scene instances as a design language" msgstr "Các bản sao của scene là một ngôn ngữ thiết kế" #: ../../docs/getting_started/step_by_step/instancing.rst:184 msgid "" "Instances and scenes in Godot offer an excellent design language, setting " "the engine apart from others out there. We designed Godot around this " "concept from the ground up." msgstr "" "Các bản sao và các scene trong Godot cung cấp một ngôn ngữ thiết kế xuất " "sắc, làm cho nó khác biệt so với những engine còn lại ngoài kia. Chúng tôi " "thiết Godot từ con số 0 dựa trên ý tưởng này." #: ../../docs/getting_started/step_by_step/instancing.rst:188 msgid "" "We recommend dismissing architectural code patterns when making games with " "Godot, such as Model-View-Controller (MVC) or Entity-Relationship diagrams. " "Instead, you can start by imagining the elements players will see in your " "game and structure your code around them." msgstr "" "Chúng tôi khuyên bạn nên tạm quên những mô hình như Model-View-Controller " "(MVC) hay Entity-Relationship khi làm game với Godot. Thay vào đó, bạn có " "thể tưởng tượng những yếu tố mà người chơi sẽ nhìn thấy trong game và cấu " "trúc game của mình dựa theo đó." #: ../../docs/getting_started/step_by_step/instancing.rst:193 msgid "For example, you could break down a shooter game like so:" msgstr "Lấy ví dụ, bạn có thể chia nhỏ một game bắn súng như sau:" #: ../../docs/getting_started/step_by_step/instancing.rst:197 #, fuzzy msgid "" "You can come up with a diagram like this for almost any type of game. Each " "rectangle represents an entity that's visible in the game from the player's " "perspective. The arrows point towards the instantiator of each scene." msgstr "" "Bạn có thể vẽ sơ đồ như này cho bất kỳ thể loại game nào khác. Mỗi ô vuông " "thể hiện một thành phần khả thị trong game từ góc nhìn của người chơi. Các " "mũi tên cho biết scene nào nằm trong scene nào." #: ../../docs/getting_started/step_by_step/instancing.rst:201 msgid "" "Once you have a diagram, we recommend creating a scene for each element " "listed in it to develop your game. You'll use instancing, either by code or " "directly in the editor, to build your tree of scenes." msgstr "" "Một khi bạn đã có sơ đồ rồi thì chúng tôi khuyên bạn nên tạo một scene cho " "mỗi một thành phần như vậy. Bạn sẽ tạo các bản sao, dù bằng code hay bằng " "editor, để xây dựng cấu trúc scene tree của mình." #: ../../docs/getting_started/step_by_step/instancing.rst:205 msgid "" "Programmers tend to spend a lot of time designing abstract architectures and " "trying to fit components into it. Designing based on scenes makes " "development faster and more straightforward, allowing you to focus on the " "game logic itself. Because most game components map directly to a scene, " "using a design based on scene instantiation means you need little other " "architectural code." msgstr "" "Lập trình viên hay có xu hướng dành nhiều thời gian để thiết kế các kiến " "trúc trừu tượng rồi cố nhét các thành phần vô đó. Thiết kế dựa trên các " "scene thúc đẩy quá trình phát triển nhanh hơn và đơn giản hơn, giúp bạn tập " "trung vào logic game. Vì mỗi một thành phần là một scene, sử dụng thiết kế " "kiểu này nghĩa là bạn sẽ cần ít mã kiến trúc khác." #: ../../docs/getting_started/step_by_step/instancing.rst:211 msgid "" "Here's the example of a scene diagram for an open-world game with tons of " "assets and nested elements:" msgstr "" "Dưới đây là sơ đồ minh họa cho một game thế giới mở với nhiều asset và các " "yếu tố lồng ghép nhau:" #: ../../docs/getting_started/step_by_step/instancing.rst:216 msgid "" "Imagine we started by creating the room. We could make a couple of different " "room scenes, with unique arrangements of furniture in them. Later, we could " "make a house scene that uses multiple room instances for the interior. We " "would create a citadel out of many instanced houses and a large terrain on " "which we would place the citadel. Each of these would be a scene instancing " "one or more sub-scenes." msgstr "" "Hãy tưởng tượng ta sẽ khởi sự bằng việc tạo ra các căn phòng. Mỗi một phòng " "là một scene với cách bố trí nội thất khác nhau. Tiếp đến ta sắp xếp các " "phòng đó thành một scene căn hộ. Rồi ta xếp tầng các căn hộ đó thành một " "scene tòa cao ốc. Rồi lại đặt tòa cao ốc đó lên một địa hình rộng lớn " "hơn,... Các scene cứ lồng ghép vào nhau như thế." #: ../../docs/getting_started/step_by_step/instancing.rst:222 msgid "" "Later, we could create scenes representing guards and add them to the " "citadel. They would be indirectly added to the overall game world." msgstr "" "Chưa hết, ta có thể tạo mấy ông bảo vệ như là các scene rồi đặt mấy ổng vô " "tòa cao ốc. Chúng sẽ được gián tiếp thêm vào thế giới tổng thể của game." #: ../../docs/getting_started/step_by_step/instancing.rst:225 msgid "" "With Godot, it's easy to iterate on your game like this, as all you need to " "do is create and instantiate more scenes. We designed the editor to be " "accessible to programmers, designers, and artists alike. A typical team " "development process can involve 2D or 3D artists, level designers, game " "designers, and animators, all working with the Godot editor." msgstr "" "Với Godot, thật dễ dàng để phát triển game của bạn theo cách này, vì tất cả " "những gì bạn cần là tạo mẫu rồi nhân bản ra. Chúng tôi thiết kế editor sao " "cho bất kể lập trình viên, nhà thiết kế hay nghệ sĩ đều có thể dùng nó được. " "Một team điển hình bao gồm các nghệ sĩ 2D/3D, level designer, game designer " "và animator, đều làm việc trên Godot editor được hết." #: ../../docs/getting_started/step_by_step/instancing.rst:234 msgid "" "Instancing, the process of producing an object from a blueprint, has many " "handy uses. With scenes, it gives you:" msgstr "" "Tạo bản sao, là quá trình tạo một đối tượng từ một bản thiết kế mẫu, có " "nhiều cách sử dụng hữu ích. Các scene mang lại cho bạn:" #: ../../docs/getting_started/step_by_step/instancing.rst:237 msgid "The ability to divide your game into reusable components." msgstr "" "Khả năng chia nhỏ game của mình thành các thành phần có thể tái sử dụng." #: ../../docs/getting_started/step_by_step/instancing.rst:238 msgid "A tool to structure and encapsulate complex systems." msgstr "Một công cụ để kiến tạo và đóng gói các hệ thống phức tạp." #: ../../docs/getting_started/step_by_step/instancing.rst:239 msgid "" "A language to think about your game project's structure in a natural way." msgstr "Một ngôn ngữ để tư duy về cấu trúc game của bạn một cách tự nhiên." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:9 msgid "Scripting languages" msgstr "Các ngôn ngữ lập trình" #: ../../docs/getting_started/step_by_step/scripting_languages.rst:11 msgid "" "This lesson will give you an overview of the available scripting languages " "in Godot. You will learn the pros and cons of each option. In the next part, " "you will write your first script using GDScript." msgstr "" "Bài này sẽ trình bày tổng quan về các ngôn ngữ lập trình trong Godot. Bạn sẽ " "tìm hiểu về các ưu và nhược điểm của mỗi ngôn ngữ. Trong bài kế, ta sẽ viết " "mã lệnh đầu tiên bằng GDScript." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:15 msgid "" "**Scripts attach to a node and extend its behavior**. This means that " "scripts inherit all functions and properties of the node they attach to." msgstr "" "**Các script được đính kèm vào một node để mở rộng khả năng của nó**. Nghĩa " "là các script kế thừa mọi hàm và thuộc tính của node mà nó đính kèm." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:18 msgid "" "For example, take a game where a Camera2D node follows a ship. The Camera2D " "node follows its parent by default. Imagine you want the camera to shake " "when the player takes damage. As this feature is not built into Godot, you " "would attach a script to the Camera2D node and code the shake." msgstr "" "Ví dụ ta có một game trong đó có một node Camera2D bám theo một phi thuyền. " "Mặc định node Camera2D sẽ bám theo node cha của nó. Giả sử bạn muốn camera " "rung lắc mỗi khi người chơi bị trúng đạn. Vì tính năng này không được tích " "hợp sẵn vào Godot, bạn sẽ phải đính kèm một script vào node Camera2D và code " "thủ công." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:26 msgid "Available scripting languages" msgstr "Các ngôn ngữ khả dụng" #: ../../docs/getting_started/step_by_step/scripting_languages.rst:28 msgid "" "Godot offers **four gameplay programming languages**: GDScript, C#, and, via " "its GDExtension technology, C and C++. There are more community-supported " "languages, but these are the official ones." msgstr "" "Godot cung cấp **bốn ngôn ngữ lập trình gameplay**: GDScript, C#, và, thông " "qua công nghệ GDExtension, C và C++. Ngoài những cái chính thức này ra thì " "còn nhiều ngôn ngữ khác được cộng đồng hỗ trợ." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:32 msgid "" "You can use multiple languages in a single project. For instance, in a team, " "you could code gameplay logic in GDScript as it's fast to write, and use C# " "or C++ to implement complex algorithms and maximize their performance. Or " "you can write everything in GDScript or C#. It's your call." msgstr "" "Bạn có thể sử dụng nhiều ngôn ngữ trong một project. Ví dụ, trong một team, " "bạn có thể code logic game bằng GDScript vì nó dễ viết, rồi sử dụng C# hoặc " "C++ để cài đặt các thuật toán phức tạp và tối đa hoá hiệu suất game. Hoặc " "bạn có thể code toàn bộ bằng GDScript hoặc C#. Tuỳ ý bạn." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:37 msgid "" "We provide this flexibility to answer the needs of different game projects " "and developers." msgstr "" "Chúng tôi cung cấp sự linh hoạt này để đáp ứng nhu cầu của nhiều loại " "project và các nhà phát triển khác nhau." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:41 msgid "Which language should I use?" msgstr "Tôi nên sử dụng ngôn ngữ nào?" #: ../../docs/getting_started/step_by_step/scripting_languages.rst:43 msgid "" "If you're a beginner, we recommend to **start with GDScript**. We made this " "language specifically for Godot and the needs of game developers. It has a " "lightweight and straightforward syntax and provides the tightest integration " "with Godot." msgstr "" "Nếu bạn là người mới, chúng tôi khuyên nên **bắt đầu với GDScript**. Chúng " "tôi tạo ra ngôn ngữ này dành riêng cho Godot và cho nhu cầu của các nhà phát " "triển game. Nó có cú pháp nhẹ nhàng, dễ hiểu và được tích hợp chặt chẽ vào " "Godot." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:50 msgid "" "For C#, you will need an external code editor like `VSCode `_ or Visual Studio. While C# support is now mature, " "you will find fewer learning resources for it compared to GDScript. That's " "why we recommend C# mainly to users who already have experience with the " "language." msgstr "" "Còn với C#, bạn sẽ cần một editor bên ngoài như `VSCode `_ hoặc Visual Studio. Dù hỗ trợ cho C# hiện tại đã " "ngon lành, bạn sẽ tìm thấy ít học liệu cho nó hơn so với GDScript. Đó là lý " "do chúng tôi chỉ khuyến khích C# cho những ai đã có nhiều kinh nghiệm với " "ngôn ngữ này." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:56 msgid "Let's look at each language's features, as well as its pros and cons." msgstr "" "Giờ ta hãy xem qua tập tính năng của mỗi ngôn ngữ, cũng như những ưu nhược " "điểm của chúng." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:61 msgid "" ":ref:`GDScript` is an `object-oriented `_ and `imperative " "`_ programming " "language built for Godot. It's made by and for game developers to save you " "time coding games. Its features include:" msgstr "" ":ref:`GDScript` là một ngôn ngữ lập trình `hướng đối tượng " "`_ và `mệnh lệnh " "`_ được xây dựng cho " "Godot. Nó được tạo bởi các nhà phát triển game, cho các nhà phát triển game " "và vì các nhà phát triển game để tiết kiệm thời gian code. Nó bao gồm các " "tính năng:" #: ../../docs/getting_started/step_by_step/scripting_languages.rst:67 msgid "A simple syntax that leads to short files." msgstr "Cú pháp đơn giản giúp các file gọn hơn." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:68 msgid "Blazing fast compilation and loading times." msgstr "Thời gian biên dịch cũng như thời gian load cấp kỳ." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:69 msgid "" "Tight editor integration, with code completion for nodes, signals, and more " "information from the scene it's attached to." msgstr "" "Tích hợp chặt chẽ với editor, cùng code completion cho các node, các signal, " "và nhiều thông tin khác từ scene mà nó đính kèm." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:71 msgid "" "Built-in vector and transform types, making it efficient for heavy use of " "linear algebra, a must for games." msgstr "" "Tích hợp sẵn các kiểu vector và transform, khiến nó hiệu quả trong việc ứng " "dụng đại số tuyến tính, một điều bắt buộc trong game." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:73 msgid "Supports multiple threads as efficiently as statically typed languages." msgstr "Hỗ trợ đa tuyến hiệu quả như trong các ngôn ngữ kiểu tĩnh." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:74 msgid "" "No `garbage collection `_, as this feature eventually gets in " "the way when creating games. The engine counts references and manages the " "memory for you in most cases by default, but you can also control memory if " "you need to." msgstr "" "Không có `bộ thu gom rác `_, vì tính năng này trước sau gì cũng " "gây khó dễ khi tạo game. Mặc định thì engine sẽ ghi nhận các reference và sẽ " "quản lý bộ nhớ giùm bạn, tuy nhiên bạn có thể quản lý bộ nhớ thủ công nếu " "cần." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:79 msgid "" "`Gradual typing `_. Variables " "have dynamic types by default, but you also can use type hints for strong " "type checks." msgstr "" "`Kiểu gradual `_. Mặc định thì " "các biến sẽ có kiểu động, tuy nhiên bạn cũng có thể khai báo các biến tĩnh." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:83 msgid "" "GDScript looks like Python as you structure your code blocks using " "indentations, but it doesn't work the same way in practice. It's inspired by " "multiple languages, including Squirrel, Lua, and Python." msgstr "" "GDScript nhìn giống Python vì các khối lệnh được thụt đầu dòng, nhưng trong " "thực tế thì tụi nó không hoạt động giống nhau. Nó được lấy cảm hứng từ nhiều " "ngôn ngữ, bao gồm Squirrel, Lua, và Python." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:89 msgid "Why don't we use Python or Lua directly?" msgstr "Sao chúng tôi không trực tiếp xài Python hoặc Lua?" #: ../../docs/getting_started/step_by_step/scripting_languages.rst:91 msgid "" "Years ago, Godot used Python, then Lua. Both languages' integration took a " "lot of work and had severe limitations. For example, threading support was a " "big challenge with Python." msgstr "" "Nhiều năm trước, Godot xài Python, trước nữa là Lua. Cả hai ngôn ngữ này quá " "tốn công để tích hợp mà lại còn nhiều hạn chế. Ví dụ, hỗ trợ đa tuyến là một " "thử thách lớn với Python." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:95 msgid "" "Developing a dedicated language doesn't take us more work and we can tailor " "it to game developers' needs. We're now working on performance optimizations " "and features that would've been difficult to offer with third-party " "languages." msgstr "" "Việc phát triển một ngôn ngữ riêng không tốn mấy công sức và chúng tôi có " "thể chăm chút cho nhu cầu của các nhà làm game. Chúng tôi hiện đang nỗ lực " "tối ưu hoá hiệu suất và các tính năng mà khó có thể đạt được bằng các ngôn " "ngữ bên thứ ba khác." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:101 msgid ".NET / C#" msgstr ".NET / C #" #: ../../docs/getting_started/step_by_step/scripting_languages.rst:103 msgid "" "As Microsoft's `C# `_ is a favorite amongst game developers, we " "officially support it. C# is a mature and flexible language with tons of " "libraries written for it. We were able to add support for it thanks to a " "generous donation from Microsoft." msgstr "" "Vì `C# `_ của " "Microsoft là một ngôn ngữ được ưa chuộng trong giới làm game, nên chúng tôi " "chính thức hỗ trợ nó. C# là một ngôn ngữ lâu đời và linh động với rất nhiều " "thư viện được viết cho nó. Chúng tôi có thể hỗ trợ cho nó là nhờ sự tài trợ " "hào phóng từ Microsoft." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:111 msgid "" "C# offers a good tradeoff between performance and ease of use, although you " "should be aware of its garbage collector." msgstr "" "C# cung cấp một sự cân bằng tuyệt vời giữa hiệu suất và sự dễ xài, dù vậy " "bạn nên để ý về trình gom rác của nó." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:114 msgid "" "You must use the .NET edition of the Godot editor to script in C#. You can " "download it on the Godot website's `download `_ page." msgstr "" "Bạn phải sử dụng phiên bản .NET của Godot editor để code bằng C#. Bạn có thể " "`tải xuống `_ từ website của Godot." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:118 #, fuzzy msgid "" "Since Godot uses .NET 8, in theory, you can use any third-party .NET library " "or framework in Godot, as well as any Common Language Infrastructure-" "compliant programming language, such as F#, Boo, or ClojureCLR. However, C# " "is the only officially supported .NET option." msgstr "" "Vì Godot sử dụng .NET 6, về lý thuyết, bạn có thể sử dụng bất kỳ thư viện " "hoặc framework .NET nào trong Godot, cũng như bất kỳ ngôn ngữ nào biên dịch " "ra Common Language, như F#, Boo, hoặc ClojureCLR. Tuy nhiên, C# là cái duy " "nhất được hỗ trợ chính thức." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:123 msgid "" "GDScript code itself doesn't execute as fast as compiled C# or C++. However, " "most script code calls functions written with fast algorithms in C++ code " "inside the engine. In many cases, writing gameplay logic in GDScript, C#, or " "C++ won't have a significant impact on performance." msgstr "" "Bản thân code GDScript chạy không nhanh như code C# hoặc C++ được biên dịch. " "Tuy nhiên, hầu hết các đoạn code gọi các hàm được viết bằng C++ bên trong " "engine. Trong nhiều trường hợp, viết logic gameplay bằng GDScript, C#, hoặc " "C++ sẽ như nhau về hiệu suất cả ấy mà." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:136 #, fuzzy msgid "To learn more about C#, head to the :ref:`doc_c_sharp` section." msgstr "Để tìm hiểu thêm về C#, tham khảo :ref:`căn bản C#`." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:139 msgid "C++ via GDExtension" msgstr "C++ thông qua GDExtension" #: ../../docs/getting_started/step_by_step/scripting_languages.rst:141 msgid "" "GDExtension allows you to write game code in C++ without needing to " "recompile Godot." msgstr "" "GDExtension giúp bạn viết code game bằng C++ mà không cần phải biên dịch lại " "Godot." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:146 msgid "" "You can use any version of the language or mix compiler brands and versions " "for the generated shared libraries, thanks to our use of an internal C API " "Bridge." msgstr "" "Bạn có thể sử dụng bất kỳ phiên bản ngôn ngữ nào cũng như xài lẫn lộn nhiều " "trình biên dịch khác nhau để tạo các shared library, nhờ sử dụng C API " "Bridge." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:149 msgid "" "GDExtension is the best choice for performance. You don't need to use it " "throughout an entire game, as you can write other parts in GDScript or C#." msgstr "" "GDExtension là sự lựa chọn tốt nhất cho hiệu suất. Bạn không cần phải sử " "dụng nó cho toàn bộ game, vì bạn có thể viết các phần khác bằng GDScript " "hoặc C#." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:152 msgid "" "When working with GDExtension, the available types, functions, and " "properties closely resemble Godot's actual C++ API." msgstr "" "Khi làm việc với GDExtension, các kiểu, các hàm, và các thuộc tính khả dụng " "sẽ giống với API C++ của Godot." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:158 msgid "" "Scripts are files containing code that you attach to a node to extend its " "functionality." msgstr "" "Các script là các file chứa code mà bạn đính kèm với một node để mở rộng " "tính năng của nó." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:161 msgid "" "Godot supports four official scripting languages, offering you flexibility " "between performance and ease of use." msgstr "" "Godot hỗ trợ chính thức bốn ngôn ngữ lập trình, cung cấp cho bạn tính linh " "động giữa hiệu năng và sự dễ xài." #: ../../docs/getting_started/step_by_step/scripting_languages.rst:164 msgid "" "You can mix languages, for instance, to implement demanding algorithms with " "C or C++ and write most of the game logic with GDScript or C#." msgstr "" "Bạn có thể phối hợp nhiều ngôn ngữ, ví dụ, cài đặt các thuật toán nặng với C " "hoặc C++ và viết hầu hết logic game bằng GDScript hoặc C#." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:19 msgid "Creating your first script" msgstr "Tạo mã lệnh đầu tiên của bạn" #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:21 #, fuzzy msgid "" "In this lesson, you will code your first script to make the Godot icon turn " "in circles. As we mentioned :ref:`in the introduction " "`, we assume you have programming " "foundations." msgstr "" "Trong bài này, bạn sẽ tạo mã GDScript đầu tiên của mình để khiến biểu tượng " "Godot chạy vòng vòng. Như đã đề cập trong :ref:`phần giới thiệu `, chúng tôi giả định rằng bạn có nền tảng về lập trình. Để cho " "tiện thì mã C# tương ứng sẽ nằm trong tab kế bên." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:26 msgid "" "This tutorial is written for GDScript, and the equivalent C# code is " "included in another tab of each codeblock for convenience." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:31 #, fuzzy msgid "" "To learn more about GDScript, its keywords, and its syntax, head to " "the :ref:`doc_gdscript` section. To learn more about C#, head to " "the :ref:`doc_c_sharp` section." msgstr "" "Để tìm hiểu thêm về GDScript, các từ khoá, và cú pháp của nó, tham " "khảo :ref:`tham khảo GDScript`." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:36 msgid "Project setup" msgstr "Setup project" #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:38 msgid "" "Please :ref:`create a new project ` to " "start with a clean slate. Your project should contain one picture: the Godot " "icon, which we often use for prototyping in the community." msgstr "" "Vui lòng :ref:`tạo một project mới ` để " "bắt đầu. Project của bạn sẽ chứa một hình ảnh: biểu tượng Godot, chúng ta " "hay dùng nó để tạo prototype." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:44 #, fuzzy msgid "" "We need to create a Sprite2D node to display it in the game. In " "the :ui:`Scene` dock, click the :button:`Other Node` button." msgstr "" "Ta cần tạo một node Sprite2D để hiển thị nó trong game. Trong cửa sổ Scene, " "nhấp vào nút Other Node." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:49 msgid "" "Type \"Sprite2D\" in the search bar to filter nodes and double-click on " "Sprite2D to create the node." msgstr "" "Gõ \"Sprite2D\" trong thanh tìm kiếm để lọc nó ra và nhấp đúp vào Sprite2D " "để tạo node này." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:54 #, fuzzy msgid "Your :ui:`Scene` tab should now only have a Sprite2D node." msgstr "Trong tab Scene bạn sẽ thấy duy nhất node Sprite2D." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:58 #, fuzzy msgid "" "A Sprite2D node needs a texture to display. In the :ui:`Inspector` on the " "right, you can see that the :inspector:`Texture` property says ````. " "To display the Godot icon, click and drag the file ``icon.svg`` from the " "FileSystem dock onto the Texture slot." msgstr "" "Node Sprite2D cần một texture để hiển thị hình ảnh. Trong cửa sổ Inspector " "bên tay phải, bạn sẽ thấy thuộc tính Texture đang \"[empty]\". Để hiển thị " "biểu tượng Godot, nắm đầu file ``icon.svg`` từ FileSystem dock lôi vô thuộc " "tính Texture." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:67 msgid "" "You can create Sprite2D nodes automatically by dragging and dropping images " "on the viewport." msgstr "Nắm kéo các file ảnh vào trong viewport sẽ tự động tạo node Sprite2D." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:70 msgid "" "Then, click and drag the icon in the viewport to center it in the game view." msgstr "Giờ qua viewport ta nắm kéo biểu tượng vào giữa màn hình." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:75 msgid "Creating a new script" msgstr "Tạo script mới" #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:77 #, fuzzy msgid "" "To create and attach a new script to our node, right-click on Sprite2D in " "the Scene dock and select :button:`Attach Script`." msgstr "" "Để tạo và đính kèm một script mới vào node, ta click phải vào Sprite2D trong " "Scene dock rồi chọn \"Attach Script\"." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:82 #, fuzzy msgid "" "The :ui:`Attach Node Script` window appears. It allows you to select the " "script's language and file path, among other options." msgstr "" "Cửa sổ Attach Node Script xuất hiện. Tại đây bạn có thể chọn ngôn ngữ và " "đường dẫn file, cùng một vài tuỳ chọn khác." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:85 #, fuzzy msgid "" "Change the :ui:`Template` field from ``Node: Default`` to ``Object: Empty`` " "to start with a clean file. Leave the other options set to their default " "values and click the :button:`Create` button to create the script." msgstr "" "Trong mục Template, đổi \"Node: Default\" thành \"Object: Empty\" để có một " "file trống. Các mục khác ta để y nguyên rồi click nút Create để tạo script." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:93 msgid "" "C# script names need to match their class name. In this case, you should " "name the file ``MySprite2D.cs``." msgstr "" "Trong C# thì tên script phải trùng với tên class. Trong trường hợp này, tên " "file sẽ là ``MySprite2D.cs``." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:96 #, fuzzy msgid "" "The :ui:`Script` workspace should appear with your new ``sprite_2d.gd`` file " "open and the following line of code:" msgstr "" "Workspace Script sẽ hiện ra và mở file ``sprite_2d.gd`` với dòng code sau:" #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:113 msgid "" "Every GDScript file is implicitly a class. The ``extends`` keyword defines " "the class this script inherits or extends. In this case, it's ``Sprite2D``, " "meaning our script will get access to all the properties and functions of " "the Sprite2D node, including classes it extends, like ``Node2D``, " "``CanvasItem``, and ``Node``." msgstr "" "Mỗi file GDScript là một class. Từ khoá ``extends`` xác định class cha mà " "script này sẽ kế thừa. Trong trường hợp này, là ``Sprite2D``, nghĩa là " "script này có thể truy cập mọi thuộc tính và phương thức có trong node " "Sprite2D, và cả các class cha của nó như ``Node2D``, ``CanvasItem``, cũng " "như ``Node``." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:119 msgid "" "In GDScript, if you omit the line with the ``extends`` keyword, your class " "will implicitly extend :ref:`RefCounted `, which Godot " "uses to manage your application's memory." msgstr "" "Trong GDScript, nếu bạn bỏ qua dòng lệnh với từ khoá ``extends``, thì class " "này coi như là kế thừa từ class :ref:`RefCounted `, Godot " "dùng nó để quản lý bộ nhớ ứng dụng." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:123 #, fuzzy msgid "" "Inherited properties include the ones you can see in the :ui:`Inspector` " "dock, like our node's ``texture``." msgstr "" "Các thuộc tính được kế thừa sẽ xuất hiện trong cửa sổ Inspector, như là " "``texture`` trong node của chúng ta." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:128 #, fuzzy msgid "" "By default, the :ui:`Inspector` displays a node's properties in \"Title " "Case\", with capitalized words separated by a space. In GDScript code, these " "properties are in \"snake_case\", which is lowercase with words separated by " "an underscore." msgstr "" "Mặc định, các thuộc tính trong cửa sổ Inspector sẽ xuất hiện dưới dạng " "\"Title Case\", tức là viết hoa chữ cái đầu tiên của mỗi từ và cách nhau bởi " "một khoảng trắng. Trong mã GDScript, những thuộc tính này có dạng " "\"snake_case\", tức là viết thường mọi chữ cái và các từ cách nhau bằng một " "dấu gạch dưới (underscore)." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:132 #, fuzzy msgid "" "You can hover over any property's name in the :ui:`Inspector` to see a " "description and its identifier in code." msgstr "" "Bạn có thể di chuột lên bất kỳ thuộc tính nào trong cửa sổ Inspector để xem " "mô tả cũng như tên tương đương của nó trong code." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:136 msgid "Hello, world!" msgstr "Hello, world!" #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:138 msgid "" "Our script currently doesn't do anything. Let's make it print the text " "\"Hello, world!\" to the Output bottom panel to get started." msgstr "" "Hiện tại thì script của chúng ta chưa mần ăn gì cả. Giờ ta sẽ khiến nó ghi " "dòng chữ \"Hello, world!\" vào cửa sổ Output nằm dưới cùng màn hình." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:141 msgid "Add the following code to your script:" msgstr "Thêm đoạn mã sau vào script của bạn:" #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:157 msgid "" "Let's break it down. The ``func`` keyword defines a new function named " "``_init``. This is a special name for our class's constructor. The engine " "calls ``_init()`` on every object or node upon creating it in memory, if you " "define this function." msgstr "" "Giờ hãy phân tích qua một chút. Từ khoá ``func`` định nghĩa một hàm tên " "``_init``. Đây là một tên đặc biệt dành cho constructor của class. Mỗi lần " "tạo một object trong bộ nhớ, engine sẽ gọi hàm ``_init()`` nếu có." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:162 msgid "" "GDScript is an indent-based language. The tab at the start of the line that " "says ``print()`` is necessary for the code to work. If you omit it or don't " "indent a line correctly, the editor will highlight it in red and display the " "following error message: \"Indented block expected\"." msgstr "" "GDScript là một ngôn ngữ dạng thụt lề. Để code hoạt động thì dòng " "``print()`` phải được tab về bên phải. Nếu bạn không tab hoặc tab không " "chuẩn, editor sẽ báo lỗi dòng đó màu đỏ cùng với thông báo lỗi: \"Indented " "block expected\"." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:167 #, fuzzy msgid "" "Save the scene as ``sprite_2d.tscn`` if you haven't already, then " "press :kbd:`F6` (:kbd:`Cmd + R` on macOS) to run it. Look at " "the :ui:`Output` bottom panel that expands. It should display \"Hello, world!" "\"." msgstr "" "Lưu scene với tên ``sprite_2d.tscn`` nếu bạn chưa lưu, rồi nhấn :kbd:`F6` " "(:kbd:`Cmd + R` trên macOS) để chạy nó. Quan sát cửa sổ **Output** nằm dưới " "cùng màn hình. Nó hiển thị dòng chữ \"Hello, world!\"." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:173 msgid "" "Delete the ``_init()`` function, so you're only left with the line ``extends " "Sprite2D``." msgstr "" "Xoá hàm ``_init()``, và ta chỉ chừa lại mỗi dòng ``extends Sprite2D`` mà " "thôi." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:177 msgid "Turning around" msgstr "Xoay vòng vòng" #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:179 #, fuzzy msgid "" "It's time to make our node move and rotate. To do so, we're going to add two " "member variables to our script: the movement speed in pixels per second and " "the angular speed in radians per second. Add the following after the " "``extends Sprite2D`` line." msgstr "" "Giờ tới lúc làm cho node của chúng ta di chuyển và xoay vòng. Để làm được " "thế, ta thêm hai biến vào script: biến tốc độ di chuyển có đơn vị là pixels/" "giây và biến tốc độ góc với đơn vị radians/giây. Thêm đoạn mã này vào sau " "dòng ``extends Sprite2D``." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:194 msgid "" "Member variables sit near the top of the script, after any \"extends\" " "lines, but before functions. Every node instance with this script attached " "to it will have its own copy of the ``speed`` and ``angular_speed`` " "properties." msgstr "" "Các biến thành viên sẽ được đặt ở khúc đầu của script, sau các dòng " "\"extends\", nhưng trước các định nghĩa hàm. Cứ mỗi một bản sao của node này " "sẽ có ``speed`` và ``angular_speed`` của riêng bản sao đó." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:199 msgid "" "Angles in Godot work in radians by default, but you have built-in functions " "and properties available if you prefer to calculate angles in degrees " "instead." msgstr "" "Mặc định thì đơn vị góc trong Godot tính theo radian, tuy nhiên nếu bạn " "thích tính theo độ thay vì radian thì cũng có những hàm và thuộc tính tích " "hợp sẵn." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:203 msgid "" "To move our icon, we need to update its position and rotation every frame in " "the game loop. We can use the ``_process()`` virtual function of the " "``Node`` class. If you define it in any class that extends the Node class, " "like Sprite2D, Godot will call the function every frame and pass it an " "argument named ``delta``, the time elapsed since the last frame." msgstr "" "Để di chuyển biểu tượng, chúng ta cần cập nhật vị trí cũng như góc quay của " "nó mỗi frame. Ta có thể sử dụng hàm ảo ``_process()`` của class ``Node``. " "Nếu bạn định nghĩa hàm này trong bất kỳ class nào kế thừa từ class Node, như " "Sprite2D, Godot sẽ gọi nó mỗi frame và truyền vào một tham số tên ``delta``, " "là khoảng thời gian trôi qua kể từ khi frame trước đó được render." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:211 msgid "" "Games work by rendering many images per second, each called a frame, and " "they do so in a loop. We measure the rate at which a game produces images in " "Frames Per Second (FPS). Most games aim for 60 FPS, although you might find " "figures like 30 FPS on slower mobile devices or 90 to 240 for virtual " "reality games." msgstr "" "Các game hoạt động bằng cách render nhiều hình ảnh mỗi giây, mỗi hình như " "thế gọi là một frame, và cứ thế lặp lại. Ta đo tốc độ này với đơn vị Số " "Frame Mỗi Giây (Frames Per Second) hay FPS. Hầu hết các game nhắm mục tiêu " "chạy 60 FPS, mặc dù có thể là 30 FPS trên di động và 90 tới 240 cho các game " "thực tế ảo." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:217 msgid "" "The engine and game developers do their best to update the game world and " "render images at a constant time interval, but there are always small " "variations in frame render times. That's why the engine provides us with " "this delta time value, making our motion independent of our framerate." msgstr "" "Các nhà làm engine và các nhà làm game cố gắng hết sức để cập nhật thế giới " "game và render hình ảnh ổn định nhất có thể, tuy nhiên khó tránh khỏi những " "sai biệt nhỏ trong thời gian render mỗi frame. Đó là lý do mà engine cung " "cấp cho ta giá trị delta, làm các chuyển động không phụ thuộc vào tốc độ " "khung hình." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:222 msgid "At the bottom of the script, define the function:" msgstr "Ở cuối script, ta định nghĩa hàm:" #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:237 msgid "" "The ``func`` keyword defines a new function. After it, we have to write the " "function's name and arguments it takes in parentheses. A colon ends the " "definition, and the indented blocks that follow are the function's content " "or instructions." msgstr "" "Từ khoá ``func`` định nghĩa một hàm mới. Sau nó, ta phải viết tên hàm cùng " "các tham số trong cặp ngoặc tròn. Dấu hai chấm dùng để kết thúc định nghĩa " "hàm, sau đó phần nội dung hàm sẽ là một khối lệnh được thụt lề." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:242 msgid "" "Notice how ``_process()``, like ``_init()``, starts with a leading " "underscore. By convention, Godot's virtual functions, that is to say, built-" "in functions you can override to communicate with the engine, start with an " "underscore." msgstr "" "Lưu ý rằng hàm ``_process()`` cũng bắt đầu bằng một dấu gạch chân như hàm " "``_init()``. Theo quy ước thì các hàm ảo của Godot, là các hàm tích hợp sẵn " "để ta override nhằm giao tiếp với engine, sẽ bắt đầu bằng một dấu gạch chân." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:247 msgid "" "The line inside the function, ``rotation += angular_speed * delta``, " "increments our sprite's rotation every frame. Here, ``rotation`` is a " "property inherited from the class ``Node2D``, which ``Sprite2D`` extends. It " "controls the rotation of our node and works with radians." msgstr "" "Dòng lệnh bên trong hàm, ``rotation += angular_speed * delta``, sẽ tăng góc " "quay của sprite mỗi frame. Ở đây, ``rotation`` là thuộc tính kế thừa từ " "class ``Node2D``, lớp cha của ``Sprite2D``. Nó điều khiển góc quay của node " "và tính theo radian." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:252 #, fuzzy msgid "" "In the code editor, you can :kbd:`Ctrl + Click` (:kbd:`Cmd + Click` on " "macOS) on any built-in property or function like ``position``, ``rotation``, " "or ``_process`` to open the corresponding documentation in a new tab." msgstr "" "Trong code editor, bạn có thể Ctrl-click (Cmd-click trên MacOS) lên bất kỳ " "thuộc tính hoặc hàm sẵn có nào như ``position``, ``rotation``, hoặc " "``_process`` để mở tài liệu tương ứng trong một tab mới." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:257 msgid "Run the scene to see the Godot icon turn in-place." msgstr "Chạy scene để thấy biểu tượng Godot xoay tại chỗ." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:261 msgid "" "In C#, notice how the ``delta`` argument taken by ``_Process()`` is a " "``double``. We therefore need to convert it to ``float`` when we apply it to " "the rotation." msgstr "" "Trong C#, lưu ý rằng tham số ``delta`` của hàm ``_Process()`` có kiểu " "``double``. Do đó ta cần ép kiểu về ``float`` rồi mới đem xài vào rotation " "được." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:266 msgid "Moving forward" msgstr "Tiến về trước" #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:268 msgid "" "Let's now make the node move. Add the following two lines inside of the " "``_process()`` function, ensuring the new lines are indented the same way as " "the ``rotation += angular_speed * delta`` line before them." msgstr "" "Giờ ta sẽ khiến cho node di chuyển. Thêm hai dòng sau vào hàm " "``_process()``, và canh lề cho giống với dòng ``rotation += angular_speed * " "delta`` trước đó." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:285 msgid "" "As we already saw, the ``var`` keyword defines a new variable. If you put it " "at the top of the script, it defines a property of the class. Inside a " "function, it defines a local variable: it only exists within the function's " "scope." msgstr "" "Ta đã biết từ khoá ``var`` dùng để định nghĩa một biến mới. Nếu bạn đặt nó ở " "đầu script, nó định nghĩa một thuộc tính của class. Nếu đặt bên trong hàm, " "nó định nghĩa một biến cục bộ: chỉ tồn tại bên trong phạm vi hàm đó." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:289 msgid "" "We define a local variable named ``velocity``, a 2D vector representing both " "a direction and a speed. To make the node move forward, we start from the " "Vector2 class's constant ``Vector2.UP``, a vector pointing up, and rotate it " "by calling the Vector2 method ``rotated()``. This expression, " "``Vector2.UP.rotated(rotation)``, is a vector pointing forward relative to " "our icon. Multiplied by our ``speed`` property, it gives us a velocity we " "can use to move the node forward." msgstr "" "Chúng ta định nghĩa một biến cục bộ tên ``velocity``, là một vector 2D biểu " "diễn cả hướng và tốc độ. Để khiến node tiến tới, ta bắt đầu với hằng số " "``Vector2.UP`` của class Vector2, một vector hướng lên, rồi xoay nó bằng " "cách gọi phương thức ``rotated()`` của Vector2. Biểu thức " "``Vector2.UP.rotated(rotation)``, là một vector hướng về phía trước của " "chính icon. Nhân nó với thuộc tính ``speed``, ta được một vận tốc dùng để di " "chuyển node về phía trước." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:296 msgid "" "We add ``velocity * delta`` to the node's ``position`` to move it. The " "position itself is of type :ref:`Vector2 `, a built-in type " "in Godot representing a 2D vector." msgstr "" "Ta cộng ``velocity * delta`` vào ``position`` của node để di chuyển nó. " "Position có kiểu :ref:`Vector2 `, một kiểu vector 2D được " "tích hợp sẵn trong Godot." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:300 msgid "Run the scene to see the Godot head run in circles." msgstr "Chạy scene và ta thấy biểu tượng Godot chạy vòng vòng." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:304 msgid "" "Moving a node like that does not take into account colliding with walls or " "the floor. In :ref:`doc_your_first_2d_game`, you will learn another approach " "to moving objects while detecting collisions." msgstr "" "Di chuyển một node như vầy là chưa tính đến xử lý va chạm với tường hoặc " "sàn. Trong :ref:`doc_your_first_2d_game`, bạn sẽ tìm hiểu cách di chuyển các " "đối tượng có tính đến phát hiện va chạm." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:308 msgid "" "Our node currently moves by itself. In the next " "part, :ref:`doc_scripting_player_input`, we'll use player input to control " "it." msgstr "" "Hiện tại thì cái node này nó tự di chuyển. Trong bài " "kế, :ref:`doc_scripting_player_input`, chúng ta sẽ dùng input của người chơi " "để điều khiển nó." #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:312 #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:132 #: ../../docs/getting_started/step_by_step/signals.rst:369 msgid "Complete script" msgstr "Hoàn tất script" #: ../../docs/getting_started/step_by_step/scripting_first_script.rst:314 #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:134 msgid "Here is the complete ``sprite_2d.gd`` file for reference." msgstr "Đây là file ``sprite_2d.gd`` hoàn chỉnh để tham khảo." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:8 msgid "Listening to player input" msgstr "Lắng nghe input của người chơi" #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:10 msgid "" "Building upon the previous lesson, :ref:`doc_scripting_first_script`, let's " "look at another important feature of any game: giving control to the player. " "To add this, we need to modify our ``sprite_2d.gd`` code." msgstr "" "Dựa trên bài trước, :ref:`doc_scripting_first_script`, giờ ta xem qua một " "tính năng quan trọng trong bất kỳ game nào: trao quyền điều khiển cho người " "chơi. Để làm được vậy, ta sẽ chỉnh sửa lại code trong ``sprite_2d.gd``." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:16 msgid "You have two main tools to process the player's input in Godot:" msgstr "Bạn có hai công cụ chính để xử lý input của người chơi trong Godot:" #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:18 msgid "" "The built-in input callbacks, mainly ``_unhandled_input()``. Like " "``_process()``, it's a built-in virtual function that Godot calls every time " "the player presses a key. It's the tool you want to use to react to events " "that don't happen every frame, like pressing :kbd:`Space` to jump. To learn " "more about input callbacks, see :ref:`doc_inputevent`." msgstr "" "Sử dụng các input callback được tích hợp sẵn, chủ yếu là " "``_unhandled_input()``. Cũng giống ``_process()``, là một hàm ảo được tích " "hợp sẵn mà Godot sẽ gọi nó mỗi lần người chơi nhấn một phím. Đây là công cụ " "mà bạn sẽ muốn sử dụng để phản hồi lại các sự kiện mà không xảy ra mỗi " "frame, như nhấn :kbd:`Space` để nhảy. Để tìm hiểu thêm về các input " "callback, xem :ref:`doc_inputevent`." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:23 msgid "" "The ``Input`` singleton. A singleton is a globally accessible object. Godot " "provides access to several in scripts. It's the right tool to check for " "input every frame." msgstr "" "Sử dụng singletone ``Input``. Một singleton là một object toàn cục. Godot " "cung cấp quyền truy cập vào một số singleton trong script. Đây là công cụ để " "check input mỗi frame." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:27 msgid "" "We're going to use the ``Input`` singleton here as we need to know if the " "player wants to turn or move every frame." msgstr "" "Ta sẽ sử dụng singleton ``Input`` ở đây vì chúng ta cần biết liệu người chơi " "có muốn xoay hay di chuyển mỗi frame hay không." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:30 msgid "" "For turning, we should use a new variable: ``direction``. In our " "``_process()`` function, replace the ``rotation += angular_speed * delta`` " "line with the code below." msgstr "" "Để quẹo trái phải, chúng ta sử dụng một biến mới: ``direction``. Trong hàm " "``_process()``, thay dòng ``rotation += angular_speed * delta`` thành đoạn " "code sau đây." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:59 msgid "" "Our ``direction`` local variable is a multiplier representing the direction " "in which the player wants to turn. A value of ``0`` means the player isn't " "pressing the left or the right arrow key. A value of ``1`` means the player " "wants to turn right, and ``-1`` means they want to turn left." msgstr "" "Biến cục bộ ``direction`` là một thừa số biểu diễn hướng mà người chơi muốn " "quẹo. Giá trị ``0`` nghĩa là người chơi không nhấn phím mũi tên nào. Giá trí " "``1`` nghĩa là người chơi muốn quẹo phải, và ``-1`` nghĩa là họ muốn quẹo " "trái." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:64 #, fuzzy msgid "" "To produce these values, we introduce conditional statements and the use of " "``Input``. A conditional statement starts with the ``if`` keyword in " "GDScript and ends with a colon. The condition is specifically the expression " "between the keyword and the colon at the end of the line." msgstr "" "Để tạo ra các giá trị này, chúng ta dùng câu lệnh điều kiện và sử dụng " "``Input``. Trong GDScript một câu lệnh điều kiện bắt đầu với từ khoá ``if``, " "kết thúc bằng một dấu hai chấm và biểu thức điều kiện nằm chính giữa." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:69 msgid "" "To check if a key was pressed this frame, we call " "``Input.is_action_pressed()``. The method takes a text string representing " "an input action and returns ``true`` if the action is pressed, ``false`` " "otherwise." msgstr "" "Để kiểm tra xem một phím có được nhấn không, ta gọi hàm " "``Input.is_action_pressed()``. Hàm này nhận tham số là một chuỗi biểu diễn " "một nút trên bàn phím và trả về ``true`` nếu phím đó được nhấn, ``false`` " "nếu không." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:73 msgid "" "The two actions we use above, \"ui_left\" and \"ui_right\", are predefined " "in every Godot project. They respectively trigger when the player presses " "the left and right arrows on the keyboard or left and right on a gamepad's D-" "pad." msgstr "" "Hai nút bấm ta sử dụng trong đoạn lệnh trên, \"ui_left\" và \"ui_right\", " "được định nghĩa sẵn trong mọi project Godot. Nó được kích hoạt khi người " "chơi nhấn nút mũi tên qua trái hoặc qua phải trên bàn phím máy tính hoặc " "trên D-pad của gamepad." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:77 #, fuzzy msgid "" "You can see and edit input actions in your project by going " "to :menu:`Project > Project Settings` and clicking on the :ui:`Input Map` " "tab." msgstr "" "Bạn có thể xem và chỉnh sửa những nút này trong project của mình bằng cách " "vào menu Project -> Project Settings rồi chọn tab Input Map." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:80 msgid "" "Finally, we use the ``direction`` as a multiplier when we update the node's " "``rotation``: ``rotation += angular_speed * direction * delta``." msgstr "" "Cuối cùng, chúng ta sử dụng ``direction`` như là một thừa số để cập nhật " "``rotation`` của node: ``rotation += angular_speed * direction * delta``." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:83 msgid "" "Comment out the lines ``var velocity = Vector2.UP.rotated(rotation) * " "speed`` and ``position += velocity * delta`` like this:" msgstr "" "Comment dòng ``var velocity = Vector2.UP.rotated(rotation) * speed`` và " "``position += velocity * delta`` như này:" #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:99 msgid "" "This will ignore the code that moved the icon's position in a circle without " "user input from the previous exercise." msgstr "Cái này sẽ bỏ qua lệnh di chuyển icon lòng vòng trong bài trước." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:101 msgid "" "If you run the scene with this code, the icon should rotate when you " "press :kbd:`Left` and :kbd:`Right`." msgstr "" "Nếu bạn chạy scene với đoạn code trên, biểu tượng sẽ xoay khi bạn " "nhấn :kbd:`Left` hoặc :kbd:`Right`." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:105 msgid "Moving when pressing \"up\"" msgstr "Di chuyển bằng nút \"lên\"" #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:107 msgid "" "To only move when pressing a key, we need to modify the code that calculates " "the velocity. Uncomment the code and replace the line starting with ``var " "velocity`` with the code below." msgstr "" "Nếu muốn biểu tượng chỉ di chuyển mỗi lần nhấn nút mũi tên lên, ta cần chỉnh " "lại đoạn code tính vận tốc. Bỏ comment đi và thay dòng lệnh bắt đầu bằng " "``var velocity`` thành đoạn code dưới đây." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:125 msgid "" "We initialize the ``velocity`` with a value of ``Vector2.ZERO``, another " "constant of the built-in ``Vector`` type representing a 2D vector of length " "0." msgstr "" "Ta khởi tạo ``velocity`` bằng giá trị ``Vector2.ZERO``, là một hằng số kiểu " "``Vector`` được tích hợp sẵn, nó biểu diễn một vector 2D có độ lớn bằng 0." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:128 msgid "" "If the player presses the \"ui_up\" action, we then update the velocity's " "value, causing the sprite to move forward." msgstr "" "Mỗi khi người chơi nhấn nút \"ui_up\", chúng ta mới cập nhật giá trị của " "velocity, làm sprite di chuyển." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:193 msgid "" "If you run the scene, you should now be able to rotate with the left and " "right arrow keys and move forward by pressing :kbd:`Up`." msgstr "" "Nếu bạn chạy scene, giờ bạn có thể quẹo bằng các nút mũi tên trái phải và " "chạy tới bằng nút :kbd:`Up`." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:201 msgid "" "In summary, every script in Godot represents a class and extends one of the " "engine's built-in classes. The node types your classes inherit from give you " "access to properties, such as ``rotation`` and ``position`` in our sprite's " "case. You also inherit many functions, which we didn't get to use in this " "example." msgstr "" "Tóm lại, mỗi script trong Godot biểu diễn một class và kế thừa từ một class " "nào đó sẵn có trong engine. Ta kế thừa từ class nào thì ta sẽ có thể truy " "cập tới tất cả các thuộc tính của class cha đó, như ``rotation`` và " "``position`` trong trường hợp của chúng ta. Ta cũng có thể truy cập các hàm " "của class cha nữa, tuy nhiên trong bài này chúng ta chưa xài tới chức năng " "đó." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:206 msgid "" "In GDScript, the variables you put at the top of the file are your class's " "properties, also called member variables. Besides variables, you can define " "functions, which, for the most part, will be your classes' methods." msgstr "" "Trong GDScript, các biến đặt ở đầu script là các thuộc tính của class, còn " "được gọi là các biến thành viên. Ngoài các biến, bạn còn định nghĩa các hàm, " "chúng sẽ được coi như các phương thức của class." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:210 msgid "" "Godot provides several virtual functions you can define to connect your " "class with the engine. These include ``_process()``, to apply changes to the " "node every frame, and ``_unhandled_input()``, to receive input events like " "key and button presses from the users. There are quite a few more." msgstr "" "Godot cung cấp nhiều hàm ảo để ta kết nối class của mình với engine. Trong " "số đó có hàm ``_process()``, chạy mỗi frame, và ``_unhandled_input()``, nhận " "input từ người dùng để check xem một phím có được nhấn không. Và còn nhiều " "nữa." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:215 #, fuzzy msgid "" "The ``Input`` singleton allows you to react to the player's input anywhere " "in your code. In particular, you'll get to use it in the ``_process()`` loop." msgstr "" "Singleton ``Input`` cho phép bạn phản hồi lại input của người chơi từ bất kỳ " "đâu trong code của mình. Trong thực tế, ta hay xài nó trong vòng lặp " "``_process()``." #: ../../docs/getting_started/step_by_step/scripting_player_input.rst:218 msgid "" "In the next lesson, :ref:`doc_signals`, we'll build upon the relationship " "between scripts and nodes by having our nodes trigger code in scripts." msgstr "" "Trong bài kế, :ref:`doc_signals`, chúng ta sẽ xây dựng mối quan hệ giữa " "script và node bằng cách để cho node gọi code trong script." #: ../../docs/getting_started/step_by_step/signals.rst:-1 #: ../../docs/tutorials/scripting/gdscript/gdscript_documentation_comments.rst:78 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_differences.rst:601 #: ../../docs/tutorials/scripting/instancing_with_signals.rst:-1 msgid "Signal" msgstr "Signal" #: ../../docs/getting_started/step_by_step/signals.rst:12 msgid "Using signals" msgstr "Sử dụng các signal" #: ../../docs/getting_started/step_by_step/signals.rst:14 msgid "" "In this lesson, we will look at signals. They are messages that nodes emit " "when something specific happens to them, like a button being pressed. Other " "nodes can connect to that signal and call a function when the event occurs." msgstr "" "Trong bài này, chúng ta sẽ tìm hiểu về các signal. Là các thông điệp được " "các node bắn đi khi có một sự kiện đặc biệt gì đó xảy ra với chúng, như là " "một nút bấm được nhấn xuống. Các node khác có thể ngóng các signal này và " "gọi một hàm khi sự kiện xảy ra." #: ../../docs/getting_started/step_by_step/signals.rst:18 msgid "" "Signals are a delegation mechanism built into Godot that allows one game " "object to react to a change in another without them referencing one another. " "Using signals limits `coupling `_ and keeps your code flexible." msgstr "" "Signal là một cơ chế delegation được tích hợp trong Godot cho phép một đối " "tượng đáp lại sự thay đổi của đối tượng khác mà không cần tham chiếu lẫn " "nhau. Xài signal giúp hạn chế việc sử dụng `coupling `_ và giữ cho code của " "bạn linh hoạt." #: ../../docs/getting_started/step_by_step/signals.rst:24 msgid "" "For example, you might have a life bar on the screen that represents the " "player's health. When the player takes damage or uses a healing potion, you " "want the bar to reflect the change. To do so, in Godot, you would use " "signals." msgstr "" "Lấy ví dụ, bạn có thể muốn một thanh máu để hiển thị máu của người chơi. Khi " "người chơi bị thương hoặc dùng vật phẩm chữa thương, bạn sẽ muốn thanh máu " "phản ánh sự thay đổi đó. Để làm được vậy trong Godot, bạn cần dùng các " "signal." #: ../../docs/getting_started/step_by_step/signals.rst:28 msgid "" "Like methods (:ref:`class_callable`), signals are a first-class type since " "Godot 4.0. This means you can pass them around as method arguments directly " "without having to pass them as strings, which allows for better " "autocompletion and is less error-prone. See the :ref:`class_signal` class " "reference for a list of what you can do with the Signal type directly." msgstr "" "Giống như các phương thức (:ref:`class_callable`), tín hiệu là một kiểu hạng " "nhất kể từ Godot 4.0. Điều này có nghĩa là bạn có thể truyền chúng xung " "quanh dưới dạng đối số phương thức trực tiếp mà không cần phải truyền chúng " "dưới dạng chuỗi, cho phép tự động hoàn thành tốt hơn và ít xảy ra lỗi hơn. " "Xem tham chiếu lớp :ref:`class_signal` để biết danh sách những gì bạn có thể " "làm với kiểu Signal trực tiếp." #: ../../docs/getting_started/step_by_step/signals.rst:36 msgid "" "As mentioned in the introduction, signals are Godot's version of the " "observer pattern. You can learn more about it in `Game Programming Patterns " "`__." msgstr "" "Như đã đề cập trong phần giới thiệu, signal là mô hình observer phiên bản " "dành riêng cho Godot. Bạn có thể tìm hiểu thêm về nó ở đây: https://" "gameprogrammingpatterns.com/observer.html" #: ../../docs/getting_started/step_by_step/signals.rst:40 msgid "" "We will now use a signal to make our Godot icon from the previous lesson " "(:ref:`doc_scripting_player_input`) move and stop by pressing a button." msgstr "" "Giờ chúng ta sẽ sử dụng signal để khiến biểu tượng Godot trong bài trước " "(:ref:`doc_scripting_player_input`) di chuyển hoặc ngừng lại bằng cách nhấn " "nút." #: ../../docs/getting_started/step_by_step/signals.rst:43 #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:50 #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:9 msgid "For this project, we will be following the Godot naming conventions." msgstr "Đối với dự án này, chúng tôi sẽ tuân theo các quy ước đặt tên Godot." #: ../../docs/getting_started/step_by_step/signals.rst:45 #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:52 #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:11 msgid "" "**GDScript**: Classes (nodes) use PascalCase, variables and functions use " "snake_case, and constants use ALL_CAPS (See :ref:`doc_gdscript_styleguide`)." msgstr "" "**GDScript**: Các lớp (node) sử dụng PascalCase, các biến và hàm sử dụng " "snake_case và các hằng sử dụng ALL_CAPS (Xem: ref: " "`doc_gdscript_styleguide`)." #: ../../docs/getting_started/step_by_step/signals.rst:49 #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:56 #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:15 msgid "" "**C#**: Classes, export variables and methods use PascalCase, private fields " "use _camelCase, local variables and parameters use camelCase " "(See :ref:`doc_c_sharp_styleguide`). Be careful to type the method names " "precisely when connecting signals." msgstr "" "**C #**: Các lớp, biến xuất và phương thức sử dụng PascalCase, trường riêng " "sử dụng _camelCase, biến cục bộ và tham số sử dụng camelCase (Xem: ref: " "`doc_c_sharp_styleguide`). Hãy cẩn thận để nhập tên phương thức chính xác " "khi kết nối tín hiệu." #: ../../docs/getting_started/step_by_step/signals.rst:55 #: ../../docs/tutorials/animation/introduction.rst:108 #: ../../docs/tutorials/physics/kinematic_character_2d.rst:77 msgid "Scene setup" msgstr "Setup scene" #: ../../docs/getting_started/step_by_step/signals.rst:57 msgid "" "To add a button to our game, we will create a new scene which will include " "both a :ref:`Button ` and the ``sprite_2d.tscn`` scene we " "created in the :ref:`doc_scripting_first_script` lesson." msgstr "" "Để thêm một nút bấm vào game, ta sẽ tạo một scene mới, scene này bao gồm " "một :ref:`Button ` và scene ``sprite_2d.tscn`` đã tạo từ " "bài :ref:`doc_scripting_first_script`." #: ../../docs/getting_started/step_by_step/signals.rst:61 #, fuzzy msgid "Create a new scene by going to the menu :menu:`Scene > New Scene`." msgstr "Tạo một scene mới bằng menu Scene -> New Scene." #: ../../docs/getting_started/step_by_step/signals.rst:65 #, fuzzy msgid "" "In the Scene dock, click the :button:`2D Scene` button. This will add " "a :ref:`Node2D ` as our root." msgstr "" "Trong cửa sổ Scene, click nút 2D Scene. Nút này sẽ thêm :ref:`Node2D " "` làm node gốc." #: ../../docs/getting_started/step_by_step/signals.rst:70 msgid "" "In the FileSystem dock, click and drag the ``sprite_2d.tscn`` file you saved " "previously onto the Node2D to instantiate it." msgstr "" "Trong cửa sổ FileSystem, kéo thả file ``sprite_2d.tscn`` mà ta đã lưu từ bài " "trước vào Node2D để tạo bản sao của nó." #: ../../docs/getting_started/step_by_step/signals.rst:75 #, fuzzy msgid "" "We want to add another node as a sibling of the Sprite2D. To do so, right-" "click on Node2D and select :button:`Add Child Node`." msgstr "" "Giờ tới lượt thêm nút bấm. Để làm vậy, click phải vào Node2D rồi chọn Add " "Child Node." #: ../../docs/getting_started/step_by_step/signals.rst:80 msgid "Search for the :ref:`Button ` node and add it." msgstr "Tìm kiếm node :ref:`Button ` rồi thêm nó vào." #: ../../docs/getting_started/step_by_step/signals.rst:84 msgid "" "The node is small by default. Click and drag on the bottom-right handle of " "the Button in the viewport to resize it." msgstr "" "Mặc định thì nó hơi nhỏ. Nắm kéo mấy nút tròn tròn xung quanh Button để thay " "đổi kích cỡ nó." #: ../../docs/getting_started/step_by_step/signals.rst:89 msgid "" "If you don't see the handles, ensure the select tool is active in the " "toolbar." msgstr "" "Nếu mà bạn không thấy mấy nút tròn tròn đó, coi chừng công cụ lựa chọn trên " "toolbar chưa được kích hoạt." #: ../../docs/getting_started/step_by_step/signals.rst:93 msgid "Click and drag on the button itself to move it closer to the sprite." msgstr "Kéo nút bấm lại gần sprite một tí." #: ../../docs/getting_started/step_by_step/signals.rst:95 #, fuzzy msgid "" "You can also write a label on the Button by editing its :inspector:`Text` " "property in the :ui:`Inspector`. Enter ``Toggle motion``." msgstr "" "Bạn cũng có thể gán nhãn cho Button bằng cách thay đổi thuộc tính Text trong " "cửa sổ Inspector. Nhập vào ``Toggle motion``." #: ../../docs/getting_started/step_by_step/signals.rst:100 msgid "Your scene tree and viewport should look like this." msgstr "Scene và viewport của bạn sẽ trông như này." #: ../../docs/getting_started/step_by_step/signals.rst:104 msgid "" "Save your newly created scene as ``node_2d.tscn``, if you haven't already. " "You can then run it with :kbd:`F6` (:kbd:`Cmd + R` on macOS). At the moment, " "the button will be visible, but nothing will happen if you press it." msgstr "" "Nếu bạn chưa lưu, hãy lưu lại với tên ``node_2d.tscn``. Bạn có thể chạy lên " "bằng phím :kbd:`F6` (:kbd:`Cmd + R` trên macOS). Tuy nút bấm đã hiện lên, " "nhưng bấm nó không nhúc nhích." #: ../../docs/getting_started/step_by_step/signals.rst:110 msgid "Connecting a signal in the editor" msgstr "Cách kết nối signal trong editor" #: ../../docs/getting_started/step_by_step/signals.rst:112 msgid "" "Here, we want to connect the Button's \"pressed\" signal to our Sprite2D, " "and we want to call a new function that will toggle its motion on and off. " "We need to have a script attached to the Sprite2D node, which we do from the " "previous lesson." msgstr "" "Giờ ta muốn kết nối tín hiệu \"pressed\" của Button tới Sprite2D, để mỗi lần " "nút được nhấn thì một hàm được gọi để thay đổi trạng thái chuyển động của " "sprite. Ta cần phải đính kèm script vào node Sprite2D, như đã làm trong bài " "trước." #: ../../docs/getting_started/step_by_step/signals.rst:117 #, fuzzy msgid "" "You can connect signals in the :ui:`Node` dock. Select the Button node and, " "on the right side of the editor, click on the tab named :ui:`Node` next to " "the :ui:`Inspector`." msgstr "" "Bạn có thể kết nối các signal bằng cửa sổ Node. Chọn node Button trước, sau " "đó ở mé bên phải của editor, click tab \"Node\" kế bên Inspector." #: ../../docs/getting_started/step_by_step/signals.rst:123 msgid "The dock displays a list of signals available on the selected node." msgstr "" "Cửa sổ này hiển thị một danh sách các signal khả dụng của node đang được " "chọn." #: ../../docs/getting_started/step_by_step/signals.rst:127 msgid "Double-click the \"pressed\" signal to open the node connection window." msgstr "Click đúp vào signal \"pressed\" để mở cửa sổ kết nối." #: ../../docs/getting_started/step_by_step/signals.rst:131 msgid "" "There, you can connect the signal to the Sprite2D node. The node needs a " "receiver method, a function that Godot will call when the Button emits the " "signal. The editor generates one for you. By convention, we name these " "callback methods \"_on_node_name_signal_name\". Here, it'll be " "\"_on_button_pressed\"." msgstr "" "Ở đây, bạn kết nối tín hiệu với node Sprite2D. Ta sẽ cần một Receiver " "Method, đây là hàm mà Godot sẽ gọi mỗi khi Button phát ra signal. Editor sẽ " "tạo hàm đó cho bạn. Theo quy ước, ta đặt tên các phương thức callback theo " "mẫu \"_on_node_name_signal_name\". Trong trường hợp này là " "\"_on_button_pressed\"." #: ../../docs/getting_started/step_by_step/signals.rst:138 msgid "" "When connecting signals via the editor's Node dock, you can use two modes. " "The simple one only allows you to connect to nodes that have a script " "attached to them and creates a new callback function on them." msgstr "" "Khi kết nối các signal thông qua cửa sổ Node, có hai chế độ, một đơn giản, " "một nâng cao. Chế độ đơn giản thì kết nối tới các node mà đã có script đính " "kèm và tạo một hàm callback mới vô đó." #: ../../docs/getting_started/step_by_step/signals.rst:144 #, fuzzy msgid "" "The advanced view lets you connect to any node and any built-in function, " "add arguments to the callback, and set options. You can toggle the mode in " "the window's bottom-right by clicking the :button:`Advanced` button." msgstr "" "Trong chế độ nâng cao, ta có thể kết nối tới bất kỳ node cũng như hàm được " "tích hợp sẵn nào, thêm các tham số vào callback, set các tuỳ chọn nọ kia. " "Bạn có thể chuyển qua lại giữa hai chế độ bằng cách gạt nút Advanced." #: ../../docs/getting_started/step_by_step/signals.rst:151 #, fuzzy msgid "" "If you are using an external editor (such as VS Code), this automatic code " "generation might not work. In this case, you need to connect the signal via " "code as explained in the next section." msgstr "" "Nếu bạn sử dụng trình gõ code bên ngoài (như VS Code) thì trình sinh code tự " "động có thể không hoạt động. Trong trường hợp này bạn cần kết nối signal " "thông qua code được giải thích trong phần kế tiếp." #: ../../docs/getting_started/step_by_step/signals.rst:155 #, fuzzy msgid "" "Click the :button:`Connect` button to complete the signal connection and " "jump to the :ui:`Script` workspace. You should see the new method with a " "connection icon in the left margin." msgstr "" "Click nút Connect sẽ hoàn tất thiết lập kết nối và nhảy thẳng tới workspace " "Script. Bạn sẽ thấy một phương thức mới có biểu tượng kết nối nằm bên lề " "trái." #: ../../docs/getting_started/step_by_step/signals.rst:161 msgid "" "If you click the icon, a window pops up and displays information about the " "connection. This feature is only available when connecting nodes in the " "editor." msgstr "" "Nếu click biểu tượng này, một cửa sổ sẽ hiện lên trình bày thông tin kết " "nối. Tính năng này chỉ khả dụng khi kết nối các node bằng editor." #: ../../docs/getting_started/step_by_step/signals.rst:166 msgid "" "Let's replace the line with the ``pass`` keyword with code that'll toggle " "the node's motion." msgstr "" "Giờ ta sẽ thay từ khoá ``pass`` thành đoạn code dùng để thay đổi trạng thái " "chuyển động." #: ../../docs/getting_started/step_by_step/signals.rst:169 msgid "" "Our Sprite2D moves thanks to code in the ``_process()`` function. Godot " "provides a method to toggle processing on and off: :ref:`Node.set_process() " "`. Another method of the Node class, " "``is_processing()``, returns ``true`` if idle processing is active. We can " "use the ``not`` keyword to invert the value." msgstr "" "Sprite2D có thể di chuyển là nhờ đoạn code trong hàm ``_process()``. Godot " "có một phương thức dùng để bật tắt process: :ref:`Node.set_process() " "`. Một phương thức khác của class Node, " "``is_processing()``, trả về ``true`` nếu process đang chạy. Ta có thể dùng " "từ khoá ``not`` để nghịch đảo giá trị." #: ../../docs/getting_started/step_by_step/signals.rst:189 msgid "" "This function will toggle processing and, in turn, the icon's motion on and " "off upon pressing the button." msgstr "" "Hàm này sẽ bật/tắt process, dẫn đến việc biểu tượng chạy/dừng mỗi lần ta " "nhấn nút." #: ../../docs/getting_started/step_by_step/signals.rst:192 msgid "" "Before trying the game, we need to simplify our ``_process()`` function to " "move the node automatically and not wait for user input. Replace it with the " "following code, which we saw two lessons ago:" msgstr "" "Trước khi chạy game, ta phải bỏ phần user input ra khỏi hàm ``_process()``. " "Thay nó với đoạn code sau:" #: ../../docs/getting_started/step_by_step/signals.rst:213 msgid "Your complete ``sprite_2d.gd`` code should look like the following." msgstr "Code hoàn chỉnh trong ``sprite_2d.gd`` sẽ trông như dưới đây." #: ../../docs/getting_started/step_by_step/signals.rst:256 #, fuzzy msgid "" "Run the current scene by pressing :kbd:`F6` (:kbd:`Cmd + R` on macOS), and " "click the button to see the sprite start and stop." msgstr "Chạy scene lên và click vào nút bấm để xem sprite chạy/dừng." #: ../../docs/getting_started/step_by_step/signals.rst:260 msgid "Connecting a signal via code" msgstr "Kết nối signal bằng code" #: ../../docs/getting_started/step_by_step/signals.rst:262 msgid "" "You can connect signals via code instead of using the editor. This is " "necessary when you create nodes or instantiate scenes inside of a script." msgstr "" "Bạn có thể kết nối các signal bằng code thay vì xài editor. Cái này cần " "thiết khi bạn tạo các node hoặc các bản sao của scene bên trong một script." #: ../../docs/getting_started/step_by_step/signals.rst:265 msgid "" "Let's use a different node here. Godot has a :ref:`Timer ` node " "that's useful to implement skill cooldown times, weapon reloading, and more." msgstr "" "Hãy sử dụng một node khác ở đây. Godot có node :ref:`Timer ` " "rất hữu ích để thiết lập thời gian cooldown, thay đạn, v.v..." #: ../../docs/getting_started/step_by_step/signals.rst:268 msgid "" "Head back to the 2D workspace. You can either click the \"2D\" text at the " "top of the window or press :kbd:`Ctrl + F1` (:kbd:`Ctrl + Cmd + 1` on macOS)." msgstr "" "Trở lại workspace 2D. Bạn có thể click chữ \"2D\" phía trên cùng hoặc nhấn " "nút :kbd:`Ctrl + F1` (:kbd:`Ctrl + Cmd + 1` trên macOS)." #: ../../docs/getting_started/step_by_step/signals.rst:271 msgid "" "In the Scene dock, right-click on the Sprite2D node and add a new child " "node. Search for Timer and add the corresponding node. Your scene should now " "look like this." msgstr "" "Trong cửa sổ Scene, click phải Sprite2D và thêm một node con mới. Tìm Timer " "rồi thêm nó vào. Scene của bạn sẽ trông như này." #: ../../docs/getting_started/step_by_step/signals.rst:277 #, fuzzy msgid "" "With the Timer node selected, go to the :ui:`Inspector` and enable " "the :inspector:`Autostart` property." msgstr "" "Chọn node Timer rồi kích hoạt thuộc tính **Autostart** trong cửa sổ " "Inspector." #: ../../docs/getting_started/step_by_step/signals.rst:282 msgid "" "Click the script icon next to Sprite2D to jump back to the scripting " "workspace." msgstr "Click biểu tượng script kế bên Sprite2D để nhảy về workspace Script." #: ../../docs/getting_started/step_by_step/signals.rst:286 msgid "We need to do two operations to connect the nodes via code:" msgstr "Ta cần hai bước để kết nối các node thông qua code:" #: ../../docs/getting_started/step_by_step/signals.rst:288 msgid "Get a reference to the Timer from the Sprite2D." msgstr "Lấy tham chiếu tới Timer từ Sprite2D." #: ../../docs/getting_started/step_by_step/signals.rst:289 msgid "Call the ``connect()`` method on the Timer's \"timeout\" signal." msgstr "Gọi phương thức ``connect()`` trên signal \"timeout\" của Timer." #: ../../docs/getting_started/step_by_step/signals.rst:291 msgid "" "To connect to a signal via code, you need to call the ``connect()`` method " "of the signal you want to listen to. In this case, we want to listen to the " "Timer's \"timeout\" signal." msgstr "" "Để kết nối một signal thông qua code, bạn cần gọi phương thức ``connect()`` " "của cái signal mà bạn muốn xử lý. Trong trường hợp này, là signal " "\"timeout\" của Timer." #: ../../docs/getting_started/step_by_step/signals.rst:295 msgid "" "We want to connect the signal when the scene is instantiated, and we can do " "that using the :ref:`Node._ready() ` built-" "in function, which is called automatically by the engine when a node is " "fully instantiated." msgstr "" "Ta kết nối tới signal sau khi scene đã được tạo xong, bằng cách sử dụng hàm " "tích hợp sẵn :ref:`Node._ready() `, hàm " "này sẽ được engine gọi tự động mỗi khi một node được tạo xong." #: ../../docs/getting_started/step_by_step/signals.rst:299 msgid "" "To get a reference to a node relative to the current one, we use the " "method :ref:`Node.get_node() `. We can store the " "reference in a variable." msgstr "" "Để lấy tham chiếu tới một node từ node hiện tại, ta sử dụng phương " "thức :ref:`Node.get_node() `. Ta có thể lưu tham " "chiếu này vào trong một biến." #: ../../docs/getting_started/step_by_step/signals.rst:316 msgid "" "The function ``get_node()`` looks at the Sprite2D's children and gets nodes " "by their name. For example, if you renamed the Timer node to " "\"BlinkingTimer\" in the editor, you would have to change the call to " "``get_node(\"BlinkingTimer\")``." msgstr "" "Hàm ``get_node()`` tìm các node con của Sprite2D và tìm bằng tên của tụi nó. " "Ví dụ, nếu bạn đổi tên node Timer thành \"BlinkingTimer\" trong editor, bạn " "sẽ phải thay đổi lời gọi thành ``get_node(\"BlinkingTimer\")``." #: ../../docs/getting_started/step_by_step/signals.rst:322 msgid "" "We can now connect the Timer to the Sprite2D in the ``_ready()`` function." msgstr "Giờ ta có thể kết nối Timer tới Sprite2D trong hàm ``_ready()``." #: ../../docs/getting_started/step_by_step/signals.rst:339 msgid "" "The line reads like so: we connect the Timer's \"timeout\" signal to the " "node to which the script is attached. When the Timer emits ``timeout``, we " "want to call the function ``_on_timer_timeout()``, that we need to define. " "Let's add it at the bottom of our script and use it to toggle our sprite's " "visibility." msgstr "" "Ta có thể hiểu dòng lệnh trên như sau: kết nối signal \"timeout\" của Timer " "tới node mà có đoạn script này đính kèm. Khi Timer phát đi tín hiệu " "``timeout``, ta sẽ gọi hàm ``_on_timer_timeout()``, hàm này ta chưa định " "nghĩa. Giờ ta sẽ thêm nó vào cuối đoạn script để ẩn/hiện sprite." #: ../../docs/getting_started/step_by_step/signals.rst:344 msgid "" "By convention, we name these callback methods in GDScript as " "\"_on_node_name_signal_name\" and in C# as \"OnNodeNameSignalName\". Here, " "it'll be \"_on_timer_timeout\" for GDScript and OnTimerTimeout() for C#." msgstr "" "Theo quy ước, ta đặt trên các phương thức callback theo mẫu " "\"_on_node_name_signal_name\" trong GDScript và \"OnNodeNameSignalName\" " "trong C#. Ở đây là \"_on_timer_timeout\" trong GDScript và OnTimerTimeout() " "trong C#." #: ../../docs/getting_started/step_by_step/signals.rst:361 msgid "" "The ``visible`` property is a boolean that controls the visibility of our " "node. The line ``visible = not visible`` toggles the value. If ``visible`` " "is ``true``, it becomes ``false``, and vice-versa." msgstr "" "Thuộc tính ``visible`` nhận giá trị boolean, nó điều khiển sự hiện diện của " "node. Dòng lệnh ``visible = not visible`` dùng để nghịch đảo giá trị. Nếu " "``visible`` là ``true``, thì nó đảo thành ``false``, và ngược lại." #: ../../docs/getting_started/step_by_step/signals.rst:365 msgid "" "If you run the Node2D scene now, you will see that the sprite blinks on and " "off, at one second intervals." msgstr "Nếu bạn chạy scene Node2D lên, bạn sẽ thấy sprite nhấn nháy mỗi giây." #: ../../docs/getting_started/step_by_step/signals.rst:371 msgid "" "That's it for our little moving and blinking Godot icon demo! Here is the " "complete ``sprite_2d.gd`` file for reference." msgstr "" "Đến đây là ta hoàn thành demo di chuyển và nhấp nháy biểu tượng Godot! Dưới " "đây là file ``sprite_2d.gd`` hoàn chỉnh để tham khảo." #: ../../docs/getting_started/step_by_step/signals.rst:436 msgid "Custom signals" msgstr "Tuỳ biến các signal" #: ../../docs/getting_started/step_by_step/signals.rst:438 msgid "" "This section is a reference on how to define and use your own signals, and " "does not build upon the project created in previous lessons." msgstr "" "Mục này nhằm tham khảo cách định nghĩa và sử dụng signal riêng của bạn, nó " "không dựa trên project từ các bài trước." #: ../../docs/getting_started/step_by_step/signals.rst:441 msgid "" "You can define custom signals in a script. Say, for example, that you want " "to show a game over screen when the player's health reaches zero. To do so, " "you could define a signal named \"died\" or \"health_depleted\" when their " "health reaches 0." msgstr "" "Bạn có thể định nghĩa signal của riêng mình trong một script. Giả sử bạn " "muốn hiện màn hình game over khi máu người chơi chạm mức 0. Để làm thế, bạn " "có thể định nghĩa một signal tên \"died\" hoặc \"health_depleted\" khi máu " "còn 0." #: ../../docs/getting_started/step_by_step/signals.rst:467 msgid "" "As signals represent events that just occurred, we generally use an action " "verb in the past tense in their names." msgstr "" "Vì signal đại diện cho các sự kiện vừa xảy ra nên ta sử dụng động từ ở thì " "quá khứ trong tên của chúng." #: ../../docs/getting_started/step_by_step/signals.rst:470 #, fuzzy msgid "" "Your signals work the same way as built-in ones: they appear in " "the :ui:`Node` tab and you can connect to them like any other." msgstr "" "Các signal của riêng bạn hoạt động như là các signal tích hợp sẵn: tụi nó " "cũng xuất hiện trong tab Node và có thể kết nối tới chúng y chang mấy cái " "kia." #: ../../docs/getting_started/step_by_step/signals.rst:475 msgid "To emit a signal in your scripts, call ``emit()`` on the signal." msgstr "Để một signal phát đi tín hiệu, gọi phương thức ``emit()`` của signal." #: ../../docs/getting_started/step_by_step/signals.rst:497 msgid "" "A signal can optionally declare one or more arguments. Specify the argument " "names between parentheses:" msgstr "" "Một signal có thể khai báo một hoặc nhiều tham số tuỳ thích. Các tham số này " "nằm giữa cặp ngoặc tròn:" #: ../../docs/getting_started/step_by_step/signals.rst:523 msgid "" "The signal arguments show up in the editor's node dock, and Godot can use " "them to generate callback functions for you. However, you can still emit any " "number of arguments when you emit signals. So it's up to you to emit the " "correct values." msgstr "" "Các tham số của signal sẽ hiển thị trong cửa sổ Node của editor, và Godot có " "thể sử dụng chúng để sinh callback giùm bạn. Tuy nhiên, bạn vẫn có thể emit " "bao nhiêu tham số tuỳ thích. Vậy pass tham số như nào, ăn thua ở bạn." #: ../../docs/getting_started/step_by_step/signals.rst:528 msgid "" "To emit values along with the signal, add them as extra arguments to the " "``emit()`` function:" msgstr "" "Để emit signal cùng tham số, thêm chúng như là các tham số của ``emit()``:" #: ../../docs/getting_started/step_by_step/signals.rst:551 msgid "" "Any node in Godot emits signals when something specific happens to them, " "like a button being pressed. Other nodes can connect to individual signals " "and react to selected events." msgstr "" "Bất kỳ node nào trong Godot cũng có thể phát ra các signal khi có sự kiện gì " "đó xảy ra, chẳng hạn như một nút bấm được nhấn. Các node khác có thể kết nối " "tới từng signal và phản hồi các sự kiện được chọn." #: ../../docs/getting_started/step_by_step/signals.rst:555 msgid "" "Signals have many uses. With them, you can react to a node entering or " "exiting the game world, to a collision, to a character entering or leaving " "an area, to an element of the interface changing size, and much more." msgstr "" "Signal rất đa dụng. Ta có thể dùng chúng để biết khi nào một node ra vào thế " "giới game, để phát hiện va chạm, để biết một nhân vật ra vào một khu vực " "nhất định, một thành phần giao diện vừa thay đổi kích cỡ, cùng nhiều ứng " "dụng khác." #: ../../docs/getting_started/step_by_step/signals.rst:559 msgid "" "For example, an :ref:`Area2D ` representing a coin emits a " "``body_entered`` signal whenever the player's physics body enters its " "collision shape, allowing you to know when the player collected it." msgstr "" "Lấy ví dụ, một :ref:`Area2D ` biểu diễn một đồng xu phát ra " "signal ``body_entered`` mỗi khi người chơi va vào nó, giúp người chơi thu " "thập đồng xu đó." #: ../../docs/getting_started/step_by_step/signals.rst:563 msgid "" "In the next section, :ref:`doc_your_first_2d_game`, you'll create a complete " "2D game and put everything you learned so far into practice." msgstr "" "Trong phần kế, :ref:`doc_your_first_2d_game`, bạn sẽ tạo một game 2D hoàn " "chỉnh và áp dụng mọi kiến thức đã học tới giờ vào thực chiến." #: ../../docs/getting_started/first_2d_game/index.rst:6 msgid "Your first 2D game" msgstr "Game 2D đầu tiên của bạn" #: ../../docs/getting_started/first_2d_game/index.rst:8 msgid "" "In this step-by-step tutorial series, you will create your first complete 2D " "game with Godot. By the end of the series, you will have a simple yet " "complete game of your own, like the image below." msgstr "" "Trong loạt bài hướng dẫn từng bước này, bạn sẽ hoàn thành con game 2D đầu " "tiên của mình bằng Godot. Kết thúc chuỗi bài này, bạn sẽ có một chiếc game " "tuy đơn giản nhưng hoàn chỉnh, như hình dưới đây." #: ../../docs/getting_started/first_2d_game/index.rst:14 msgid "" "You will learn how the Godot editor works, how to structure a project, and " "build a 2D game." msgstr "" "Bạn sẽ tìm hiểu cách Godot editor hoạt động, cách cấu trúc một project, và " "xây dựng một game 2D." #: ../../docs/getting_started/first_2d_game/index.rst:17 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 "" "Project này là phần giới thiệu về Godot engine. Nó giả định rằng bạn đã có " "một số kinh nghiệm về lập trình rồi. Nếu bạn hoàn toàn xa lạ với lập trình, " "bạn nên bắt đầu từ đây: :ref:`doc_scripting`." #: ../../docs/getting_started/first_2d_game/index.rst:21 msgid "" "The game is called \"Dodge the Creeps!\". Your character must move and avoid " "the enemies for as long as possible." msgstr "" "Con game này có tên là \"Dodge the Creeps!\". Nhân vật của bạn phải di " "chuyển và né tránh những kẻ địch càng lâu càng tốt." #: ../../docs/getting_started/first_2d_game/index.rst:24 #: ../../docs/getting_started/first_3d_game/index.rst:19 msgid "You will learn to:" msgstr "Bạn sẽ tìm hiểu:" #: ../../docs/getting_started/first_2d_game/index.rst:26 msgid "Create a complete 2D game with the Godot editor." msgstr "Tạo một game 2D hoàn chỉnh với Godot editor." #: ../../docs/getting_started/first_2d_game/index.rst:27 msgid "Structure a simple game project." msgstr "Cấu trúc một project game đơn giản." #: ../../docs/getting_started/first_2d_game/index.rst:28 msgid "Move the player character and change its sprite." msgstr "Di chuyển nhân vật và thay đổi sprite của nó." #: ../../docs/getting_started/first_2d_game/index.rst:29 msgid "Spawn random enemies." msgstr "Sinh kẻ địch ngẫu nhiên." #: ../../docs/getting_started/first_2d_game/index.rst:30 msgid "Count the score." msgstr "Tính điểm số." #: ../../docs/getting_started/first_2d_game/index.rst:32 #: ../../docs/getting_started/first_3d_game/index.rst:30 msgid "And more." msgstr "Và hơn thế nữa." #: ../../docs/getting_started/first_2d_game/index.rst:34 msgid "" "You'll find another series where you'll create a similar game but in 3D. We " "recommend you to start with this one, though." msgstr "" "Sau này bạn sẽ tạo một game tương tự, nhưng là mà game 3D. Tuy nhiên, chúng " "tôi khuyến nghị bạn nên bắt đầu với bài này trước." #: ../../docs/getting_started/first_2d_game/index.rst:37 msgid "**Why start with 2D?**" msgstr "**Ủa tại sao nên bắt đầu với 2D?**" #: ../../docs/getting_started/first_2d_game/index.rst:39 msgid "" "If you are new to game development or unfamiliar with Godot, we recommend " "starting with 2D games. This will allow you to become comfortable with both " "before tackling 3D games, which tend to be more complicated." msgstr "" "Nếu bạn đang tập tành làm game hoặc chưa quen với Godot, chúng tôi khuyên " "nên bắt đầu từ game 2D. Điều này sẽ giúp bạn làm quen với :abbr:`cả hai " "(Phát triển game và Godot)` trước khi khởi sự với game 3D, vốn có xu hướng " "phức tạp hơn." #: ../../docs/getting_started/first_2d_game/index.rst:43 msgid "You can find a completed version of this project at this location:" msgstr "Phiên bản hoàn chỉnh của project này có thể được tìm thấy ở:" #: ../../docs/getting_started/first_2d_game/index.rst:45 #, fuzzy msgid "" "`Dodge the Creeps source code (GDScript) `__" msgstr "" "https://github.com/godotengine/godot-demo-projects/tree/master/2d/" "dodge_the_creeps" #: ../../docs/getting_started/first_2d_game/index.rst:46 #, fuzzy msgid "" "`Dodge the Creeps source code (C#) `__" msgstr "" "https://github.com/godotengine/godot-demo-projects/tree/master/2d/" "dodge_the_creeps" #: ../../docs/getting_started/first_2d_game/index.rst:49 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_basics.rst:34 msgid "Prerequisites" msgstr "Điều kiện tiên quyết" #: ../../docs/getting_started/first_2d_game/index.rst:51 #, fuzzy msgid "" "This step-by-step tutorial is intended for beginners who followed the " "complete :ref:`doc_step_by_step`." msgstr "" "Bài hướng dẫn từng bước này dành cho những bạn mới bắt đầu đã hoàn thành " "loạt bài :ref:`khởi động `." #: ../../docs/getting_started/first_2d_game/index.rst:54 msgid "" "If you're an experienced programmer, you can find the complete demo's source " "code here: `Dodge the Creeps source code `__." msgstr "" "Nếu bạn là một lập trình viên có kinh nghiệm, bạn có thể xem source code " "hoàn chỉnh ở đây: `Dodge the Creeps source code `__." #: ../../docs/getting_started/first_2d_game/index.rst:58 msgid "" "We prepared some game assets you'll need to download so we can jump straight " "to the code." msgstr "" "Chúng tôi đã chuẩn bị một vài game asset mà bạn sẽ cần tải xuống để bắt đầu " "code ngay." #: ../../docs/getting_started/first_2d_game/index.rst:61 msgid "You can download them by clicking the link below." msgstr "Bạn có thể tải xuống bằng cách click vào đường link bên dưới." #: ../../docs/getting_started/first_2d_game/index.rst:63 msgid "" "`dodge_the_creeps_2d_assets.zip `_." msgstr "" "`dodge_the_creeps_2d_assets.zip `_." #: ../../docs/getting_started/first_2d_game/index.rst:66 #: ../../docs/getting_started/first_3d_game/index.rst:57 msgid "Contents" msgstr "Nội dung" #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:4 #: ../../docs/tutorials/scripting/cpp/gdextension_cpp_example.rst:28 #: ../../docs/tutorials/scripting/gdextension/gdextension_c_example.rst:22 msgid "Setting up the project" msgstr "Thiết lập project" #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:6 msgid "In this short first part, we'll set up and organize the project." msgstr "" "Trong phần đầu tiên ngắn gọn này, chúng ta sẽ thiết lập và tổ chức project." #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:8 msgid "Launch Godot and create a new project." msgstr "Chạy Godot và tạo một project mới." #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:12 msgid "" "When creating the new project, you only need to choose a valid *Project " "Path*. You can leave the other default settings alone." msgstr "" "Khi tạo project mới, bạn chỉ cần chọn *Project Path* hợp lệ. Những thiết lập " "còn lại bạn để mặc định." #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:17 #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:24 msgid "" "Download `dodge_the_creeps_2d_assets.zip `_. The archive contains the images and " "sounds you'll be using to make the game. Extract the archive and move the " "``art/`` and ``fonts/`` directories to your project's directory." msgstr "" "Tải xuống `dodge_the_creeps_2d_assets.zip `_. File nén này chứa hình ảnh và âm thanh " "bạn sẽ dùng để tạo game. Giải nén rồi di chuyển các thư mục ``art/`` và " "``fonts/`` vào thư mục project của bạn." #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:29 msgid "" "Ensure that you have the required dependencies to use C# in Godot. You need " "the latest stable .NET SDK, and an editor such as VS Code. " "See :ref:`doc_c_sharp_setup`." msgstr "" "Hãy chắc rằng bạn có các dependency cần thiết để sử dụng C# trong Godot. Bạn " "cần .NET SDK phiên bản ổn định mới nhất, và một editor như VS Code. " "Xem :ref:`doc_c_sharp_setup`." #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:33 #: ../../docs/tutorials/performance/cpu_optimization.rst:195 msgid "C++" msgstr "C++" #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:35 msgid "" "The C++ part of this tutorial wasn't rewritten for the new GDExtension " "system yet." msgstr "" "Phần C++ của hướng dẫn này chưa được viết lại cho hệ thống GDExtension mới." #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:37 msgid "Your project folder should look like this." msgstr "Thư mục project của bạn sẽ như dưới đây." #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:41 #, fuzzy msgid "" "This game is designed for portrait mode, so we need to adjust the size of " "the game window. Click on *Project -> Project Settings* to open the project " "settings window, in the left column open the *Display -> Window* tab. There, " "set \"Viewport Width\" to ``480`` and \"Viewport Height\" to ``720``. You " "can see the \"Project\" menu on the upper left corner." msgstr "" "Game này được thiết kế cho chế độ màn hình dọc, vì vậy chúng ta cần điều " "chỉnh kích thước cửa sổ game. Click *Project -> Project Settings* để mở cửa " "sổ project settings, trong cột bên trái mở tab *Display -> Window*. Ở đây, " "thiết lập \"Viewport Width\" thành ``480`` và \"Viewport Height\" thành " "``720``." #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:49 msgid "" "Also, under the **Stretch** options, set **Mode** to ``canvas_items`` and " "**Aspect** to ``keep``. This ensures that the game scales consistently on " "different sized screens." msgstr "" "Ngoài ra, dưới tuỳ chọn **Stretch**, thiết lập **Mode** thành " "``canvas_items`` và **Aspect** thành ``keep``. Điều này đảm bảo rằng game sẽ " "scale một cách nhất quán trên nhiều kích thước màn hình khác nhau." #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:55 msgid "Organizing the project" msgstr "Tổ chức dự án" #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:57 msgid "" "In this project, we will make 3 independent scenes: ``Player``, ``Mob``, and " "``HUD``, which we will combine into the game's ``Main`` scene." msgstr "" "Trong dự án này, chúng ta sẽ tạo 3 scene độc lập: ``Player``, ``Mob``, và " "``HUD``, sau đó chúng ta sẽ kết hợp chúng vào scene ``Main``." #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:60 msgid "" "In a larger project, it might be useful to create folders to hold the " "various scenes and their scripts, but for this relatively small game, you " "can save your scenes and scripts in the project's root folder, identified by " "``res://``. You can see your project folders in the FileSystem dock in the " "lower left corner:" msgstr "" "Trong một project lớn, sẽ rất hữu ích nếu ta tạo các thư mục con để chứa các " "scene và script, nhưng đây là một game tương đối nhỏ, bạn có thể lưu các " "scene và script trong thư mục gốc của dự án, được xác định bởi ``res://``. " "Bạn có thể xem các thư mục trong dự án của mình bằng cửa sổ FileSystem nằm " "phía dưới cùng bên trái:" #: ../../docs/getting_started/first_2d_game/01.project_setup.rst:67 msgid "" "With the project in place, we're ready to design the player scene in the " "next lesson." msgstr "Project đã sẵn sàng, trong bài kế chúng ta sẽ thiết kế scene player." #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:4 msgid "Creating the player scene" msgstr "Tạo scene player" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:6 msgid "" "With the project settings in place, we can start working on the player-" "controlled character." msgstr "" "Project đã được thiết lập ngon lành rồi, giờ mình bắt đầu làm việc với nhân " "vật được người chơi điều khiển." #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:9 msgid "" "The first scene will define 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 "" "Cảnh đầu tiên chúng ta sẽ định nghĩa đối tượng `` Player``. Một trong những " "lợi ích của việc tạo cảnh Người chơi riêng là chúng tôi có thể kiểm tra " "riêng, ngay cả trước khi chúng tôi tạo các phần khác của trò chơi." #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:14 msgid "Node structure" msgstr "Cấu trúc node" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:16 #, fuzzy msgid "" "To begin, we need to choose a root node for the player object. As a general " "rule, a scene's root node should reflect the object's desired functionality " "- what the object *is*. In the upper-left corner, in the \"Scene\" tab, " "click the \"Other Node\" button and add an :ref:`Area2D ` node " "to the scene." msgstr "" "Để bắt đầu, chúng ta cần chọn một nút gốc cho đối tượng player. Theo nguyên " "tắc chung, nút gốc của khung cảnh phải phản ánh chức năng mong muốn của đối " "tượng - cái mà đối tượng *sẽ là*. Nhấp vào nút \"Nút khác\" và thêm " "nút :ref:`Area2D ` vào khung cảnh." #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:23 msgid "" "When you add the ``Area2D`` node, Godot will display the following **warning " "icon** next to it in the scene tree:" msgstr "" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:28 msgid "" "This warning tells us that the ``Area2D`` node requires a shape to detect " "collisions or overlaps. We can **ignore the warning temporarily** because we " "will first set up the player's visuals (using an animated sprite). Once the " "visuals are ready, we will add a collision shape as a child node. This will " "allow us to accurately size and position the shape based on the sprite's " "appearance." msgstr "" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:34 msgid "" "With ``Area2D`` we can detect objects that overlap or run into the player. " "Change the node's name to ``Player`` by double-clicking on it. Now that " "we've set the scene's root node, we can add additional nodes to give it more " "functionality." msgstr "" "Với `` Area2D``, chúng ta có thể phát hiện các đối tượng chồng lấp hoặc chạy " "vào player. Thay đổi tên của nó thành `` Player`` bằng cách nhấp vào tên của " "node. Đây là node gốc của cảnh. Chúng tôi có thể thêm các node bổ sung cho " "player để thêm chức năng." #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:39 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 \"Groups the " "selected node with its children. This causes the parent to be selected when " "any child node is clicked in 2D and 3D view.\"" msgstr "" "Trước khi chúng ta thêm bất kỳ nút con khác nào vào nút `` Player``, chúng " "ta cần đảm bảo rằng chúng ta không vô tình nhấp chuột vào chúng khiến chúng " "di chuyển hoặc thay đổi kích thước. Chọn nút và nhấp vào biểu tượng ở bên " "phải của khóa; thanh gợi ý của nó nói \"Nhóm nút đã chọn với các nút con của " "nó. Điều này có thể khiến nút cha được chọn khi bất kỳ nút con nào được nhấp " "vào ở chế độ xem 2D và 3D\"" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:47 #, fuzzy msgid "" "Save the scene as ``player.tscn``. Click **Scene > Save**, or " "press :kbd:`Ctrl + S` on Windows/Linux or :kbd:`Cmd + S` on macOS." msgstr "" "Lưu lại cảnh. Nhấp vào Scene -> Save hoặc nhấn `` Ctrl + S`` trên Windows / " "Linux hoặc `` Command + S`` trên Mac." #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:63 msgid "Sprite animation" msgstr "Sprite động" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:65 #, fuzzy msgid "" "Click on the ``Player`` node and add (:kbd:`Ctrl + A` on Windows/Linux " "or :kbd:`Cmd + A` on macOS) a child node :ref:`AnimatedSprite2D " "`. The ``AnimatedSprite2D`` will handle the " "appearance and animations for our player. Notice that there is a warning " "symbol next to the node. An ``AnimatedSprite2D`` requires " "a :ref:`SpriteFrames ` resource, which is a list of the " "animations it can display. Make sure ``AnimatedSprite2D`` is selected and " "then find the ``Sprite Frames`` property under the ``Animation`` section in " "the Inspector and click \"[empty]\" -> \"New SpriteFrames\":" msgstr "" "Nhấp vào node ``Player`` và thêm node: ref: `AnimatedSprite " "` như là node con. ``AnimatedSprite`` sẽ xử lý hình " "dạng và hoạt ảnh cho nhân vật người chơi. Hãy chú ý biểu tượng cảnh báo cạnh " "node. Một``AnimatedSprite`` yêu cầu danh sách hoạt ảnh ref: `SpriteFrames " "` được tạo như sau: tìm thuộc tính ``Frames`` trong " "Inspector và bấm \"[empty]\" -> \"New SpriteFrames\". Nhấn chuột lần nữa sẽ " "mở bảng \"SpriteFrames\":" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:76 msgid "" "Click on the ``SpriteFrames`` you just created to open the \"SpriteFrames\" " "panel:" msgstr "" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:80 msgid "" "On the left is a list of animations. Click the ``default`` one and rename it " "to ``walk``. Then click the **Add Animation** button to create a second " "animation named ``up``." msgstr "" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:84 #, fuzzy msgid "" "Find the player images in the FileSystem dock - they're in the ``art`` " "folder you unzipped earlier. Drag the two images for each animation, into " "the **Animation Frames** side of the panel for the corresponding animation:" msgstr "" "Bên trái là danh sách các hình ảnh động. Nhấp vào \"default\" và đổi tên " "thành \"right\". Sau đó nhấp vào nút \"Add\" để tạo hình động thứ hai có tên " "\"up\". Kéo hai hình ảnh cho mỗi hình ảnh động, được đặt tên là " "``playerGrey_up [1/2] `` và ``playerGrey_walk [1/2] ``, vào bên cạnh " "\"Animation Frames\" vào bên cạnh của bảng:" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:88 msgid "" "``playerGrey_walk1`` and ``playerGrey_walk2`` for the ``walk`` animation" msgstr "" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:89 msgid "``playerGrey_up1`` and ``playerGrey_up2`` for the ``up`` animation" msgstr "" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:93 msgid "" "The player images are a bit too large for the game window, so we need to " "scale them down. Click on the ``AnimatedSprite2D`` node and set the " "``Scale`` property to ``(0.5, 0.5)``. You can find it in the Inspector under " "the ``Node2D`` heading." msgstr "" "Hình ảnh player hơi lớn so với cửa sổ trò chơi, vì vậy chúng tôi cần thu nhỏ " "chúng xuống. Nhấp vào node ``AnimatedSprite`` và đặt thuộc tính ``Scale`` " "thành `` (0,5, 0,5) ``. Bạn có thể tìm thấy nó trong Inspector dưới tiêu đề " "`` Node2D``." #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:100 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 \"[empty]\" -> \"New " "CapsuleShape2D\". Using the two size handles, resize the shape to cover the " "sprite:" msgstr "" "Cuối cùng, thêm một: ref: `CollisionShape2D ` khi là " "con của `` Player``. Điều này sẽ xác định \"hitbox\" của player, hoặc giới " "hạn của khu vực va chạm của nó. Đối với nhân vật này, node `` " "CapsuleShape2D`` mang lại sự phù hợp nhất, vì vậy, bên cạnh \"Shape\" trong " "Inspector, nhấp vào \"[empty]\" \"->\"New CapsuleShape2D\". Sử dụng hai tay " "cầm kích thước, thay đổi kích thước hình dạng thành che sprite:" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:109 msgid "When you're finished, your ``Player`` scene should look like this:" msgstr "Khi bạn kết thúc, cảnh `` Player`` của bạn sẽ giống như thế này:" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:113 msgid "" "Once this is done, the warning on the ``Area2D`` node will disappear, as it " "now has a shape assigned and can interact with other objects." msgstr "" #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:116 msgid "Make sure to save the scene again after these changes." msgstr "Hãy đảm bảo bạn lưu scene lại một lần nữa sau những thay đổi kia." #: ../../docs/getting_started/first_2d_game/02.player_scene.rst:118 msgid "" "In the next part, we'll add a script to the player node to move and animate " "it. Then, we'll set up collision detection to know when the player got hit " "by something." msgstr "" "Trong phần tiếp theo, chúng ta sẽ thêm một tập lệnh vào nút người chơi để di " "chuyển và hoạt hình hóa nó. Sau đó, chúng ta sẽ thiết lập phát hiện va chạm " "để biết khi nào người chơi bị va chạm bởi thứ gì đó." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:4 msgid "Coding the player" msgstr "Di chuyển player" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:6 msgid "" "In this lesson, we'll add player movement, animation, and set it up to " "detect collisions." msgstr "" "Trong bài học này, chúng ta sẽ thêm chuyển động, hoạt ảnh của người chơi và " "thiết lập để phát hiện va chạm." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:9 msgid "" "To do so, 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 " "\"Attach Script\" button:" msgstr "" "Bây giờ chúng tôi cần thêm một số chức năng mà chúng tôi không thể có được " "từ một node tích hợp, vì vậy chúng tôi sẽ thêm một tập lệnh. Nhấp vào nút `` " "Player`` và nhấp vào nút \"Thêm tập lệnh\":" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:15 msgid "" "In the script settings window, you can leave the default settings alone. " "Just click \"Create\":" msgstr "" "Trong cửa sổ cài đặt tập lệnh, bạn có thể để các cài đặt mặc định. Chỉ cần " "nhấp vào \"Create\":" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:18 msgid "" "If you're creating a C# script or other languages, select the language from " "the `language` drop down menu before hitting create." msgstr "" "Nếu bạn đang tạo tập lệnh C # hoặc các ngôn ngữ khác, hãy chọn ngôn ngữ từ " "trình đơn thả xuống `language 'trước khi nhấn tạo." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:23 msgid "" "If this is your first time encountering GDScript, please " "read :ref:`doc_scripting` before continuing." msgstr "" "Nếu đây là lần đầu tiên bạn sử dụng GDScript , vui lòng " "đọc :ref:`doc_scripting` trước khi tiếp tục." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:26 msgid "Start by declaring the member variables this object will need:" msgstr "" "Bắt đầu bằng cách khai báo các biến thành viên mà đối tượng này sẽ cần:" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:48 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 you'll see the property now appears in the Inspector in " "a new section with the name of the script. Remember, if you change the value " "here, it will override the value written in the script." msgstr "" "Sử dụng từ khóa ``export`` trên biến đầu tiên ``speed`` cho phép chúng ta " "đặt giá trị của nó trong Inspector. Điều này có thể hữu ích cho các giá trị " "mà bạn muốn có thể điều chỉnh giống như các thuộc tính tích hợp của node. " "Nhấp vào node ``Player`` và bạn sẽ thấy thuộc tính hiện xuất hiện trong phần " "\"Script Variables\" của Inspector. Hãy nhớ rằng, nếu bạn thay đổi giá trị ở " "đây, nó sẽ ghi đè giá trị được ghi trong tập lệnh." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:57 msgid "" "If you're using C#, you need to (re)build the project assemblies whenever " "you want to see new export variables or signals. This build can be manually " "triggered by clicking the **Build** button at the top right of the editor." msgstr "" "Nếu bạn đang sử dụng C #, bạn cần (tái) xây dựng các cụm dự án bất cứ khi " "nào bạn muốn xem các biến hoặc tín hiệu xuất mới. Bản dựng này có thể được " "kích hoạt thủ công bằng cách nhấp vào từ \"Mono\" ở dưới cùng của cửa sổ " "trình chỉnh sửa để hiển thị Bảng điều khiển Mono, sau đó nhấp vào nút " "\"Build Project\"." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:66 msgid "" "Your ``player.gd`` script should already contain a ``_ready()`` and a " "``_process()`` function. If you didn't select the default template shown " "above, create these functions while following the lesson." msgstr "" "Tập lệnh ``player.gd`` của bạn phải chứa hàm ``_ready()`` và hàm " "``_process()`` . Nếu bạn không chọn mẫu mặc định được hiển thị ở trên, hãy " "tạo các hàm này trong khi làm theo bài học." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:71 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 "" "Hàm ``_ready()`` được gọi khi một node đi vào scene tree, đây là thời điểm " "tốt để tìm kích thước của cửa sổ trò chơi:" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:87 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. For the player, we need to " "do the following:" msgstr "" "Bây giờ chúng ta có thể sử dụng hàm `` _ process () `` để xác định những gì " "player sẽ làm. `` _ process () `` được gọi trên mọi khung hình, vì vậy chúng " "tôi sẽ sử dụng nó để cập nhật các yếu tố trong trò chơi của chúng tôi, điều " "mà chúng tôi mong đợi sẽ thay đổi thường xuyên. Đối với player, chúng ta cần " "làm như sau:" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:92 msgid "Check for input." msgstr "Kiểm tra đầu vào." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:93 msgid "Move in the given direction." msgstr "Di chuyển theo hướng đã cho." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:94 msgid "Play the appropriate animation." msgstr "Bật hoạt hình thích hợp." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:96 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\". Here, you can define custom events and " "assign different keys, mouse events, or other inputs to them. For this game, " "we will map the arrow keys to the four directions." msgstr "" "Đầu tiên, chúng ta cần kiểm tra các nút đầu vào - player có đang bấm 1 phím " "nào không ? Đối với trò chơi này, chúng tôi có 4 đầu vào hướng để kiểm tra. " "Các hành động đầu vào được xác định trong Project Settings trong \"Input " "Map\". Tại đây, bạn có thể xác định các sự kiện tùy chỉnh và gán các phím, " "sự kiện chuột hoặc các đầu vào khác cho chúng. Đối với bản demo này, chúng " "tôi sẽ sử dụng các sự kiện mặc định được gán cho các phím mũi tên trên bàn " "phím." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:102 msgid "" "Click on *Project -> Project Settings* to open the project settings window " "and click on the *Input Map* tab at the top. Type \"move_right\" in the top " "bar and click the \"Add\" button to add the ``move_right`` action." msgstr "" "Nhấp vào *Project -> Project Settings* để mở cửa sổ cài đặt dự án và nhấp " "vào tab *Input Map* ở trên cùng . Nhập \"move_right\" vào thanh trên cùng và " "nhấp vào nút \"Add\" để thêm hành động ``move_right``." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:108 msgid "" "We need to assign a key to this action. Click the \"+\" icon on the right, " "to open the event manager window." msgstr "" "Chúng ta cần gán một phím cho hành động này. Nhấp vào biểu tượng \"+\" ở bên " "phải để mở cửa sổ quản lý sự kiện." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:113 msgid "" "The \"Listening for Input...\" field should automatically be selected. Press " "the \"right\" key on your keyboard, and the menu should look like this now." msgstr "" "Trường \"Listening for Input...\" sẽ tự động được chọn. Nhấn phím \"phải\" " "trên bàn phím của bạn và menu sẽ trông như thế này." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:118 msgid "" "Select the \"ok\" button. The \"right\" key is now associated with the " "``move_right`` action." msgstr "" "Chọn nút \"ok\". Phím \"right\" hiện được liên kết với hành động " "``move_right``." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:120 msgid "Repeat these steps to add three more mappings:" msgstr "Lặp lại các bước này để thêm ba ánh xạ nữa:" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:122 msgid "``move_left`` mapped to the left arrow key." msgstr "``move_left`` được ánh xạ tới phím mũi tên trái." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:123 msgid "``move_up`` mapped to the up arrow key." msgstr "``move_up`` được ánh xạ tới phím mũi tên lên." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:124 msgid "And ``move_down`` mapped to the down arrow key." msgstr "Và ``move_down`` được ánh xạ tới phím mũi tên xuống." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:126 msgid "Your input map tab should look like this:" msgstr "Scene tree của bạn sẽ trông như thế này:" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:130 msgid "Click the \"Close\" button to close the project settings." msgstr "Nhấp vào nút \"Đóng\" để đóng cài đặt dự án." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:134 msgid "" "We only mapped one key to each input action, but you can map multiple keys, " "joystick buttons, or mouse buttons to the same input action." msgstr "" "Chúng tôi chỉ ánh xạ một phím cho mỗi hành động nhập liệu, nhưng bạn có thể " "ánh xạ nhiều phím, nút cần điều khiển hoặc nút chuột cho cùng một hành động " "nhập liệu." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:137 msgid "" "You can detect whether a key is pressed using ``Input.is_action_pressed()``, " "which returns ``true`` if it's pressed or ``false`` if it isn't." msgstr "" "Bạn có thể phát hiện liệu một phím được nhấn bằng cách sử dụng `` " "Input.is_action_pressed ()``, sẽ trả về `` true`` nếu nó được nhấn hoặc `` " "false`` nếu không." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:199 msgid "" "We start by setting the ``velocity`` to ``(0, 0)`` - by default, the player " "should not be moving. Then 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* diagonally than if it just moved " "horizontally." msgstr "" "Chúng ta bắt đầu bằng cách đặt ``velocity`` thành ``(0, 0)`` - mặc định, " "player không di chuyển. Sau đó, chúng ta kiểm tra từng đầu vào và cộng / trừ " "``velocity`` để player di chuyển được. Ví dụ: nếu bạn giữ ``right`` và " "``down`` cùng một lúc, vectơ ``velocity`` sẽ là ``(1, 1)``. Trong trường hợp " "này, khi chúng ta thêm chuyển động ngang và dọc đồng thời, player sẽ di " "chuyển * nhanh hơn * so với khi nó chỉ di chuyển theo chiều ngang." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:206 msgid "" "We can prevent that if we *normalize* the velocity, which means we set its " "*length* to ``1``, then multiply by the desired speed. This means no more " "fast diagonal movement." msgstr "" "Chúng ta có thể ngăn chặn điều đó nếu chúng ta *normalize* (bình thường hóa) " "vận tốc, có nghĩa là chúng ta đặt *length* (chiều dài) của nó thành `` 1`` " "và nhân với tốc độ mong muốn. Điều này có nghĩa là không có chuyển động chéo " "nhanh hơn." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:210 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 "" "Nếu bạn chưa bao giờ sử dụng toán học vectơ trước đây hoặc cần làm mới, bạn " "có thể xem giải thích về việc sử dụng vectơ trong Godot tại: ref: " "`doc_vector_math`. Thật tốt khi biết nhưng sẽ không cần thiết cho phần còn " "lại của hướng dẫn này." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:214 msgid "" "We also check whether the player is moving so we can call ``play()`` or " "``stop()`` on the AnimatedSprite2D." msgstr "" "Chúng tôi cũng kiểm tra xem player có di chuyển hay không để chúng tôi có " "thể bắt đầu hoặc dừng hoạt hình AnimatedSprite." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:217 msgid "" "``$`` is shorthand for ``get_node()``. So in the code above, " "``$AnimatedSprite2D.play()`` is the same as " "``get_node(\"AnimatedSprite2D\").play()``." msgstr "" "``$`` là viết tắt của ``get_node ()``. Vì vậy, trong đoạn mã trên, ``$ " "AnimatedSprite.play ()`` giống như ``get_node (\"AnimatedSprite\"). Play " "()``." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:221 msgid "" "In GDScript, ``$`` returns the node at the relative path from the current " "node, or returns ``null`` if the node is not found. Since AnimatedSprite2D " "is a child of the current node, we can use ``$AnimatedSprite2D``." msgstr "" "Trong GDScript, ``$`` trả về node tại đường dẫn tương đối từ node hiện tại " "hoặc trả về ``null`` nếu không tìm thấy node. Vì AnimatedSprite là con của " "node hiện tại, chúng ta có thể sử dụng ``$ AnimatedSprite``." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:226 msgid "" "Now that we have a movement direction, we can update the player's position. " "We can also use ``clamp()`` to prevent it from leaving the screen. " "*Clamping* a value means restricting it to a given range. Add the following " "to the bottom of the ``_process`` function (make sure it's not indented " "under the `else`):" msgstr "" "Bây giờ chúng ta đã có hướng di chuyển, chúng ta có thể cập nhật vị trí của " "player và sử dụng ``clamp()`` để ngăn không cho nó rời khỏi màn hình bằng " "cách thêm phần sau vào dưới cùng của hàm ``_ process``:" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:245 msgid "" "The `delta` parameter in the `_process()` function refers to the *frame " "length* - the amount of time that the previous frame took to complete. Using " "this value ensures that your movement will remain consistent even if the " "frame rate changes." msgstr "" "Tham số `delta` trong hàm `_process()` đề cập đến * độ dài khung hình * - " "lượng thời gian mà khung hình trước đó mất để hoàn thành. Sử dụng giá trị " "này đảm bảo rằng chuyển động của bạn sẽ vẫn nhất quán ngay cả khi tốc độ " "khung hình thay đổi." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:250 msgid "" "Click \"Run Current Scene\" (:kbd:`F6`, :kbd:`Cmd + R` on macOS) and confirm " "you can move the player around the screen in all directions." msgstr "" "Nhấp vào \"Chạy cảnh hiện tại \" (:kbd:`F6`, :kbd:`Cmd + R` trên macOS ) và " "xác nhận rằng bạn có thể di chuyển trình phát xung quanh màn hình theo mọi " "hướng." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:253 msgid "If you get an error in the \"Debugger\" panel that says" msgstr "Nếu bạn nhận được lỗi trong bảng \"Trình gỡ lỗi\" có nội dung" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:255 msgid "" "``Attempt to call function 'play' in base 'null instance' on a null " "instance``" msgstr "" "``Cố gắng gọi hàm 'play' trong cơ sở ' thể hiện null' trên một thể hiện null " "``" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:258 msgid "" "this likely means you spelled the name of the AnimatedSprite2D node wrong. " "Node names are case-sensitive and ``$NodeName`` must match the name you see " "in the scene tree." msgstr "" "Nếu bạn gặp lỗi trong bảng \"Debugger\" đề cập đến \"null instance\", điều " "này có thể có nghĩa là bạn đã viết sai tên node. Tên node có phân biệt chữ " "hoa chữ thường và ``$NodeName`` hoặc ``get_node (\"NodeName\")`` phải khớp " "với tên bạn nhìn thấy trong scene tree." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:263 msgid "Choosing animations" msgstr "Chọn hình ảnh động (animation)" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:265 msgid "" "Now that the player can move, we need to change which animation the " "AnimatedSprite2D is playing based on its direction. We have the \"walk\" " "animation, which shows the player walking to the right. This animation " "should be flipped horizontally using the ``flip_h`` property for left " "movement. We also have the \"up\" animation, which should be flipped " "vertically with ``flip_v`` for downward movement. Let's place this code at " "the end of the ``_process()`` function:" msgstr "" "Bây giờ player có thể di chuyển, chúng ta cần thay đổi hoạt hình nào mà " "AnimatedSprite đang phát dựa trên hướng mà player sẽ di chuyển. Chúng ta có " "một hình động \"right\", nên được lật theo chiều ngang bằng cách sử dụng " "thuộc tính ``flip_h`` cho chuyển động bên trái và một hình động \"up\", nên " "được lật theo chiều dọc với `` flip_v`` cho chuyển động đi xuống. Chúng ta " "hãy đặt mã này vào cuối hàm ``_ process ()`` của chúng ta:" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:299 msgid "" "The boolean assignments in the code above are a common shorthand for " "programmers. Since we're doing a comparison test (boolean) and also " "*assigning* a boolean value, we can do both at the same time. Consider this " "code versus the one-line boolean assignment above:" msgstr "" "Các phép gán boolean trong đoạn mã trên là một cách viết tắt phổ biến cho " "các lập trình viên. Xem xét mã này so với phép gán boolean rút gọn ở trên:" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:323 msgid "" "Play the scene again and check that the animations are correct in each of " "the directions." msgstr "" "Phát lại cảnh đó và kiểm tra xem hình ảnh động có chính xác theo từng hướng " "không." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:326 msgid "" "A common mistake here is to type the names of the animations wrong. The " "animation names in the SpriteFrames panel must match what you type in the " "code. If you named the animation ``\"Walk\"``, you must also use a capital " "\"W\" in the code." msgstr "" "Một lỗi thường gặp ở đây là nhập sai tên của hoạt ảnh. Tên hoạt ảnh trong " "bảng SpriteFrames phải khớp với tên bạn nhập trong mã. Nếu bạn đặt tên hoạt " "ảnh là ``\"Walk\"``, bạn cũng phải sử dụng chữ \"W\" viết hoa trong mã." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:331 msgid "" "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 "" "Phát lại cảnh và kiểm tra xem các hình động có chính xác theo từng hướng " "không. Khi bạn chắc chắn rằng chuyển động đang hoạt động chính xác, hãy thêm " "dòng này vào ``_ready()``, để player sẽ bị ẩn khi trò chơi bắt đầu:" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:344 msgid "Preparing for collisions" msgstr "Chuẩn bị va chạm" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:346 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 "" "Chúng ta muốn `` Player`` phát hiện khi nó tấn công kẻ thù, nhưng chúng tôi " "chưa tạo ra bất kỳ kẻ thù nào! Không sao, vì chúng ta sẽ sử dụng chức năng * " "signal * của Godot để làm cho nó hoạt động." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:350 msgid "" "Add the following at the top of the script. If you're using GDScript, add it " "after ``extends Area2D``. If you're using C#, add it after ``public partial " "class Player : Area2D``:" msgstr "" "Thêm phần sau vào đầu tập lệnh . Nếu bạn đang sử dụng GDScript , hãy thêm " "phần này sau ``extends Area2D``. Nếu bạn đang sử dụng C#, hãy thêm phần này " "sau ``public partial class Player : Area2D``:" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:365 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 "" "Điều này xác định một tín hiệu tùy chỉnh được gọi là \"hit\" mà chúng ta sẽ " "có người chơi phát ra (gửi đi) khi nó va chạm với kẻ thù. Chúng tôi sẽ sử " "dụng ``Area2D`` để phát hiện va chạm. Chọn nút ``Player`` và nhấp vào tab " "\"Node\" bên cạnh tab Inspector để xem danh sách các signal mà player có thể " "phát ra:" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:372 msgid "" "Notice our custom \"hit\" signal is there as well! Since our enemies are " "going to be ``RigidBody2D`` nodes, we want the ``body_entered(body: " "Node2D)`` signal. This signal will be emitted when a body contacts the " "player. Click \"Connect..\" and the \"Connect a Signal\" window appears." msgstr "" "Lưu ý tín hiệu \"hit\" tùy chỉnh của chúng ta là có! Vì kẻ thù của chúng ta " "sẽ là các node `` RigidBody2D``, nên chúng ta muốn tín hiệu ``body_entered " "(Object body)``; điều này sẽ được phát ra khi một cơ thể tiếp xúc với " "player. Nhấp vào \"Connect..\" và sau đó \"Connect\" lại trên cửa sổ " "\"Connecting Signal\". Chúng ta không cần thay đổi bất kỳ cài đặt nào trong " "số này - Godot sẽ tự động tạo một chức năng trong tập lệnh củaplayer của " "bạn. Hàm này sẽ được gọi bất cứ khi nào tín hiệu được phát ra - nó * xử lý * " "tín hiệu." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:377 msgid "" "Godot will create a function with that exact name directly in script for " "you. You don't need to change the default settings right now." msgstr "" "Godot sẽ tạo một hàm có tên chính xác đó trực tiếp trong tập lệnh cho bạn. " "Bạn không cần phải thay đổi cài đặt mặc định ngay bây giờ." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:384 msgid "" "If you're using an external text editor (for example, Visual Studio Code), a " "bug currently prevents Godot from doing so. You'll be sent to your external " "editor, but the new function won't be there." msgstr "" "Nếu bạn đang sử dụng trình soạn thảo văn bản bên ngoài (ví dụ: Visual Studio " "Code), hiện tại có một lỗi ngăn Godot thực hiện việc này. Bạn sẽ được chuyển " "đến trình soạn thảo bên ngoài của mình, nhưng chức năng mới sẽ không có ở đó." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:388 msgid "" "In this case, you'll need to write the function yourself into the Player's " "script file." msgstr "" "Trong trường hợp này, bạn sẽ phải tự viết hàm vào tệp tập lệnh của Player ." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:393 msgid "" "Note the green icon indicating that a signal is connected to this function; " "this does not mean the function exists, only that the signal will attempt to " "connect to a function with that name, so double-check that the spelling of " "the function matches exactly!" msgstr "" "Lưu ý biểu tượng màu xanh lá cây cho biết có tín hiệu được kết nối với chức " "năng này ; điều này không có nghĩa là chức năng này tồn tại, mà chỉ có nghĩa " "là tín hiệu sẽ cố gắng kết nối với một chức năng có tên đó, vì vậy hãy kiểm " "tra lại xem chính tả của chức năng có khớp chính xác không!" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:397 msgid "Next, add this code to the function:" msgstr "Tiếp theo, thêm đoạn mã này vào hàm :" #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:419 msgid "" "Each time an enemy hits the player, the signal is going to be emitted. We " "need to disable the player's collision so that we don't trigger the ``hit`` " "signal more than once." msgstr "" "Mỗi khi kẻ địch tấn công player, tín hiệu sẽ được phát ra. Chúng ta cần phải " "vô hiệu hóa va chạm của player để không kích hoạt tín hiệu `` hit`` nhiều " "lần." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:423 msgid "" "Disabling the area's collision shape can cause an error if it happens in the " "middle of the engine's collision processing. Using ``set_deferred()`` tells " "Godot to wait to disable the shape until it's safe to do so." msgstr "" "Vô hiệu hóa hình dạng va chạm của khu vực có thể gây ra lỗi nếu nó xảy ra ở " "giữa quá trình xử lý va chạm của engine. Sử dụng ``set_deferred()`` cho phép " "chúng ta chờ Godot chờ để vô hiệu hóa hình dạng cho đến khi an toàn để làm " "như vậy." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:428 msgid "" "The last piece is to add a function we can call to reset the player when " "starting a new game." msgstr "" "Phần cuối cùng cho player của chúng ta là thêm một chức năng mà chúng ta có " "thể gọi để đặt lại player khi bắt đầu trò chơi mới." #: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:448 msgid "With the player working, we'll work on the enemy in the next lesson." msgstr "" "Khi người chơi đang làm việc, chúng ta sẽ làm việc với kẻ thù trong bài học " "tiếp theo." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:4 msgid "Creating the enemy" msgstr "Tạo nội dung" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:6 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, choose a random direction, and move in a straight line." msgstr "" "Bây giờ là lúc để làm cho kẻ thù, player của chúng ta sẽ phải né tránh. Hành " "vi của chúng sẽ không phức tạp lắm: các mob sẽ sinh sản ngẫu nhiên ở các " "cạnh của màn hình và di chuyển theo hướng ngẫu nhiên theo một đường thẳng, " "sau đó biến mất khi chúng rời khỏi màn hình." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:10 msgid "" "We'll create a ``Mob`` scene, which we can then *instance* to create any " "number of independent mobs in the game." msgstr "" "Chúng tôi sẽ xây dựng cảnh này thành một cảnh `` Mob``, sau đó chúng tôi có " "thể *instance* để tạo bất kỳ số lượng mob độc lập nào trong trò chơi." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:14 msgid "Node setup" msgstr "Thiết lập node" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:16 msgid "Click Scene -> New Scene from the top menu and add the following nodes:" msgstr "Nhấp vào Cảnh-> Tạo cảnh mới, và thêm các nút sau đây:" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:18 msgid ":ref:`RigidBody2D ` (named ``Mob``)" msgstr ":ref:`RigidBody2D ` (tên là `` Mob``)" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:20 msgid ":ref:`AnimatedSprite2D `" msgstr ":ref:`AnimatedSprite `" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:21 msgid ":ref:`CollisionShape2D `" msgstr ":ref:`CollisionShape2D `" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:22 msgid ":ref:`VisibleOnScreenNotifier2D `" msgstr "" ":ref:`VisibilityNotifier2D ` (tên là " "``Visibility``)" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:24 msgid "" "Don't forget to set the children so they can't be selected, like you did " "with the Player scene. This is done by selecting the parent node " "(``RigidBody2D``) in the Scene tree dock, then using the :button:`Group` " "button at the top of the 2D editor (or pressing :kbd:`Ctrl + G`)." msgstr "" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:29 msgid "" "Select the ``Mob`` node and set its ``Gravity Scale`` property in " "the :ref:`RigidBody2D ` section of the inspector to " "``0``. This will prevent the mob from falling downwards." msgstr "" "Chọn nút ``Mob`` và đặt thuộc tính ``Gravity Scale`` của nó trong " "phần :ref:`RigidBody2D ` của trình kiểm tra thành ``0``. " "Điều này sẽ ngăn không cho mob rơi xuống." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:34 msgid "" "In addition, under the :ref:`CollisionObject2D ` " "section just beneath the **RigidBody2D** section, expand the **Collision** " "group and uncheck the ``1`` inside the ``Mask`` property. This will ensure " "the mobs do not collide with each other." msgstr "" "Trong các thuộc tính: ref:`RigidBody2D `, đặt ``Gravity " "Scale`` thành ``0``, vì vậy mob sẽ không rơi xuống. Ngoài ra, trong phần " "``ChemistryBody2D``, nhấp vào thuộc tính ``Mask`` và bỏ chọn hộp đầu tiên. " "Điều này sẽ đảm bảo các mob không va chạm với nhau." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:42 msgid "" "Set up the :ref:`AnimatedSprite2D ` like you did for " "the player. This time, we have 3 animations: ``fly``, ``swim``, and " "``walk``. There are two images for each animation in the art folder." msgstr "" "Thiết lập: ref: `AnimatedSprite ` giống như bạn đã làm " "cho player. Lần này, chúng ta có 3 hình ảnh động: ``fly``, ``swim`` và " "``walk``. Đặt thuộc tính ``Playing`` trong Inspector thành \"On\" và điều " "chỉnh cài đặt \"Speed (FPS)\" như hiển thị bên dưới. Chúng tôi sẽ chọn một " "trong những hình ảnh động này một cách ngẫu nhiên để mob sẽ có một số loại." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:46 msgid "" "The ``Animation Speed`` property has to be set for each individual " "animation. Adjust it to ``3`` for all 3 animations." msgstr "" "Thuộc tính `` Animation Speed`` phải được thiết lập cho từng hoạt ảnh riêng " "lẻ . Điều chỉnh thành ``3`` cho cả 3 hoạt ảnh." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:50 msgid "" "You can use the \"Play Animation\" buttons on the right of the ``Animation " "Speed`` input field to preview your animations." msgstr "" "Bạn có thể sử dụng nút \"Phát hoạt ảnh \" ở bên phải trường nhập `` Tốc độ " "hoạt ảnh`` để xem trước hoạt ảnh của mình." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:52 msgid "" "We'll select one of these animations randomly so that the mobs will have " "some variety." msgstr "" "Chúng tôi sẽ chọn ngẫu nhiên một trong những hình ảnh động này để đám đông " "có thể đa dạng hơn." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:55 msgid "" "Like the player images, these mob images need to be scaled down. Set the " "``AnimatedSprite2D``'s ``Scale`` property to ``(0.75, 0.75)``." msgstr "" "Giống như hình ảnh player, những hình ảnh mob này cần được thu nhỏ lại. Đặt " "thuộc tính ``Scale`` của ``AnimatedSprite`` thành `` (0,75, 0,75) ``." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:58 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`` property " "to ``90`` (under \"Transform\" in the Inspector)." msgstr "" "Như trong cảnh ``Player``, thêm ``CapsuleShape2D`` cho việc va chạm. Để căn " "chỉnh hình dạng với hình ảnh, bạn sẽ cần đặt thuộc tính ``Rotation Độ 'thành " "``90`` bên dưới ``Node2D``." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:62 msgid "Save the scene." msgstr "Cảnh người chơi." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:65 msgid "Enemy script" msgstr "Kịch bản kẻ thù" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:67 msgid "Add a script to the ``Mob`` like this:" msgstr "Thêm một tập lệnh vào `` Mob`` và thêm các biến thành viên sau:" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:83 msgid "" "Now let's look at the rest of the script. In ``_ready()`` we play the " "animation and randomly choose one of the three animation types:" msgstr "" "Bây giờ hãy xem phần còn lại của kịch bản. Trong ``_ready()``, chúng ta chọn " "ngẫu nhiên một trong ba loại hoạt hình:" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:103 msgid "" "First, we get the list of animation names from the AnimatedSprite2D's " "``sprite_frames`` property. This returns an Array containing all three " "animation names: ``[\"walk\", \"swim\", \"fly\"]``." msgstr "" "Đầu tiên, chúng ta lấy danh sách của tên hoạt hình đến từ AnimatedSprite2D's " "``sprite_frames`` property." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:107 #, fuzzy msgid "" "In the GDScript code, we use the :ref:`Array.pick_random " "` method to select one of these animation " "names at random. Meanwhile, in the C# code, we pick a random number between " "``0`` and ``2`` to select one of these names from the list (array indices " "start at ``0``). The expression ``GD.Randi() % n`` selects a random integer " "between ``0`` and ``n-1``." msgstr "" "Chúng ta cần chọn ngẫu nhiên giữa các con số ``0`` và ``2`` để chọn một cái " "tên đến từ danh sách này (chỉ số mảng bắt đầu từ ``0``). ``randi() % n`` " "chọn một số nguyên ngẫu nhiên giữa ``0`` và ``n-1``." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:112 msgid "Finally, we call ``play()`` to start playing the chosen animation." msgstr "" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:114 msgid "" "The last piece is to make the mobs delete themselves when they leave the " "screen. Connect the ``screen_exited()`` signal of the " "``VisibleOnScreenNotifier2D`` node to the ``Mob`` and add this code:" msgstr "" "Phần cuối cùng là làm cho mob tự xóa khi họ rời khỏi màn hình. Kết nối tín " "hiệu ``screen_exited()`` của node ``Visibility`` và thêm mã này:" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:132 msgid "" "``queue_free()`` is a function that essentially 'frees', or deletes, the " "node at the end of the frame." msgstr "" #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:134 msgid "This completes the `Mob` scene." msgstr "Điều này hoàn thành cảnh `Mob`." #: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:136 msgid "" "With the player and enemies ready, in the next part, we'll bring them " "together in a new scene. We'll make enemies spawn randomly around the game " "board and move forward, turning our project into a playable game." msgstr "" "Với người chơi và kẻ thù sẵn sàng, trong phần tiếp theo, chúng tôi sẽ đưa " "chúng lại với nhau trong một cảnh mới. Chúng tôi sẽ làm kẻ thù xuất hiện " "ngẫu nhiên xung quanh bảng trò chơi và di chuyển tới phía trước, biến dự án " "của chúng tôi thành một trò chơi có thể chơi được." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:4 msgid "The main game scene" msgstr "Script một scene" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:6 msgid "" "Now it's time to bring everything we did together into a playable game scene." msgstr "" "Bây giờ là lúc chúng ta mang mọi thứ chúng ta làm vào một cảnh trò chơi có " "thể chơi được." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:8 msgid "" "Create a new scene and add a :ref:`Node ` named ``Main``. (The " "reason we are using Node instead of Node2D is because this node will be a " "container for handling game logic. It does not require 2D functionality " "itself.)" msgstr "" "Bây giờ là lúc kết nối tất cả lại với nhau. (Tạo một cảnh mới và thêm một: " "ref: `Node ` có tên ``Main``. Nhấp vào nút \"Instance\" và chọn " "`` Player.tscn`` đã lưu của bạn.)" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:12 msgid "" "Click the **Instance** button (represented by a chain link icon) and select " "your saved ``player.tscn``." msgstr "" "Chọn nút **Instance** (được biểu thị bằng biểu tượng liên kết chuỗi) và chọn " "mục đã lưu của bạn ``player.tscn``." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:17 msgid "" "Now, add the following nodes as children of ``Main``, and name them as shown:" msgstr "" "Bây giờ, thêm các node sau dưới dạng con của ``Main`` và đặt tên cho chúng " "như được hiển thị (các giá trị được tính bằng giây):" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:19 msgid "" ":ref:`Timer ` (named ``MobTimer``) - to control how often mobs " "spawn" msgstr "" ":ref:`Timer ` (được đặt tên là ``MobTimer``) - để kiểm soát tần " "suất mob sinh sản" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:21 msgid "" ":ref:`Timer ` (named ``ScoreTimer``) - to increment the score " "every second" msgstr "" ":ref: `Timer ` (được đặt tên là ``ScoreTimer``) - để tăng điểm " "mỗi giây" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:23 msgid "" ":ref:`Timer ` (named ``StartTimer``) - to give a delay before " "starting" msgstr "" ":ref: `Timer ` (được đặt tên là ``StartTimer``) - để trì hoãn " "trước khi bắt đầu" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:25 msgid "" ":ref:`Marker2D ` (named ``StartPosition``) - to indicate the " "player's start position" msgstr "" ":ref: `Position2D ` (được đặt tên là ``StartPocation``) - " "để chỉ vị trí bắt đầu của người chơi" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:28 msgid "" "Set the ``Wait Time`` property of each of the ``Timer`` nodes as follows " "(values are in seconds):" msgstr "" "Đặt thuộc tính ``Wait Time`` của mỗi nút ``Timer`` như sau(các giá trị được " "tín bằng giây):" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:30 msgid "``MobTimer``: ``0.5``" msgstr "``MobTimer``: ``0,5``" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:31 msgid "``ScoreTimer``: ``1``" msgstr "``ScoreTimer``: ``1``" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:32 msgid "``StartTimer``: ``2``" msgstr "``StartTimer``: ``2``" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:34 msgid "" "In addition, set the ``One Shot`` property of ``StartTimer`` to \"On\" and " "set ``Position`` of the ``StartPosition`` node to ``(240, 450)``." msgstr "" "Ngoài ra, đặt thuộc tính ``One Shot`` của ` `StartTimer`` thành \"On\" và " "đặt ` `Position`` của node ` `StartPocation`` thành` `(240, 450)` `." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:38 msgid "Spawning mobs" msgstr "Mob sinh sản" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:40 #, fuzzy 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. Click the ``Main`` node in the " "Scene dock, then add a child :ref:`Path2D ` node named " "``MobPath``. When you select ``Path2D``, you will see some new buttons at " "the top of the editor:" msgstr "" "Node Main sẽ sinh ra mob mới và chúng ta muốn chúng xuất hiện ngẫu nhiên " "trên cạnh màn hình. Thêm một node: ref: `Path2D ` có tên `` " "MobPath`` như con của `` Main``. Khi chọn ``Path2D``, bạn sẽ thấy một số nút " "mới ở đầu trình soạn thảo:" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:47 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 \"Use Grid Snap\" and \"Use Smart Snap\" are both selected. These " "options can be found to the left of the \"Lock\" button, appearing as a " "magnet next to some dots and intersecting lines, respectively." msgstr "" "Chọn điểm giữa (\"Add Point\") và vẽ đường dẫn bằng cách nhấp để thêm các " "điểm ở các góc được hiển thị. Để có các điểm được gắn vào grid (lưới), hãy " "đảm bảo đã chọn \"Snap to Grid\". Tùy chọn này có thể được tìm thấy dưới nút " "\"Snapping options\" ở bên trái nút \"Lock\", xuất hiện dưới dạng một loạt " "ba dấu chấm dọc." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:55 msgid "" "Draw the path in *clockwise* order, or your mobs will spawn pointing " "*outwards* instead of *inwards*!" msgstr "" "Vẽ đường dẫn theo thứ tự *clockwise* (*theo chiều kim đồng hồ*) hoặc mob của " "bạn sẽ sinh ra chỉ *ra ngoài* thay vì *vào trong*!" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:60 msgid "" "After placing point ``4`` in the image, click the \"Close Curve\" button and " "your curve will be complete." msgstr "" "Sau khi đặt điểm ``4`` trong ảnh, nhấp vào nút \"Close Curve\" và đường cong " "của bạn sẽ hoàn tất." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:63 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 "" "Bây giờ, đường dẫn đã được xác định, hãy thêm một node: ref: `PathFollow2D " "` làm con của ``MobPath`` và đặt tên cho nó là " "``MobSpawnLocation``. Node này sẽ tự động xoay và đi theo đường dẫn khi nó " "di chuyển, vì vậy chúng ta có thể sử dụng nó để chọn một vị trí và hướng " "ngẫu nhiên dọc theo đường dẫn." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:68 msgid "Your scene should look like this:" msgstr "Scene tree của bạn sẽ trông như thế này:" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:73 msgid "Main script" msgstr "Kịch bản cho Main scene" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:75 msgid "" "Add a script to ``Main``. At the top of the script, we use ``@export var " "mob_scene: PackedScene`` to allow us to choose the Mob scene we want to " "instance." msgstr "" "Thêm một tập lệnh vào ``Main``. Ở đầu tập lệnh, chúng tôi sử dụng ``export " "(PackedScene)`` để cho phép chúng ta chọn cảnh Mob mà chúng ta muốn." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:101 msgid "" "Click the ``Main`` node and you will see the ``Mob Scene`` property in the " "Inspector under \"Main.gd\"." msgstr "" "Nhấp vào node ``Main`` và bạn sẽ nhìn thấy thuộc tính ``Mob Scene`` " "Inspector trong \"Main.gd\"." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:104 msgid "You can assign this property's value in two ways:" msgstr "Bạn có thể gán giá trị của thuộc tính này theo hai cách:" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:106 msgid "" "Drag ``mob.tscn`` from the \"FileSystem\" dock and drop it in the **Mob " "Scene** property." msgstr "" "Kéo ``Mob.tscn`` từ bảng \"FileSystem\" và thả nó vào thuộc tính ``Mob`` " "trong Biến Script của nút `` Main``." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:108 msgid "" "Click the down arrow next to \"[empty]\" and choose \"Load\". Select " "``mob.tscn``." msgstr "" "Nhấp vào mũi tên xuống bên cạnh \"[trống]\" và chọn \"Tải\". Chọn " "``mob.tscn``." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:110 msgid "" "Next, select the instance of the ``Player`` scene under ``Main`` node in the " "Scene dock, and access the Node dock on the sidebar. Make sure to have the " "Signals tab selected in the Node dock." msgstr "" "Chọn Button node trong scene tree và sau đó chọn tab \"Node\". Tiếp theo, " "hãy chắc chắn rằng bạn đã chọn \"Signals\"." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:114 msgid "" "You should see a list of the signals for the ``Player`` node. Find and " "double-click the ``hit`` signal in the list (or right-click it and select " "\"Connect...\"). This will open the signal connection dialog. 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 \"Receiver Method\" box " "at the bottom of the signal connection dialog and click \"Connect\". You are " "aiming to have the ``hit`` signal emitted from ``Player`` and handled in the " "``Main`` script. Add the following code to the new function, as well as a " "``new_game`` function that will set everything up for a new game:" msgstr "" "Tiếp theo, nhấp vào player và kết nối tín hiệu ``hit``. Chúng ta muốn tạo " "một hàm mới có tên ``game_over``, sẽ xử lý những gì cần xảy ra khi trò chơi " "kết thúc. Nhập \"game_over\" vào hộp \"Method In Node\" ở cuối cửa sổ " "\"Connecting Signal\". Thêm mã sau đây, cũng như hàm ``new_game`` để thiết " "lập mọi thứ cho trò chơi mới:" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:155 msgid "" "Now we'll connect the ``timeout()`` signal of each Timer node " "(``StartTimer``, ``ScoreTimer``, and ``MobTimer``) to the main script. For " "each of the three timers, select the timer in the Scene dock, open the " "Signals tab of the Node dock, then double-click the ``timeout()`` signal in " "the list. This will open a new signal connection dialog. The default " "settings in this dialog should be fine, so select **Connect** to create a " "new signal connection." msgstr "" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:162 msgid "" "Once all three timers have this set up, you should be able to see each timer " "have a Signal connection for their respective ``timeout()`` signal, showing " "in green, within their respective Signals tabs:" msgstr "" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:166 msgid "(For MobTimer): ``_on_mob_timer_timeout()``" msgstr "" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:167 msgid "(For ScoreTimer): ``_on_score_timer_timeout()``" msgstr "" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:168 msgid "(For StartTimer): ``_on_start_timer_timeout()``" msgstr "" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:170 #, fuzzy msgid "" "Now we define how each of these timers operate by adding the code below. " "Notice that ``StartTimer`` will start the other two timers, and that " "``ScoreTimer`` will increment the score by 1." msgstr "" "Bây giờ kết nối tín hiệu ``timeout()`` của từng node Timer (``StartTimer``, " "``ScoreTimer`` và ``MobTimer``) với tập lệnh main. ``StartTimer`` sẽ bắt đầu " "hai bộ định thời khác. ``ScoreTimer`` sẽ tăng số điểm lên 1." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:199 msgid "" "In ``_on_mob_timer_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. When " "we spawn a mob, we'll pick a random value between ``150.0`` and ``250.0`` " "for how fast each mob will move (it would be boring if they were all moving " "at the same speed)." msgstr "" "Trong ``_on_mob_timer_timeout()``, chúng ta sẽ tạo một thể hiện mob , chọn " "một vị trí bắt đầu ngẫu nhiên dọc theo ``Path2D`` và thiết lập mob chuyển " "động. Nút ``PathFollow2D`` sẽ tự động xoay khi nó đi theo đường dẫn , vì vậy " "chúng ta sẽ sử dụng nút đó để chọn hướng của mob cũng như vị trí của nó. Khi " "chúng ta tạo ra một mob, chúng ta sẽ chọn một giá trị ngẫu nhiên giữa " "``150.0`` và ``250.0`` cho tốc độ di chuyển của từng mob (sẽ rất nhàm chán " "nếu tất cả chúng đều di chuyển với cùng một tốc độ)." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:207 msgid "" "Note that a new instance must be added to the scene using ``add_child()``." msgstr "" "Lưu ý rằng một phiên bản mới phải được thêm vào cảnh bằng cách sử dụng " "``add_child()``." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:267 msgid "" "Why ``PI``? In functions requiring angles, Godot uses *radians*, not " "degrees. Pi represents a half turn in radians, about ``3.1415`` (there is " "also ``TAU`` which is equal to ``2 * PI``). If you're more comfortable " "working with degrees, you'll need to use the ``deg_to_rad()`` and " "``rad_to_deg()`` functions to convert between the two." msgstr "" "Tại sao lại là ``PI``? Trong các hàm yêu cầu góc, Godot sử dụng *radian*, " "không phải độ. Pi biểu diễn một nửa vòng theo radian, khoảng ``3,1415`` " "(cũng có ``TAU`` bằng ``2 * PI``). Nếu bạn thoải mái hơn khi làm việc với " "độ, bạn sẽ cần sử dụng các hàm ``deg_to_rad()`` và ``rad_to_deg()`` để " "chuyển đổi giữa hai đơn vị này." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:275 msgid "Testing the scene" msgstr "Script một scene" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:277 msgid "" "Let's test the scene to make sure everything is working. Add this " "``new_game`` call to ``_ready()``:" msgstr "" "Hãy kiểm tra cảnh để đảm bảo mọi thứ đang hoạt động. Thêm lệnh gọi " "``new_game`` này vào ``_ready()``:" #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:293 msgid "" "Let's also assign ``Main`` as our \"Main Scene\" - the one that runs " "automatically when the game launches. Press the \"Play\" button and select " "``main.tscn`` when prompted." msgstr "" "Chúng ta cũng hãy gán ``Main`` làm \"Main Scene \" của chúng ta - cảnh chạy " "tự động khi trò chơi khởi chạy. Nhấn nút \"Play\" và chọn ``main.tscn`` khi " "được nhắc." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:297 msgid "" "If you had already set another scene as the \"Main Scene\", you can right " "click ``main.tscn`` in the FileSystem dock and select \"Set As Main Scene\"." msgstr "" "Nếu bạn đã thiết lập một cảnh khác làm \" Cảnh chính \", bạn có thể nhấp " "chuột phải vào ``main.tscn`` trong thanh công cụ FileSystem và chọn \"Đặt " "làm cảnh chính \"." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:300 msgid "" "You should be able to move the player around, see mobs spawning, and see the " "player disappear when hit by a mob." msgstr "" "Bạn sẽ có thể di chuyển người chơi xung quanh, quan sát đám đông xuất hiện " "và thấy người chơi biến mất khi bị đám đông tấn công." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:303 msgid "" "When you're sure everything is working, remove the call to ``new_game()`` " "from ``_ready()`` and replace it with ``pass``." msgstr "" "Khi bạn chắc chắn mọi thứ đang hoạt động, hãy xóa lệnh gọi ``new_game()`` " "khỏi ``_ready()`` và thay thế bằng ``pass``." #: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:306 msgid "" "What's our game lacking? Some user interface. In the next lesson, we'll add " "a title screen and display the player's score." msgstr "" "Trò chơi của chúng ta còn thiếu gì? Một số giao diện người dùng. Trong bài " "học tiếp theo, chúng ta sẽ thêm màn hình tiêu đề và hiển thị điểm của người " "chơi." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:4 msgid "Heads up display" msgstr "Màn hình hiển thị" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:6 msgid "" "The final piece our game needs is a User Interface (UI) to display things " "like score, a \"game over\" message, and a restart button." msgstr "" "Mảnh ghép cuối cùng mà trò chơi của chúng ta cần là Giao diện người dùng " "(UI) để hiển thị những thông tin như điểm số, thông báo \"trò chơi kết " "thúc\" và nút khởi động lại." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:9 msgid "" "Create a new scene, click the \"Other Node\" button 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 "" "Tạo một cảnh mới, nhấp vào nút \"Other Node\" và thêm một " "nút :ref:`CanvasLayer ` có tên là ``HUD``. \"HUD\" là " "viết tắt của \"heads-up display\", một màn hình hiển thị thông tin xuất hiện " "dưới dạng lớp phủ trên cùng của chế độ xem trò chơi." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:13 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 "" "Nút :ref:`CanvasLayer ` cho phép chúng ta vẽ các thành " "phần UI trên một lớp phía trên phần còn lại của trò chơi, do đó thông tin " "hiển thị không bị che khuất bởi bất kỳ thành phần trò chơi nào như người " "chơi hoặc mob." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:17 msgid "The HUD needs to display the following information:" msgstr "HUD cần hiển thị những thông tin sau:" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:19 msgid "Score, changed by ``ScoreTimer``." msgstr "Score, được thay đổi bởi ``ScoreTimer``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:20 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "Một thông báo như \"Game Over\" hoặc \"Get Ready!\"" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:21 msgid "A \"Start\" button to begin the game." msgstr "Nút \"Start\" để bắt đầu trò chơi." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:23 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 "" "Nút cơ bản cho các thành phần UI là :ref:`Control `. Để tạo " "UI, chúng ta sẽ sử dụng hai loại nút :ref:`Control " "`: :ref:`Label ` và :ref:`Button `." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:27 msgid "Create the following as children of the ``HUD`` node:" msgstr "Tạo các mục trẻ em sau đây của nút ``HUD``:" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:29 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr ":ref:`Label ` có tên là ``ScoreLabel``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:30 msgid ":ref:`Label ` named ``Message``." msgstr ":ref:`Label ` có tên là ``Message``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:31 msgid ":ref:`Button ` named ``StartButton``." msgstr ":ref:`Button ` có tên là ``StartButton``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:32 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr ":ref:`Timer ` có tên là ``MessageTimer``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:34 msgid "" "Click on the ``ScoreLabel`` and type a number into the ``Text`` field in the " "Inspector. 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:" msgstr "" "Nhấn vào ``ScoreLabel`` và một loại số vào ``Text`` trong Inspector. Phông " "chữ mặt định cho nút ``Control`` nhỏ và không có tỉ lệ tốt. Có một tệp phông " "chữ được bao gồm trong tài sản trò chơi có tên là \"Xolonium-Regular.ttf\". " "Để sử dụng phông chữ này, hãy làm như sau:" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:39 msgid "" "Under \"Theme Overrides > Fonts\", choose \"Load\" and select the \"Xolonium-" "Regular.ttf\" file." msgstr "" "Trong \"Theme Overrides > Fonts\", chọn \"Load\" và chọn tệp \"Xolonium-" "Regular.ttf\"." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:43 msgid "" "The font size is still too small, increase it to ``64`` under \"Theme " "Overrides > Font Sizes\". Once you've done this with the ``ScoreLabel``, " "repeat the changes for the ``Message`` and ``StartButton`` nodes." msgstr "" "Cỡ chữ vẫn quá nhỏ hãy tăng nó lên ``64`` trong \"Theme Overrides > Font " "Sizes\". Sau khi thực hiện xong với ``ScoreLabel``, hãy lặp lại các thay đổi " "cho các nút ``Message`` và ``StartButton``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:48 msgid "" "**Anchors:** ``Control`` nodes have a position and size, but they also have " "anchors. Anchors define the origin - the reference point for the edges of " "the node." msgstr "" "**Anchors (Được gọi là neo dùng để giữ ở vị trí cố định):** nút ``Control`` " "có vị trí và kích cỡ, nhưng nó cũng có neo. Neo xác định điểm gốc - điểm " "tham chiếu cho các cạnh của nút." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:52 msgid "" "Arrange the nodes as shown below. You can drag the nodes to place them " "manually, or for more precise placement, use \"Anchor Presets\"." msgstr "" "Sắp xếp các nút như hình dưới đây. Bạn có thể kéo các nút để đặt chúng theo " "cách thủ công hoặc để đặt chính xác hơn, hãy sử dụng \"Anchor Presets\"." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:59 msgid "ScoreLabel" msgstr "Nhãn điểm" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:61 msgid "Add the text ``0``." msgstr "Thêm văn bản ``0``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:62 #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:69 msgid "" "Set the \"Horizontal Alignment\" and \"Vertical Alignment\" to ``Center``." msgstr "" "Thiết lập \"Horizontal Alignment\" và \"Vertical Alignment\" thành " "``Center``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:63 msgid "Choose the \"Anchor Preset\" ``Center Top``." msgstr "Chọn \"Anchor Preset\" ``Center Top``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:66 msgid "Message" msgstr "Thông điệp" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:68 msgid "Add the text ``Dodge the Creeps!``." msgstr "Thêm văn bản ``Dodge the Creeps!``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:70 msgid "" "Set the \"Autowrap Mode\" to ``Word``, otherwise the label will stay on one " "line." msgstr "" "Thiết lập \"Autowrap Mode\" thành ``Word``, Nếu không nhãn sẽ ở lại trên một " "dòng ." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:71 msgid "" "Under \"Control - Layout/Transform\" set \"Size X\" to ``480`` to use the " "entire width of the screen." msgstr "" "Trong \"Control - Layout/Transform\" thiết lập \"Size X\" thành ``480`` để " "sử dụng toàn bộ chiều rộng của màn hình." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:72 msgid "Choose the \"Anchor Preset\" ``Center``." msgstr "Chọn \"Anchor Preset\" ``Center``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:75 msgid "StartButton" msgstr "Nút bắt đầu" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:77 msgid "Add the text ``Start``." msgstr "Thêm văn bản ``Start``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:78 msgid "" "Under \"Control - Layout/Transform\", set \"Size X\" to ``200`` and \"Size " "Y\" to ``100`` to add a little bit more padding between the border and text." msgstr "" "Trong \"Control - Layout/Transform\", đặt \"Size X\" thành ``200`` và \"Size " "Y\" thành ``100`` để thêm một chút khoảng đệm giữa viền và văn bản." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:80 msgid "Choose the \"Anchor Preset\" ``Center Bottom``." msgstr "Chọn \"Anchor Preset\" ``Center Bottom``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:81 msgid "Under \"Control - Layout/Transform\", set \"Position Y\" to ``580``." msgstr "" "Trong \"Control - Layout/Transform\", đặt \"Position Y\" thành ``580``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:83 msgid "" "On the ``MessageTimer``, set the ``Wait Time`` to ``2`` and set the ``One " "Shot`` property to \"On\"." msgstr "" "Vào ``MessageTimer``, đặt ``Wait Time`` thành ``2`` và đặt thuộc tính ``One " "Shot`` thành \"On\"." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:86 msgid "Now add this script to ``HUD``:" msgstr "Bây giờ thêm script này vào ``HUD``:" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:108 msgid "" "We now want to display a message temporarily, such as \"Get Ready\", so we " "add the following code" msgstr "" "Bây giờ chúng ta muốn hiển thị một thông báo tạm thời như là \"Get Ready\", " "vì vậy chúng ta thêm mã sau" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:130 msgid "" "We also need to process what happens when the player loses. The code below " "will show \"Game Over\" for 2 seconds, then return to the title screen and, " "after a brief pause, show the \"Start\" button." msgstr "" "Chúng ta cũng cần xử lý quá trình diễn ra với người chơi khi thất bại. Mã " "dưới sẽ hiện ra \"Game Over\" cho 2 giây, sau đó trở lại màn hình tiêu đề, " "sau đó dừng một thời gian ngắn, hiển thị nút \"Start\"." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:163 msgid "" "When you need to pause for a brief time, an alternative to using a Timer " "node is to use the SceneTree's ``create_timer()`` function. This can be very " "useful to add delays such as in the above code, where we want to wait some " "time before showing the \"Start\" button." msgstr "" "Khi bạn cần dừng một chút thời gian, một giải pháp thay thế cho sử dụng một " "nút Timer là dùng SceneTree's hàm ``create_timer()``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:168 msgid "Add the code below to ``HUD`` to update the score" msgstr "Thêm mã bên dưới vào ``HUD`` để cập nhật điểm số" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:183 msgid "" "Connect the ``pressed()`` signal of ``StartButton`` and the ``timeout()`` " "signal of ``MessageTimer`` to the ``HUD`` node, and add the following code " "to the new functions:" msgstr "" "Kết nối tín hiệu``pressed()`` của ``StartButton`` và tín hiệu ``timeout()`` " "của ``MessageTimer`` với nút ``HUD`` , thêm mã sau vào hàm mới:" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:212 msgid "Connecting HUD to Main" msgstr "Kết nối HUD vào Main" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:214 msgid "" "Now that we're done creating the ``HUD`` scene, go back to ``Main``. " "Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` scene. " "The scene tree should look like this, so make sure you didn't miss anything:" msgstr "" "Bây giờ chúng ta xong việc tạo ra cảnh ``HUD``, trở lại ``Main``. Ví dụ cảnh " "``HUD`` trong ``Main`` giống như bạn đã làm với cảnh ``Player``.Cảnh cây sẽ " "trông như thế này, vì vậy bạn không được bỏ qua điều gì:" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:220 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" "Bây giờ chúng ta cần kết nối tới chức năng ``HUD`` và tập lệnh ``Main`` của " "chúng ta. Yêu cầu này bổ sung một vài cảnh vào ``Main``:" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:223 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function of the Main node by clicking the \"Pick\" button in " "the \"Connect a Signal\" window and selecting the ``new_game()`` method or " "type \"new_game\" below \"Receiver Method\" in the window. Verify that the " "green connection icon now appears next to ``func new_game()`` in the script." msgstr "" "Trong tab Node, kết nối tín hiệu ``start_game`` của HUD với hàm " "``new_game()`` của Main node bằng cách nhấp vào nút \"Pick\" trong cửa sổ " "\"Connect a Signal\" và chọn phương thức ``new_game()`` hoặc nhập " "\"new_game\" bên dưới \"Receiver Method\" trong cửa sổ. Xác minh rằng biểu " "tượng kết nối màu xanh lá cây hiện xuất hiện bên cạnh ``func new_game()`` " "trong tập lệnh." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:229 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" "Trong ``new_game()``, cập nhật hiển thị điểm số và hiển thị thông báo \"Get " "Ready\":" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:243 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "Trong ``game_over()`` chúng ta cần gọi hàm tương ứng ``HUD``:" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:254 msgid "" "Finally, add this to ``_on_score_timer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" "Cuối cùng, thêm vào ``_on_score_timer_timeout()`` để giữ hiển thị và đồng bộ " "với thay đổi điểm số:" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:268 msgid "" "Remember to remove the call to ``new_game()`` from ``_ready()`` if you " "haven't already, otherwise your game will start automatically." msgstr "" "Nhớ xoá lệnh gọi ``new_game()`` từ ``_ready()`` nếu bạn chưa thực hiện, nếu " "không trò chơi của bạn sẽ tự động bắt đầu." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:272 #, fuzzy msgid "Now you're ready to play! Click the \"Play the Project\" button." msgstr "" "Bây giờ bạn đã sẵn sàng để chơi! Nhấp vào nút \"Play the Project\". Bạn sẽ " "được yêu cầu chọn một cảnh chính, vì vậy hãy chọn ``main.tscn``." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:275 msgid "Removing old creeps" msgstr "Xoá bỏ các creep cũ" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:277 msgid "" "If you play until \"Game Over\" and then start a new game right away, the " "creeps from the previous game may still be on the screen. It would be better " "if they all disappeared at the start of a new game. We just need a way to " "tell *all* the mobs to remove themselves. We can do this with the \"group\" " "feature." msgstr "" "Nếu bạn chơi cho đến khi \"Game Over\" và sau đó bắt đầu một trò chơi mới " "ngay lập tức, những con quái vật từ trò chơi trước có thể vẫn còn trên màn " "hình. Sẽ tốt hơn nếu tất cả chúng biến mất khi bắt đầu một trò chơi mới. " "Chúng ta chỉ cần một cách để bảo *tất cả* đám quái vật tự biến mất. Chúng ta " "có thể làm điều này với tính năng \"nhóm\"." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:282 #, fuzzy msgid "" "In the ``Mob`` scene, select the root node and click the \"Node\" tab next " "to the Inspector (the same place where you find the node's signals). Next to " "\"Signals\", click \"Groups\" to open the group overview and the \"+\" " "button to open the \"Create New Group\" dialog." msgstr "" "Trong cảnh ``Mob``, chọn nút gốc và nhấp vào tab \"Node\" bên cạnh Inspector " "(cùng vị trí bạn tìm thấy tín hiệu của nút). Bên cạnh \"Signals\", nhấp vào " "\"Groups\" và bạn có thể nhập tên nhóm mới và nhấp vào \"Add\"." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:289 msgid "Name the group ``mobs`` and click \"ok\" to add a new scene group." msgstr "" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:293 msgid "Now all mobs will be in the \"mobs\" group." msgstr "" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:297 #, fuzzy msgid "" "We can then add the following line to the ``new_game()`` function in " "``Main``:" msgstr "" "Bây giờ tất cả mob sẽ nằm trong nhóm \"mobs\". Sau đó, chúng ta có thể thêm " "dòng sau vào hàm ``new_game()`` trong ``Main``:" #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:310 msgid "" "The ``call_group()`` function calls the named function on every node in a " "group - in this case we are telling every mob to delete itself." msgstr "" "Hàm ``call_group()`` gọi hàm được đặt tên trên mọi nút trong một nhóm - " "trong trường hợp này, chúng ta đang yêu cầu mọi mob tự xóa chính nó." #: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:313 msgid "" "The game's mostly done at this point. In the next and last part, we'll " "polish it a bit by adding a background, looping music, and some keyboard " "shortcuts." msgstr "" "Trò chơi đã gần hoàn thành ở thời điểm này. Trong phần tiếp theo và cũng là " "phần cuối cùng, chúng tôi sẽ chỉnh sửa một chút bằng cách thêm nhạc nền, " "nhạc lặp và một số phím tắt." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:4 msgid "Finishing up" msgstr "Hoàn thành" #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:6 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." msgstr "" "Chúng tôi hiện đã hoàn thành mọi chức năng cho trò chơi của mình. Dưới đây " "là một số bước còn lại để thêm một chút \"nước ép\" nhằm cải thiện trải " "nghiệm trò chơi." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:9 msgid "Feel free to expand the gameplay with your own ideas." msgstr "Hãy thoải mái mở rộng lối chơi theo ý tưởng của riêng bạn." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:12 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:133 msgid "Background" msgstr "Nền" #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:14 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 select \"Layout\" -> \"Anchors Preset\" -> \"Full Rect\" " "either in the toolbar at the top of the viewport or in the inspector so that " "it covers the screen." msgstr "" "Nền xám mặc định không hấp dẫn lắm, vì vậy hãy thay đổi màu của nó. Một cách " "để thực hiện điều này là sử dụng nút :ref:`ColorRect `. " "Biến nó thành nút đầu tiên bên dưới ``Main`` để nó được vẽ phía sau các nút " "khác. ``ColorRect`` chỉ có một thuộc tính: ``Color``. Chọn một màu bạn thích " "và chọn \"Layout\" -> \"Anchors Preset\" -> \"Full Rect\" trên thanh công cụ " "ở đầu khung nhìn hoặc trong thanh kiểm tra để nó bao phủ màn hình." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:20 msgid "" "You could also add a background image, if you have one, by using " "a :ref:`TextureRect ` node instead." msgstr "" "Bạn cũng có thể thêm hình nền, nếu có, bằng cách sử dụng " "nút :ref:`TextureRect `." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:24 msgid "Sound effects" msgstr "Hiệu ứng âm thanh" #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:26 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game's **art** folder, you have two sound files: " "\"House In a Forest Loop.ogg\" for background music, and \"gameover.wav\" " "for when the player loses." msgstr "" "Âm thanh và nhạc có thể là cách hiệu quả nhất để tăng thêm sức hấp dẫn cho " "trải nghiệm trò chơi. Trong thư mục **art** của trò chơi, bạn có hai tệp âm " "thanh: \"House In a Forest Loop.ogg\" cho nhạc nền và \"gameover.wav\" cho " "khi người chơi thua." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:31 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 "" "Thêm hai nút :ref:`AudioStreamPlayer ` làm con của " "``Main``. Đặt tên một trong số chúng là ``Music`` và nút còn lại là " "``DeathSound``. Trên mỗi nút, hãy nhấp vào thuộc tính ``Stream``, chọn " "\"Load\" và chọn tệp âm thanh tương ứng." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:36 msgid "" "All audio is automatically imported with the ``Loop`` setting disabled. If " "you want the music to loop seamlessly, click on the Stream file arrow, " "select ``Make Unique``, then click on the Stream file and check the ``Loop`` " "box." msgstr "" "Tất cả âm thanh được tự động nhập với cài đặt ``Loop`` bị vô hiệu hóa. Nếu " "bạn muốn nhạc lặp lại liền mạch, hãy nhấp vào mũi tên Tệp luồng, chọn ``Make " "Unique``, sau đó nhấp vào Tệp luồng và đánh dấu vào hộp ``Loop``." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:42 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" "Để phát nhạc, hãy thêm ``$Music.play()`` vào hàm ``new_game()`` và " "``$Music.stop()`` vào hàm ``game_over()``." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:45 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "Cuối cùng, thêm ``$DeathSound.play()`` vào hàm ``game_over()``." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:76 msgid "Keyboard shortcut" msgstr "Phím tắt" #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:78 msgid "" "Since the game is played with keyboard controls, it would be convenient if " "we could also start the game by pressing a key on the keyboard. We can do " "this with the \"Shortcut\" property of the ``Button`` node." msgstr "" "Vì trò chơi được chơi bằng điều khiển bàn phím, sẽ rất tiện lợi nếu chúng ta " "cũng có thể bắt đầu trò chơi bằng cách nhấn một phím trên bàn phím. Chúng ta " "có thể làm điều này bằng thuộc tính \"Shortcut\" của nút ``Button``." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:82 msgid "" "In a previous lesson, we created four input actions to move the character. " "We will create a similar input action to map to the start button." msgstr "" "Trong bài học trước, chúng ta đã tạo bốn hành động đầu vào để di chuyển nhân " "vật. Chúng ta sẽ tạo một hành động đầu vào tương tự để ánh xạ tới nút bắt " "đầu." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:85 msgid "" "Select \"Project\" -> \"Project Settings\" and then click on the \"Input " "Map\" tab. In the same way you created the movement input actions, create a " "new input action called ``start_game`` and add a key mapping for " "the :kbd:`Enter` key." msgstr "" "Chọn \"Project\" -> \"Project Settings\" rồi nhấp vào tab \"Input Map\". " "Tương tự như cách bạn tạo hành động nhập chuyển động, hãy tạo một hành động " "nhập mới có tên là ``start_game`` và thêm ánh xạ phím cho phím :kbd:`Enter`." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:92 msgid "" "Now would be a good time to add controller support if you have one " "available. Attach or pair your controller and then under each input action " "that you wish to add controller support for, click on the \"+\" button and " "press the corresponding button, d-pad, or stick direction that you want to " "map to the respective input action." msgstr "" "Bây giờ là thời điểm tốt để thêm hỗ trợ bộ điều khiển nếu bạn có. Gắn hoặc " "ghép nối bộ điều khiển của bạn và sau đó bên dưới mỗi hành động đầu vào mà " "bạn muốn thêm hỗ trợ bộ điều khiển, hãy nhấp vào nút \"+\" và nhấn nút tương " "ứng, d-pad hoặc hướng cần điều khiển mà bạn muốn ánh xạ tới hành động đầu " "vào tương ứng." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:97 msgid "" "In the ``HUD`` scene, select the ``StartButton`` and find its **Shortcut** " "property in the Inspector. Create a new :ref:`Shortcut ` " "resource by clicking within the box, open the **Events** array and add a new " "array element to it by clicking on **Array[InputEvent] (size 0)**." msgstr "" "Trong cảnh ``HUD``, chọn ``StartButton`` và tìm thuộc tính **Shortcut** của " "nó trong Inspector. Tạo một tài nguyên :ref:`Shortcut ` mới " "bằng cách nhấp vào trong hộp, mở mảng **Events** và thêm một phần tử mảng " "mới vào đó bằng cách nhấp vào **Array[InputEvent] (size 0)**." #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:104 msgid "" "Create a new :ref:`InputEventAction ` and name it " "``start_game``." msgstr "" #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:108 msgid "" "Now when the start button appears, you can either click it or " "press :kbd:`Enter` to start the game." msgstr "" #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:111 msgid "And with that, you completed your first 2D game in Godot." msgstr "" #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:115 msgid "" "You got to make a player-controlled character, enemies that spawn randomly " "around the game board, count the score, implement a game over and replay, " "user interface, sounds, and more. Congratulations!" msgstr "" #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:119 msgid "" "There's still much to learn, but you can take a moment to appreciate what " "you achieved." msgstr "" #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:122 msgid "" "And when you're ready, you can move on to :ref:`doc_your_first_3d_game` to " "learn to create a complete 3D game from scratch, in Godot." msgstr "" #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:126 msgid "Sharing the finished game with others" msgstr "" #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:128 msgid "" "If you want people to try out your game without having to install Godot, " "you'll need to export the project for each operating system you want the " "game to be playable on. See :ref:`doc_exporting_projects` for instructions." msgstr "" #: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:132 msgid "" "After exporting the project, compress the exported executable and PCK file " "(not the raw project files) to a ZIP file, then upload this ZIP file to a " "file sharing website." msgstr "" #: ../../docs/getting_started/first_3d_game/index.rst:6 msgid "Your first 3D game" msgstr "Game 3D đầu tiên của bạn" #: ../../docs/getting_started/first_3d_game/index.rst:8 msgid "" "In this step-by-step tutorial series, you will create your first complete 3D " "game with Godot. By the end of the series, you will have a simple yet " "finished project of your own like the animated gif below." msgstr "" #: ../../docs/getting_started/first_3d_game/index.rst:14 msgid "" "The game we'll code here is similar to :ref:`doc_your_first_2d_game`, with a " "twist: you can now jump and your goal is to squash the creeps. This way, you " "will both **recognize patterns** you learned in the previous tutorial and " "**build upon them** with new code and features." msgstr "" #: ../../docs/getting_started/first_3d_game/index.rst:21 msgid "Work with 3D coordinates with a jumping mechanic." msgstr "" #: ../../docs/getting_started/first_3d_game/index.rst:22 msgid "" "Use kinematic bodies to move 3D characters and detect when and how they " "collide." msgstr "" #: ../../docs/getting_started/first_3d_game/index.rst:24 msgid "" "Use physics layers and a group to detect interactions with specific entities." msgstr "" #: ../../docs/getting_started/first_3d_game/index.rst:25 msgid "" "Code basic procedural gameplay by instancing monsters at regular time " "intervals." msgstr "" #: ../../docs/getting_started/first_3d_game/index.rst:27 msgid "Design a movement animation and change its speed at runtime." msgstr "" #: ../../docs/getting_started/first_3d_game/index.rst:28 msgid "Draw a user interface on a 3D game." msgstr "" #: ../../docs/getting_started/first_3d_game/index.rst:32 #, fuzzy msgid "" "This tutorial is for beginners who followed the complete getting started " "series. We'll start slow with detailed instructions and shorten them as we " "do similar steps. If you're an experienced programmer, you can browse the " "complete demo's source code here:" msgstr "" "Nếu bạn là một lập trình viên có kinh nghiệm, bạn có thể xem source code " "hoàn chỉnh ở đây: `Dodge the Creeps source code `__." #: ../../docs/getting_started/first_3d_game/index.rst:37 #, fuzzy msgid "" "`Squash the Creeps source code (GDScript) `__" msgstr "" "https://github.com/godotengine/godot-demo-projects/tree/master/2d/" "dodge_the_creeps" #: ../../docs/getting_started/first_3d_game/index.rst:38 #, fuzzy msgid "" "`Squash the Creeps source code (C#) `__" msgstr "" "https://github.com/godotengine/godot-demo-projects/tree/master/2d/" "dodge_the_creeps" #: ../../docs/getting_started/first_3d_game/index.rst:42 msgid "" "You can follow this series without having done the 2D one. However, if " "you're new to game development, we recommend you to start with 2D. 3D game " "code is always more complex and the 2D series will give you foundations to " "follow along more comfortably." msgstr "" #: ../../docs/getting_started/first_3d_game/index.rst:47 #, fuzzy msgid "" "We prepared some game assets so we can jump straight to the code. You can " "download them here: `Squash the Creeps assets `__." msgstr "" "Nếu bạn cần một vài dự án minh họa, bạn có thể tìm thấy ở `đây `__." #: ../../docs/getting_started/first_3d_game/index.rst:51 msgid "" "We will first work on a basic prototype for the player's movement. We will " "then add the monsters that we'll spawn randomly around the screen. After " "that, we'll implement the jump and squashing mechanic before refining the " "game with some nice animation. We'll wrap up with the score and the retry " "screen." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:4 msgid "Setting up the game area" msgstr "Tổ chức dự án" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:6 msgid "" "In this first part, we're going to set up the game area. Let's get started " "by importing the start assets and setting up the game scene." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:9 #, fuzzy msgid "" "We've prepared a Godot project with the 3D models and sounds we'll use for " "this tutorial, linked in the index page. If you haven't done so yet, you can " "download the archive here: `Squash the Creeps assets `_." msgstr "" "Giờ ta hãy cùng xem cách tạo các bản sao trong Godot như thế nào. Mời bạn " "tải về project mẫu mà chúng tôi đã chuẩn bị sẵn: `instancing_starter.zip " "`_." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:13 msgid "" "Once you downloaded it, extract the .zip archive on your computer. Open the " "Godot Project Manager and click the *Import* button." msgstr "" "Giải nén dự án này bất cứ nơi nào bạn muốn. Sau đó mở Godot và Quản lý dự án " "nhấn nút 'Import' để thêm dự án." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:18 msgid "" "In the import popup, enter the full path to the freshly created directory " "``3d_squash_the_creeps_starter/``. You can click the *Browse* button on the " "right to open a file browser and navigate to the ``project.godot`` file the " "folder contains." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:25 #, fuzzy msgid "Click *Import* to open the project in the editor." msgstr "Nhấp vào * Nhập & Chỉnh sửa* để mở dự án trong trình chỉnh sửa." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:29 msgid "" "A window notifying you that the project was generated by an older Godot " "version may appear. Click *OK* to convert the project to your current Godot " "version." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:34 msgid "If it doesn't open immediately open the project from your project list." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:36 msgid "" "The start project contains an icon and two folders: ``art/`` and ``fonts/``. " "There, you will find the art assets and music we'll use in the game." msgstr "" "Dự án bắt đầu có một biểu tượng và hai thư mục: ``art/`` và ``fonts/``. Ở " "đó, bạn sẽ tìm thấy các tài sản nghệ thuật và âm nhạc mà chúng ta sẽ sử dụng " "trong trò chơi." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:41 msgid "" "There are two 3D models, ``player.glb`` and ``mob.glb``, some materials that " "belong to these models, and a music track." msgstr "" "Có hai mô hình 3D, ``player.glb`` và ``mob.glb``, một số vật liệu thuộc về " "các mô hình này và một bản nhạc." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:45 msgid "Setting up the playable area" msgstr "Di chuyển player" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:47 msgid "" "We're going to create our main scene with a plain :ref:`Node ` " "as its root. In the *Scene* dock, click the *Add Child Node* button " "represented by a \"+\" icon in the top-left and double-click on *Node*. Name " "the node ``Main``. An alternate method to rename the node is to right-click " "on *Node* and choose *Rename* (or :kbd:`F2`). Alternatively, to add a node " "to the scene, you can press :kbd:`Ctrl + A` (:kbd:`Cmd + A` on macOS)." msgstr "" "Chúng ta sẽ tạo cảnh chính của mình với một :ref:` Node ` đơn " "giản làm gốc. Trong * Scene * dock , hãy nhấp vào nút *Add Child Node * được " "biểu thị bằng biểu tượng \"+\" ở góc trên bên trái và nhấp đúp vào * Node *. " "Đặt tên cho nút là ``Main``. Một phương pháp thay thế để đổi tên nút là nhấp " "chuột phải vào * Node * và chọn *Rename* (hoặc :kbd:`F2`). Ngoài ra, để thêm " "một nút vào cảnh , bạn có thể nhấn :kbd:`Ctrl + A` (:kbd:`Cmd + A` trên " "macOS )." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:54 msgid "" "Save the scene as ``main.tscn`` by pressing :kbd:`Ctrl + S` (:kbd:`Cmd + S` " "on macOS)." msgstr "" "Lưu lại cảnh. Nhấp vào Scene -> Save hoặc nhấn `` Ctrl + S`` trên Windows / " "Linux hoặc `` Command + S`` trên Mac." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:56 msgid "" "We'll start by adding a floor that'll prevent the characters from falling. " "To create static colliders like the floor, walls, or ceilings, you can " "use :ref:`StaticBody3D ` nodes. They " "require :ref:`CollisionShape3D ` child nodes to " "define the collision area. With the ``Main`` node selected, add " "a :ref:`StaticBody3D ` node, then " "a :ref:`CollisionShape3D `. Rename " "the :ref:`StaticBody3D ` to ``Ground``." msgstr "" "Chúng ta sẽ bắt đầu bằng cách thêm một sàn nhà để ngăn các nhân vật rơi " "xuống. Để tạo các bộ va chạm tĩnh như sàn nhà, tường hoặc trần nhà, bạn có " "thể sử dụng các nút :ref:`StaticBody3D `. Chúng yêu cầu " "các nút con :ref:`CollisionShape3D ` để xác định " "vùng va chạm. Với nút ``Main`` được chọn, hãy thêm một " "nút :ref:`StaticBody3D ` , sau đó là một " "nút :ref:`CollisionShape3D `. Đổi " "tên :ref:`StaticBody3D ` thành ``Ground``." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:63 msgid "Your scene tree should look like this" msgstr "Scene tree của bạn sẽ trông như thế này:" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:67 msgid "" "A warning sign next to the :ref:`CollisionShape3D ` " "appears because we haven't defined its shape. If you click the icon, a popup " "appears to give you more information." msgstr "" "Một dấu hiệu cảnh báo bên cạnh :ref:`CollisionShape3D " "` xuất hiện vì chúng tôi chưa xác định hình dạng của " "nó. Nếu bạn nhấp vào biểu tượng , một cửa sổ bật lên sẽ xuất hiện để cung " "cấp cho bạn thêm thông tin." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:72 msgid "" "To create a shape, select the :ref:`CollisionShape3D " "` node, head to the *Inspector* and click the " "** field next to the *Shape* property. Create a new *BoxShape3D*." msgstr "" "Để tạo hình dạng, hãy chọn nút :ref:`CollisionShape3D " "` , đi đến * Inspector * và nhấp vào trường " "** bên cạnh thuộc tính *Shape* . Tạo *BoxShape3D* mới." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:77 msgid "" "The box shape is perfect for flat ground and walls. Its thickness makes it " "reliable to block even fast-moving objects." msgstr "" "Hình hộp hoàn hảo cho mặt đất và tường phẳng. Độ dày của nó giúp chặn được " "ngay cả những vật thể chuyển động nhanh." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:80 msgid "" "A box's wireframe appears in the viewport with three orange dots. You can " "click and drag these to edit the shape's extents interactively. We can also " "precisely set the size in the inspector. Click on the :ref:`BoxShape3D " "` to expand the resource. Set its *Size* to ``60`` on the " "X-axis, ``2`` for the Y-axis, and ``60`` for the Z-axis." msgstr "" "Khung dây của hộp xuất hiện trong khung nhìn với ba chấm màu cam. Bạn có thể " "nhấp và kéo chúng để chỉnh sửa phạm vi của hình dạng một cách tương tác. " "Chúng ta cũng có thể thiết lập chính xác kích thước trong thanh tra . Nhấp " "vào :ref:`BoxShape3D ` để mở rộng tài nguyên . Đặt *Kích " "thước* của nó thành ``60`` trên trục X, ``2`` cho trục Y và ``60`` cho trục " "Z." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:89 msgid "" "Collision shapes are invisible. We need to add a visual floor that goes " "along with it. Select the ``Ground`` node and add a :ref:`MeshInstance3D " "` as its child." msgstr "" "Hình dạng va chạm là vô hình. Chúng ta cần thêm một sàn trực quan đi kèm với " "nó. Chọn nút ``Ground`` và thêm :ref:` MeshInstance3D " "` làm con của nó." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:94 msgid "" "In the *Inspector*, click on the field next to *Mesh* and create " "a :ref:`BoxMesh ` resource to create a visible box." msgstr "" "Trong * Thanh tra *, nhấp vào trường bên cạnh * Lưới * và tạo tài " "nguyên :ref: `BoxMesh ` để tạo hộp có thể nhìn thấy." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:99 msgid "" "Once again, it's too small by default. Click the box icon to expand the " "resource and set its *Size* to ``60``, ``2``, and ``60``." msgstr "" "Một lần nữa, nó quá nhỏ theo mặc định. Nhấp vào biểu tượng hộp để mở rộng " "tài nguyên và đặt *Kích thước* của nó thành ``60``, ``2`` và ``60``." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:104 msgid "" "You should see a wide grey slab that covers the grid and blue and red axes " "in the viewport." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:107 msgid "" "We're going to move the ground down so we can see the floor grid. To do " "this, the grid snapping feature can be used. Grid snapping can be activated " "2 ways in the 3D editor. The first is by pressing the *Use Snap* button (or " "pressing the :kbd:`Y` key). The second is by selecting a node, dragging a " "handle on the gizmo **then** holding :kbd:`Ctrl` while still clicking to " "enable snapping as long as :kbd:`Ctrl` is held." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:114 msgid "" "Start by setting snapping with your preferred method. Then move the " "``Ground`` node using the Y-axis (the green arrow on the gizmo)." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:120 msgid "" "If you can't see the 3D object manipulator like on the image above, ensure " "the *Select Mode* is active in the toolbar above the view." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:125 msgid "" "Move the ground down ``1`` meter, in order to have a visible editor grid. A " "label in the bottom-left corner of the viewport tells you how much you're " "translating the node." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:132 msgid "" "Moving the *Ground* node down moves both children along with it. Ensure you " "move the *Ground* node, **not** the *MeshInstance3D* or the " "*CollisionShape3D*." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:136 msgid "Ultimately, ``Ground``'s transform.position.y should be -1" msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:140 msgid "" "Let's add a directional light so our scene isn't all grey. Select the " "``Main`` node and add a child node :ref:`DirectionalLight3D " "`." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:145 msgid "" "We need to move and rotate the :ref:`DirectionalLight3D " "` node. Move it up by clicking and dragging on the " "manipulator's green arrow and click and drag on the red arc to rotate it " "around the X-axis, until the ground is lit." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:150 msgid "In the *Inspector*, turn on *Shadow* by clicking the checkbox." msgstr "" #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:154 msgid "At this point, your project should look like this." msgstr "HIện tại, dự án trông như sau." #: ../../docs/getting_started/first_3d_game/01.game_setup.rst:158 msgid "" "That's our starting point. In the next part, we will work on the player " "scene and base movement." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:4 msgid "Player scene and input actions" msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:6 msgid "" "In the next two lessons, we will design the player scene, register custom " "input actions, and code player movement. By the end, you'll have a playable " "character that moves in eight directions." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:10 #, fuzzy msgid "" "Create a new scene by going to the **Scene** menu in the top-left and " "clicking **New Scene**." msgstr "Tạo một scene mới bằng menu Scene -> New Scene." #: ../../docs/getting_started/first_3d_game/02.player_input.rst:15 msgid "" "Click the **Other Node** button and select the ``CharacterBody3D`` node type " "to create a :ref:`CharacterBody3D ` as the root node." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:20 msgid "" "Rename the :ref:`CharacterBody3D ` to ``Player``. " "Character bodies are complementary to the area and rigid bodies used in the " "2D game tutorial. Like rigid bodies, they can move and collide with the " "environment, but instead of being controlled by the physics engine, **you** " "dictate their movement. You will see how we use the node's unique features " "when we code the jump and squash mechanics." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:29 msgid "" "To learn more about the different physics node types, see " "the :ref:`doc_physics_introduction`." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:32 msgid "" "For now, we're going to create a basic rig for our character's 3D model. " "This will allow us to rotate the model later via code while it plays an " "animation." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:35 msgid "" "Add a :ref:`Node3D ` node as a child of ``Player``. Select the " "``Player`` node in the **Scene** tree and click the \"**+**\" button to add " "a child node. Rename it to ``Pivot``." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:41 msgid "" "Then, in the FileSystem dock, expand the ``art/`` folder by double-clicking " "it and drag and drop ``player.glb`` onto ``Pivot``." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:47 msgid "" "This should instantiate the model as a child of ``Pivot``. You can rename it " "to ``Character``." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:54 msgid "" "The ``.glb`` files contain 3D scene data based on the open source glTF 2.0 " "specification. They're a modern and powerful alternative to a proprietary " "format like FBX, which Godot also supports. To produce these files, we " "designed the model in `Blender 3D `__ and exported " "it to glTF." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:59 msgid "" "As with all kinds of physics nodes, we need a collision shape for our " "character to collide with the environment. Select the ``Player`` node again " "and add a child node :ref:`CollisionShape3D `. In " "the **Inspector**, on the **Shape** property, add a new :ref:`SphereShape3D " "`." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:66 msgid "The sphere's wireframe appears below the character." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:70 msgid "" "It will be the shape the physics engine uses to collide with the " "environment, so we want it to better fit the 3D model. Make it a bit larger " "by dragging the orange dot in the viewport. My sphere has a radius of about " "``0.8`` meters." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:74 msgid "" "Then, move the collision shape up so its bottom roughly aligns with the " "grid's plane." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:78 msgid "" "To make moving the shape easier, you can toggle the model's visibility by " "clicking the **eye icon** next to the ``Character`` or the ``Pivot`` nodes." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:83 #, fuzzy msgid "Save the scene as ``player.tscn``." msgstr "Cuối cùng, lưu scene với một tên như `` sayhello.tscn``." #: ../../docs/getting_started/first_3d_game/02.player_input.rst:85 msgid "" "With the nodes ready, we can almost get coding. But first, we need to define " "some input actions." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:91 msgid "Creating input actions" msgstr "Tạo nội dung" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:93 msgid "" "To move the character, we will listen to the player's input, like pressing " "the arrow keys. In Godot, while we could write all the key bindings in code, " "there's a powerful system that allows you to assign a label to a set of keys " "and buttons. This simplifies our scripts and makes them more readable." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:98 msgid "" "This system is the Input Map. To access its editor, head to the **Project** " "menu and select **Project Settings...**." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:103 msgid "" "At the top, there are multiple tabs. Click on **Input Map**. This window " "allows you to add new actions at the top; they are your labels. In the " "bottom part, you can bind keys to these actions." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:109 msgid "" "Godot projects come with some predefined actions designed for user interface " "design (see above screenshot). These will become visible if you enable the " "**Show Built-in Actions** toggle. We could use these here, but instead we're " "defining our own to support gamepads. Leave **Show Built-in Actions** " "disabled." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:114 msgid "" "We're going to name our actions ``move_left``, ``move_right``, " "``move_forward``, ``move_back``, and ``jump``." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:117 msgid "" "To add an action, write its name in the bar at the top and press Enter or " "click the **Add** button." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:121 msgid "Create the following five actions:" msgstr "Tạo nội dung" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:125 msgid "" "To bind a key or button to an action, click the \"**+**\" button to its " "right. Do this for ``move_left``. Press the left arrow key and click **OK**." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:130 msgid "Bind also the :kbd:`A` key, onto the action ``move_left``." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:134 msgid "" "Let's now add support for a gamepad's left joystick. Click the \"**+**\" " "button again but this time, select the input within the input tree yourself. " "Select the negative X axis of the left joystick under **Joypad Axes**." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:140 msgid "Leave the other values as default and press **OK**." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:144 msgid "" "If you want controllers to have different input actions, you should use the " "Devices option in Additional Options. Device 0 corresponds to the first " "plugged gamepad, Device 1 corresponds to the second plugged gamepad, and so " "on." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:146 msgid "" "Do the same for the other input actions. For example, bind the right arrow, " "D, and the left joystick's positive axis to ``move_right``. After binding " "all keys, your interface should look like this." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:152 msgid "" "The final action to set up is the ``jump`` action. Bind the Space key and " "the gamepad's A button located under **Joypad Buttons**." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:157 msgid "Your jump input action should look like this." msgstr "Nút nhảy của bạn trông như sau." #: ../../docs/getting_started/first_3d_game/02.player_input.rst:161 msgid "" "That's all the actions we need for this game. You can use this menu to label " "any groups of keys and buttons in your projects." msgstr "" #: ../../docs/getting_started/first_3d_game/02.player_input.rst:164 msgid "In the next part, we'll code and test the player's movement." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:4 msgid "Moving the player with code" msgstr "Di chuyển player" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:6 msgid "" "It's time to code! We're going to use the input actions we created in the " "last part to move the character." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:20 msgid "" "Right-click the ``Player`` node and select *Attach Script* to add a new " "script to it. In the popup, set the *Template* to *Empty* before pressing " "the *Create* button. We set it to *Empty* because we want to write our own " "code for player movement." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:27 msgid "" "Let's start with the class's properties. We're going to define a movement " "speed, a fall acceleration representing gravity, and a velocity we'll use to " "move the character." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:62 msgid "" "These are common properties for a moving body. The ``target_velocity`` is " "a :ref:`3D vector ` combining a speed with a direction. Here, " "we define it as a property because we want to update and reuse its value " "across frames." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:68 msgid "" "The values are quite different from 2D code because distances are in meters. " "While in 2D, a thousand units (pixels) may only correspond to half of your " "screen's width, in 3D, it's a kilometer." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:72 msgid "" "Let's code the movement. We start by calculating the input direction vector " "using the global ``Input`` object, in ``_physics_process()``." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:122 msgid "" "Here, instead of ``_process()``, we're going to make all calculations using " "the ``_physics_process()`` virtual function. It's designed specifically for " "physics-related code like moving a kinematic or rigid body. It updates the " "node using fixed time intervals." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:128 msgid "" "To learn more about the difference between ``_process()`` and " "``_physics_process()``, see :ref:`doc_idle_and_physics_processing`." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:131 msgid "" "We start by initializing a ``direction`` variable to ``Vector3.ZERO``. Then, " "we check if the player is pressing one or more of the ``move_*`` inputs and " "update the vector's ``x`` and ``z`` components accordingly. These correspond " "to the ground plane's axes." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:136 msgid "" "These four conditions give us eight possibilities and eight possible " "directions." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:138 msgid "" "In case the player presses, say, both W and D simultaneously, the vector " "will have a length of about ``1.4``. But if they press a single key, it will " "have a length of ``1``. We want the vector's length to be consistent, and " "not move faster diagonally. To do so, we can call its ``normalized()`` " "method." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:168 msgid "" "Here, we only normalize the vector if the direction has a length greater " "than zero, which means the player is pressing a direction key." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:171 msgid "" "We compute the direction the ``$Pivot`` is looking by creating a :ref:`Basis " "` that looks in the ``direction`` direction." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:174 msgid "" "Then, we update the velocity. We have to calculate the ground velocity and " "the fall speed separately. Be sure to go back one tab so the lines are " "inside the ``_physics_process()`` function but outside the condition we just " "wrote above." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:223 msgid "" "The ``CharacterBody3D.is_on_floor()`` function returns ``true`` if the body " "collided with the floor in this frame. That's why we apply gravity to the " "``Player`` only while it is in the air." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:226 msgid "" "For the vertical velocity, we subtract the fall acceleration multiplied by " "the delta time every frame. This line of code will cause our character to " "fall in every frame, as long as it is not on or colliding with the floor." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:230 msgid "" "The physics engine can only detect interactions with walls, the floor, or " "other bodies during a given frame if movement and collisions happen. We will " "use this property later to code the jump." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:234 msgid "" "On the last line, we call ``CharacterBody3D.move_and_slide()`` which is a " "powerful method of the ``CharacterBody3D`` class that allows you to move a " "character smoothly. If it hits a wall midway through a motion, the engine " "will try to smooth it out for you. It uses the *velocity* value native to " "the :ref:`CharacterBody3D `" msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:246 msgid "And that's all the code you need to move the character on the floor." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:248 #, fuzzy msgid "Here is the complete ``player.gd`` code for reference." msgstr "Đây là file ``sprite_2d.gd`` hoàn chỉnh để tham khảo." #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:352 msgid "Testing our player's movement" msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:354 msgid "" "We're going to put our player in the ``Main`` scene to test it. To do so, we " "need to instantiate the player and then add a camera. Unlike in 2D, in 3D, " "you won't see anything if your viewport doesn't have a camera pointing at " "something." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:358 msgid "" "Save your ``Player`` scene and open the ``Main`` scene. You can click on the " "*Main* tab at the top of the editor to do so." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:363 msgid "" "If you closed the scene before, head to the *FileSystem* dock and double-" "click ``main.tscn`` to re-open it." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:366 msgid "" "To instantiate the ``Player``, right-click on the ``Main`` node and select " "*Instantiate Child Scene*." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:371 msgid "" "In the popup, double-click ``player.tscn``. The character should appear in " "the center of the viewport." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:375 msgid "Adding a camera" msgstr "Thêm một script" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:377 msgid "" "Let's add the camera next. Like we did with our *Player*\\ 's *Pivot*, we're " "going to create a basic rig. Right-click on the ``Main`` node again and " "select *Add Child Node*. Create a new :ref:`Marker3D `, and " "name it ``CameraPivot``. Select ``CameraPivot`` and add a child " "node :ref:`Camera3D ` to it. Your scene tree should look " "similar to this." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:383 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:44 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:64 #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:48 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:30 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:36 #: ../../docs/community/asset_library/using_assetlib.rst:80 msgid "|image3|" msgstr "|hình3|" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:454 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:349 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:378 #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:517 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:451 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:619 #: ../../docs/community/asset_library/using_assetlib.rst:189 msgid "image3" msgstr "|hình3|" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:385 msgid "" "Notice the *Preview* checkbox that appears in the top-left of the 3D view " "when you have the *Camera* selected. You can click it to preview the in-game " "camera projection." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:388 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:47 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:52 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:73 #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:54 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:35 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:41 #: ../../docs/community/asset_library/using_assetlib.rst:85 msgid "|image4|" msgstr "|image4|" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:455 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:337 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:350 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:379 #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:518 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:452 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:620 #: ../../docs/community/asset_library/using_assetlib.rst:190 msgid "image4" msgstr "image4" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:390 msgid "" "We're going to use the *Pivot* to rotate the camera as if it was on a crane. " "Let's first split the 3D view to be able to freely navigate the scene and " "see what the camera sees." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:394 msgid "" "In the toolbar right above the viewport, click on *View*, then *2 " "Viewports*. You can also press :kbd:`Ctrl + 2` (:kbd:`Cmd + 2` on macOS)." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:397 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:91 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:195 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:96 #: ../../docs/community/asset_library/using_assetlib.rst:164 msgid "|image11|" msgstr "| hình11 |" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:462 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:357 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:459 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:627 #: ../../docs/community/asset_library/using_assetlib.rst:197 msgid "image11" msgstr "| hình11 |" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:399 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:83 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:56 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:82 #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:113 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:47 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:49 #: ../../docs/community/asset_library/using_assetlib.rst:89 msgid "|image5|" msgstr "|image5|" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:456 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:338 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:351 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:380 #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:519 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:453 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:621 #: ../../docs/community/asset_library/using_assetlib.rst:191 msgid "image5" msgstr "image5" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:401 msgid "" "On the bottom view, select your :ref:`Camera3D ` and turn on " "camera Preview by clicking the checkbox." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:404 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:87 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:61 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:90 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:52 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:55 #: ../../docs/community/asset_library/using_assetlib.rst:98 msgid "|image6|" msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:457 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:339 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:352 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:381 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:454 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:622 #: ../../docs/community/asset_library/using_assetlib.rst:192 msgid "image6" msgstr "|hình1|" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:406 msgid "" "In the top view, make sure your *Camera3D* is selected and move the camera " "about ``19`` units on the Z axis (drag the blue arrow)." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:409 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:99 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:66 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:186 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:72 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:62 #: ../../docs/community/asset_library/using_assetlib.rst:124 msgid "|image7|" msgstr "| hình7 |" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:458 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:340 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:353 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:382 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:455 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:623 #: ../../docs/community/asset_library/using_assetlib.rst:193 msgid "image7" msgstr "| hình7 |" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:411 msgid "" "Here's where the magic happens. Select the *CameraPivot* and rotate it " "``-45`` degrees around the X axis (using the red circle). You'll see the " "camera move as if it was attached to a crane." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:415 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:222 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:72 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:190 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:106 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:67 #: ../../docs/community/asset_library/using_assetlib.rst:132 msgid "|image8|" msgstr "| hình ảnh 8 |" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:459 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:341 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:354 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:383 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:456 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:624 #: ../../docs/community/asset_library/using_assetlib.rst:194 msgid "image8" msgstr "| hình ảnh 8 |" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:417 #, fuzzy msgid "" "You can run the scene by pressing :kbd:`F6` (:kbd:`Cmd + R` on macOS) and " "press the arrow keys to move the character." msgstr "Chạy scene lên và click vào nút bấm để xem sprite chạy/dừng." #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:420 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:227 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:77 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:194 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:167 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:83 #: ../../docs/community/asset_library/using_assetlib.rst:153 msgid "|image9|" msgstr "| hình ảnh9 |" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:460 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:342 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:355 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:384 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:457 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:625 #: ../../docs/community/asset_library/using_assetlib.rst:195 msgid "image9" msgstr "| hình ảnh9 |" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:422 msgid "" "We can see some empty space around the character due to the perspective " "projection. In this game, we're going to use an orthographic projection " "instead to better frame the gameplay area and make it easier for the player " "to read distances." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:427 msgid "" "Select the *Camera* again and in the *Inspector*, set the *Projection* to " "*Orthogonal* and the *Size* to ``19``. The character should now look flatter " "and the ground should fill the background." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:433 msgid "" "When using an orthogonal camera in Godot 4, directional shadow quality is " "dependent on the camera's *Far* value. The higher the *Far* value, the " "further away the camera will be able to see. However, higher *Far* values " "also decrease shadow quality as the shadow rendering has to cover a greater " "distance." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:439 msgid "" "If directional shadows look too blurry after switching to an orthogonal " "camera, decrease the camera's *Far* property to a lower value such as " "``100``. Don't decrease this *Far* property too much, or objects in the " "distance will start disappearing." msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:444 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:231 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:87 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:199 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:191 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:91 #: ../../docs/community/asset_library/using_assetlib.rst:159 msgid "|image10|" msgstr "| hình10 |" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:461 #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:343 #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:356 #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:385 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:458 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:626 #: ../../docs/community/asset_library/using_assetlib.rst:196 msgid "image10" msgstr "| hình10 |" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:446 msgid "" "Test your scene and you should be able to move in all 8 directions and not " "glitch through the floor!" msgstr "" #: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:448 msgid "" "Ultimately, we have both player movement and the view in place. Next, we " "will work on the monsters." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:4 msgid "Designing the mob scene" msgstr "Script một scene" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:6 msgid "" "In this part, you're going to code the monsters, which we'll call mobs. In " "the next lesson, we'll spawn them randomly around the playable area." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:9 msgid "" "Let's design the monsters themselves in a new scene. The node structure is " "going to be similar to the ``player.tscn`` scene." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:12 msgid "" "Create a scene with, once again, a :ref:`CharacterBody3D " "` node as its root. Name it ``Mob``. Add a child " "node :ref:`Node3D `, name it ``Pivot``. And drag and drop the " "file ``mob.glb`` from the *FileSystem* dock onto the ``Pivot`` to add the " "monster's 3D model to the scene." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:19 msgid "You can rename the newly created ``mob`` node into ``Character``." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:24 msgid "" "We need a collision shape for our body to work. Right-click on the ``Mob`` " "node, the scene's root, and click *Add Child Node*." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:29 msgid "Add a :ref:`CollisionShape3D `." msgstr ":ref:`CollisionShape2D `" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:34 msgid "In the *Inspector*, assign a *BoxShape3D* to the *Shape* property." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:38 msgid "" "We should change its size to fit the 3D model better. You can do so " "interactively by clicking and dragging on the orange dots." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:41 msgid "" "The box should touch the floor and be a little thinner than the model. " "Physics engines work in such a way that if the player's sphere touches even " "the box's corner, a collision will occur. If the box is a little too big " "compared to the 3D model, you may die at a distance from the monster, and " "the game will feel unfair to the players." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:49 msgid "" "Notice that my box is taller than the monster. It is okay in this game " "because we're looking at the scene from above and using a fixed perspective. " "Collision shapes don't have to match the model exactly. It's the way the " "game feels when you test it that should dictate their form and size." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:55 msgid "Removing monsters off-screen" msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:57 msgid "" "We're going to spawn monsters at regular time intervals in the game level. " "If we're not careful, their count could increase to infinity, and we don't " "want that. Each mob instance has both a memory and a processing cost, and we " "don't want to pay for it when the mob is outside the screen." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:62 msgid "" "Once a monster leaves the screen, we don't need it anymore, so we should " "delete it. Godot has a node that detects when objects leave the " "screen, :ref:`VisibleOnScreenNotifier3D `, " "and we're going to use it to destroy our mobs." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:68 msgid "" "When you keep instancing an object, there's a technique you can use to avoid " "the cost of creating and destroying instances all the time called pooling. " "It consists of pre-creating an array of objects and reusing them over and " "over." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:73 msgid "" "When working with GDScript, you don't need to worry about this. The main " "reason to use pools is to avoid freezes with garbage-collected languages " "like C# or Lua. GDScript uses a different technique to manage memory, " "reference counting, which doesn't have that caveat. You can learn more about " "that here: :ref:`doc_gdscript_basics_memory_management`." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:79 msgid "" "Select the ``Mob`` node and add a child node :ref:`VisibleOnScreenNotifier3D " "`. Another box, pink this time, appears. " "When this box completely leaves the screen, the node will emit a signal." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:85 msgid "Resize it using the orange dots until it covers the entire 3D model." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:90 msgid "Coding the mob's movement" msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:92 msgid "" "Let's implement the monster's motion. We're going to do this in two steps. " "First, we'll write a script on the ``Mob`` that defines a function to " "initialize the monster. We'll then code the randomized spawn mechanism in " "the ``main.tscn`` scene and call the function from there." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:97 msgid "Attach a script to the ``Mob``." msgstr "Thêm một tập lệnh vào `` Mob`` và thêm các biến thành viên sau:" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:101 msgid "" "Here's the movement code to start with. We define two properties, " "``min_speed`` and ``max_speed``, to define a random speed range, which we " "will later use to define ``CharacterBody3D.velocity``." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:139 msgid "" "Similarly to the player, we move the mob every frame by calling the function " "``CharacterBody3D.move_and_slide()``. This time, we don't update the " "``velocity`` every frame; we want the monster to move at a constant speed " "and leave the screen, even if it were to hit an obstacle." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:144 msgid "" "We need to define another function to calculate the " "``CharacterBody3D.velocity``. This function will turn the monster towards " "the player and randomize both its angle of motion and its velocity." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:148 msgid "" "The function will take a ``start_position``,the mob's spawn position, and " "the ``player_position`` as its arguments." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:151 msgid "" "We position the mob at ``start_position`` and turn it towards the player " "using the ``look_at_from_position()`` method, and randomize the angle by " "rotating a random amount around the Y axis. Below, ``randf_range()`` outputs " "a random value between ``-PI / 4`` radians and ``PI / 4`` radians." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:181 msgid "" "We got a random position, now we need a ``random_speed``. ``randi_range()`` " "will be useful as it gives random int values, and we will use ``min_speed`` " "and ``max_speed``. ``random_speed`` is just an integer, and we just use it " "to multiply our ``CharacterBody3D.velocity``. After ``random_speed`` is " "applied, we rotate ``CharacterBody3D.velocity`` Vector3 towards the player." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:214 msgid "Leaving the screen" msgstr "Script một scene" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:216 msgid "" "We still have to destroy the mobs when they leave the screen. To do so, " "we'll connect our :ref:`VisibleOnScreenNotifier3D " "` node's ``screen_exited`` signal to the " "``Mob``." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:219 #, fuzzy msgid "" "Head back to the 3D viewport by clicking on the *3D* label at the top of the " "editor. You can also press :kbd:`Ctrl + F2` (:kbd:`Opt + 2` on macOS)." msgstr "" "Trở lại workspace 2D. Bạn có thể click chữ \"2D\" phía trên cùng hoặc nhấn " "nút :kbd:`Ctrl + F1` (:kbd:`Ctrl + Cmd + 1` trên macOS)." #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:224 msgid "" "Select the :ref:`VisibleOnScreenNotifier3D " "` node and on the right side of the " "interface, navigate to the *Node* dock. Double-click the ``screen_exited()`` " "signal." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:229 msgid "Connect the signal to the ``Mob``" msgstr "Kết nối signal trong mã" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:233 msgid "" "This will add a new function for you in your mob script, " "``_on_visible_on_screen_notifier_3d_screen_exited()``. From it, call the " "``queue_free()`` method. This function destroys the instance it's called on." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:252 msgid "" "Our monster is ready to enter the game! In the next part, you will spawn " "monsters in the game level." msgstr "" #: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:255 #, fuzzy msgid "Here is the complete ``mob.gd`` script for reference." msgstr "Đây là file ``sprite_2d.gd`` hoàn chỉnh để tham khảo." #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:4 msgid "Spawning monsters" msgstr "Mob sinh sản" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:6 msgid "" "In this part, we're going to spawn monsters along a path randomly. By the " "end, you will have monsters roaming the game board." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:11 msgid "" "Double-click on ``main.tscn`` in the *FileSystem* dock to open the ``Main`` " "scene." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:13 msgid "" "Before drawing the path, we're going to change the game resolution. Our game " "has a default window size of ``1152x648``. We're going to set it to " "``720x540``, a nice little box." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:17 msgid "Go to *Project -> Project Settings*." msgstr "" "Để truy cập hộp thoại đó, chọn Project -> Project Settings. Thử ngay bây giờ." #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:21 msgid "If you still have *Input Map* open, switch to the *General* tab." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:23 msgid "" "In the left menu, navigate down to *Display -> Window*. On the right, set " "the *Viewport Width* to ``720`` and the *Viewport Height* to ``540``." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:29 msgid "Creating the spawn path" msgstr "Tạo nội dung" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:31 msgid "" "Like you did in the 2D game tutorial, you're going to design a path and use " "a :ref:`PathFollow3D ` node to sample random locations " "on it." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:34 msgid "" "In 3D though, it's a bit more complicated to draw the path. We want it to be " "around the game view so monsters appear right outside the screen. But if we " "draw a path, we won't see it from the camera preview." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:38 msgid "" "To find the view's limits, we can use some placeholder meshes. Your viewport " "should still be split into two parts, with the camera preview at the bottom. " "If that isn't the case, press :kbd:`Ctrl + 2` (:kbd:`Cmd + 2` on macOS) to " "split the view into two. Select the :ref:`Camera3D ` node " "and click the *Preview* checkbox in the bottom viewport." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:47 msgid "Adding placeholder cylinders" msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:49 msgid "" "Let's add the placeholder meshes. Add a new :ref:`Node3D ` as " "a child of the ``Main`` node and name it ``Cylinders``. We'll use it to " "group the cylinders. Select ``Cylinders`` and add a child " "node :ref:`MeshInstance3D `" msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:54 msgid "In the *Inspector*, assign a *CylinderMesh* to the *Mesh* property." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:58 msgid "" "Set the top viewport to the top orthogonal view using the menu in the " "viewport's top-left corner. Alternatively, you can press the keypad's 7 key." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:63 msgid "" "The grid may be distracting. You can toggle it by going to the *View* menu " "in the toolbar and clicking *View Grid*." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:68 msgid "" "You now want to move the cylinder along the ground plane, looking at the " "camera preview in the bottom viewport. I recommend using grid snap to do so. " "You can toggle it by clicking the magnet icon in the toolbar or pressing Y." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:74 msgid "" "Move the cylinder so it's right outside the camera's view in the top-left " "corner." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:79 msgid "" "We're going to create copies of the mesh and place them around the game " "area. Press :kbd:`Ctrl + D` (:kbd:`Cmd + D` on macOS) to duplicate the node. " "You can also right-click the node in the *Scene* dock and select " "*Duplicate*. Move the copy down along the blue Z axis until it's right " "outside the camera's preview." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:84 msgid "" "Select both cylinders by pressing the :kbd:`Shift` key and clicking on the " "unselected one and duplicate them." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:89 msgid "Move them to the right by dragging the red X axis." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:93 msgid "" "They're a bit hard to see in white, aren't they? Let's make them stand out " "by giving them a new material." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:96 msgid "" "In 3D, materials define a surface's visual properties like its color, how it " "reflects light, and more. We can use them to change the color of a mesh." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:99 msgid "" "We can update all four cylinders at once. Select all the mesh instances in " "the *Scene* dock. To do so, you can click on the first one and Shift click " "on the last one." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:103 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:200 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:109 #: ../../docs/community/asset_library/using_assetlib.rst:172 msgid "|image12|" msgstr "| hình ảnh 12 |" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:358 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:460 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:628 #: ../../docs/community/asset_library/using_assetlib.rst:198 msgid "image12" msgstr "| hình ảnh 12 |" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:105 msgid "" "In the *Inspector*, expand the *Material* section and assign " "a :ref:`StandardMaterial3D ` to slot *0*." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:107 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:214 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:118 #: ../../docs/community/asset_library/using_assetlib.rst:179 msgid "|image13|" msgstr "| hình13 |" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:359 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:461 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:629 #: ../../docs/community/asset_library/using_assetlib.rst:199 msgid "image13" msgstr "| hình13 |" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:109 msgid "" "Click the sphere icon to open the material resource. You get a preview of " "the material and a long list of sections filled with properties. You can use " "these to create all sorts of surfaces, from metal to rock or water." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:113 msgid "Expand the *Albedo* section." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:117 msgid "" "Set the color to something that contrasts with the background, like a bright " "orange." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:120 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:221 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:137 #: ../../docs/community/asset_library/using_assetlib.rst:126 msgid "|image14|" msgstr "| hình14 |" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:360 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:462 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:630 #: ../../docs/community/asset_library/using_assetlib.rst:200 msgid "image14" msgstr "| hình14 |" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:122 msgid "" "We can now use the cylinders as guides. Fold them in the *Scene* dock by " "clicking the grey arrow next to them. Moving forward, you can also toggle " "their visibility by clicking the eye icon next to *Cylinders*." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:126 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:310 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:148 msgid "|image15|" msgstr "|hình1|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:361 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:463 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:631 msgid "image15" msgstr "|hình1|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:128 msgid "" "Add a child node :ref:`Path3D ` to ``Main`` node. In the " "toolbar, four icons appear. Click the *Add Point* tool, the icon with the " "green \"+\" sign." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:131 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:315 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:153 msgid "|image16|" msgstr "|hình1|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:362 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:464 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:632 msgid "image16" msgstr "|hình1|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:133 msgid "You can hover any icon to see a tooltip describing the tool." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:135 msgid "" "Click in the center of each cylinder to create a point. Then, click the " "*Close Curve* icon in the toolbar to close the path. If any point is a bit " "off, you can click and drag on it to reposition it." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:139 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:322 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:159 msgid "|image17|" msgstr "|hình1|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:363 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:465 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:633 msgid "image17" msgstr "|hình1|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:141 msgid "Your path should look like this." msgstr "Dự án bạn trông như sau." #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:143 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:333 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:166 msgid "|image18|" msgstr "|hình1|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:364 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:466 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:634 msgid "image18" msgstr "|hình1|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:145 msgid "" "To sample random positions on it, we need a :ref:`PathFollow3D " "` node. Add a :ref:`PathFollow3D ` " "as a child of the ``Path3D``. Rename the two nodes to ``SpawnLocation`` and " "``SpawnPath``, respectively. It's more descriptive of what we'll use them " "for." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:149 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:342 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:170 msgid "|image19|" msgstr "|hình1|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:365 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:467 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:635 msgid "image19" msgstr "|hình1|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:151 msgid "With that, we're ready to code the spawn mechanism." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:154 msgid "Spawning monsters randomly" msgstr "Mob sinh sản" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:156 msgid "Right-click on the ``Main`` node and attach a new script to it." msgstr "Nhấp chuột phải vào node *Main* và đính tệp lệnh vào nó." #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:158 msgid "" "We first export a variable to the *Inspector* so that we can assign " "``mob.tscn`` or any other monster to it." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:180 msgid "" "We want to spawn mobs at regular time intervals. To do this, we need to go " "back to the scene and add a timer. Before that, though, we need to assign " "the ``mob.tscn`` file to the ``mob_scene`` property above (otherwise it's " "null!)" msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:184 msgid "" "Head back to the 3D screen and select the ``Main`` node. Drag ``mob.tscn`` " "from the *FileSystem* dock to the *Mob Scene* slot in the *Inspector*." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:187 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:348 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:174 msgid "|image20|" msgstr "|hình2|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:366 #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:468 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:636 msgid "image20" msgstr "|hình2|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:189 msgid "" "Add a new :ref:`Timer ` node as a child of ``Main``. Name it " "``MobTimer``." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:191 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:198 msgid "|image21|" msgstr "|hình2|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:367 #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:637 msgid "image21" msgstr "|hình2|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:193 msgid "" "In the *Inspector*, set its *Wait Time* to ``0.5`` seconds and turn on " "*Autostart* so it automatically starts when we run the game." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:196 msgid "|image22|" msgstr "|hình2|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:368 msgid "image22" msgstr "|hình2|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:198 msgid "" "Timers emit a ``timeout`` signal every time they reach the end of their " "*Wait Time*. By default, they restart automatically, emitting the signal in " "a cycle. We can connect to this signal from the *Main* node to spawn " "monsters every ``0.5`` seconds." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:203 msgid "" "With the *MobTimer* still selected, head to the *Node* dock on the right, " "and double-click the ``timeout`` signal." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:206 msgid "|image23|" msgstr "|hình2|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:369 msgid "image23" msgstr "|hình2|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:208 msgid "Connect it to the *Main* node." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:210 msgid "|image24|" msgstr "|hình2|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:370 msgid "image24" msgstr "|hình2|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:212 msgid "" "This will take you back to the script, with a new empty " "``_on_mob_timer_timeout()`` function." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:215 msgid "Let's code the mob spawning logic. We're going to:" msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:217 msgid "Instantiate the mob scene." msgstr "Cảnh người chơi" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:218 msgid "Sample a random position on the spawn path." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:219 msgid "Get the player's position." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:220 msgid "" "Call the mob's ``initialize()`` method, passing it the random position and " "the player's position." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:222 msgid "Add the mob as a child of the *Main* node." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:264 msgid "" "Above, ``randf()`` produces a random value between ``0`` and ``1``, which is " "what the *PathFollow* node's ``progress_ratio`` expects: 0 is the start of " "the path, 1 is the end of the path. The path we have set is around the " "camera's viewport, so any random value between 0 and 1 is a random position " "alongside the edges of the viewport!" msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:270 msgid "" "Note that if you remove the ``Player`` from the main scene, the following " "line" msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:282 msgid "gives an error because there is no $Player!" msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:284 msgid "Here is the complete ``main.gd`` script so far, for reference." msgstr "" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:338 #, fuzzy msgid "" "You can test the scene by pressing :kbd:`F6` (:kbd:`Cmd + R` on macOS). You " "should see the monsters spawn and move in a straight line." msgstr "" "Chạy game bằng phím :kbd:`F5` (:kbd:`Cmd + B` trên macOS). Bạn sẽ thấy quả " "bóng rơi." #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:341 msgid "|image25|" msgstr "|hình2|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:371 msgid "image25" msgstr "|hình2|" #: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:343 msgid "" "For now, they bump and slide against one another when their paths cross. " "We'll address this in the next part." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:4 msgid "Jumping and squashing monsters" msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:6 msgid "" "In this part, we'll add the ability to jump and squash the monsters. In the " "next lesson, we'll make the player die when a monster hits them on the " "ground." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:9 msgid "" "First, we have to change a few settings related to physics interactions. " "Enter the world of :ref:`physics layers " "`." msgstr "Xem :ref:`doc_ways_to_contribute`." #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:14 msgid "Controlling physics interactions" msgstr "Tạo nội dung" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:16 msgid "" "Physics bodies have access to two complementary properties: layers and " "masks. Layers define on which physics layer(s) an object is." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:19 msgid "" "Masks control the layers that a body will listen to and detect. This affects " "collision detection. When you want two bodies to interact, you need at least " "one to have a mask corresponding to the other." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:23 msgid "If that's confusing, don't worry, we'll see three examples in a second." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:25 msgid "" "The important point is that you can use layers and masks to filter physics " "interactions, control performance, and remove the need for extra conditions " "in your code." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:29 msgid "" "By default, all physics bodies and areas are set to both layer and mask " "``1``. This means they all collide with each other." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:32 msgid "" "Physics layers are represented by numbers, but we can give them names to " "keep track of what's what." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:36 msgid "Setting layer names" msgstr "Script một scene" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:38 msgid "" "Let's give our physics layers a name. Go to *Project -> Project Settings*." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:42 msgid "" "In the left menu, navigate down to *Layer Names -> 3D Physics*. You can see " "a list of layers with a field next to each of them on the right. You can set " "their names there. Name the first three layers *player*, *enemies*, and " "*world*, respectively." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:49 msgid "Now, we can assign them to our physics nodes." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:52 msgid "Assigning layers and masks" msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:54 msgid "" "In the *Main* scene, select the ``Ground`` node. In the *Inspector*, expand " "the *Collision* section. There, you can see the node's layers and masks as a " "grid of buttons." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:60 msgid "" "The ground is part of the world, so we want it to be part of the third " "layer. Click the lit button to toggle **off** the first *Layer* and toggle " "**on** the third one. Then, toggle **off** the *Mask* by clicking on it." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:66 msgid "" "As mentioned before, the *Mask* property allows a node to listen to " "interaction with other physics objects, but we don't need it to have " "collisions. ``Ground`` doesn't need to listen to anything; it's just there " "to prevent creatures from falling." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:70 msgid "" "Note that you can click the \"...\" button on the right side of the " "properties to see a list of named checkboxes." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:75 msgid "" "Next up are the ``Player`` and the ``Mob``. Open ``player.tscn`` by double-" "clicking the file in the *FileSystem* dock." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:78 msgid "" "Select the *Player* node and set its *Collision -> Mask* to both \"enemies\" " "and \"world\". You can leave the default *Layer* property as it is, because " "the first layer is the \"player\" layer." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:84 msgid "" "Then, open the *Mob* scene by double-clicking on ``mob.tscn`` and select the " "``Mob`` node." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:87 msgid "" "Set its *Collision -> Layer* to \"enemies\" and unset its *Collision -> " "Mask*, leaving the mask empty." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:92 msgid "" "These settings mean the monsters will move through one another. If you want " "the monsters to collide with and slide against each other, turn **on** the " "\"enemies\" mask." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:98 msgid "" "The mobs don't need to mask the \"world\" layer because they only move on " "the XZ plane. We don't apply any gravity to them by design." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:102 msgid "Jumping" msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:104 msgid "" "The jumping mechanic itself requires only two lines of code. Open the " "*Player* script. We need a value to control the jump's strength and update " "``_physics_process()`` to code the jump." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:108 msgid "" "After the line that defines ``fall_acceleration``, at the top of the script, " "add the ``jump_impulse``." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:127 msgid "" "Inside ``_physics_process()``, add the following code before the " "``move_and_slide()`` codeblock." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:156 msgid "That's all you need to jump!" msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:158 msgid "" "The ``is_on_floor()`` method is a tool from the ``CharacterBody3D`` class. " "It returns ``true`` if the body collided with the floor in this frame. " "That's why we apply gravity to the *Player*: so we collide with the floor " "instead of floating over it like the monsters." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:163 msgid "" "If the character is on the floor and the player presses \"jump\", we " "instantly give them a lot of vertical speed. In games, you really want " "controls to be responsive and giving instant speed boosts like these, while " "unrealistic, feels great." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:168 msgid "" "Notice that the Y axis is positive upwards. That's unlike 2D, where the Y " "axis is positive downwards." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:172 msgid "Squashing monsters" msgstr "Tạo nội dung" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:174 msgid "" "Let's add the squash mechanic next. We're going to make the character bounce " "over monsters and kill them at the same time." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:177 msgid "" "We need to detect collisions with a monster and to differentiate them from " "collisions with the floor. To do so, we can use Godot's :ref:`group " "` tagging feature." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:181 msgid "" "Open the scene ``mob.tscn`` again and select the *Mob* node. Go to the " "*Node* dock on the right to see a list of signals. The *Node* dock has two " "tabs: *Signals*, which you've already used, and *Groups*, which allows you " "to assign tags to nodes. Click on the *+* button to open the *Create new " "Group* dialog." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:188 msgid "Enter \"mob\" in the *Name* field and click the *Ok* button." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:192 msgid "The \"mob\" group is now shown under the *Scene Groups* section." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:196 msgid "" "An icon appears in the *Scene* dock to indicate the node is part of at least " "one group." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:201 msgid "" "We can now use the group from the code to distinguish collisions with " "monsters from collisions with the floor." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:205 msgid "Coding the squash mechanic" msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:207 msgid "Head back to the *Player* script to code the squash and bounce." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:209 msgid "" "At the top of the script, we need another property, ``bounce_impulse``. When " "squashing an enemy, we don't necessarily want the character to go as high up " "as when jumping." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:228 msgid "" "Then, after the **Jumping** codeblock we added above in " "``_physics_process()``, add the following loop. With ``move_and_slide()``, " "Godot makes the body move sometimes multiple times in a row to smooth out " "the character's motion. So we have to loop over all collisions that may have " "happened." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:233 msgid "" "In every iteration of the loop, we check if we landed on a mob. If so, we " "kill it and bounce." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:236 msgid "" "With this code, if no collisions occurred on a given frame, the loop won't " "run." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:298 msgid "That's a lot of new functions. Here's some more information about them." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:300 msgid "" "The functions ``get_slide_collision_count()`` and ``get_slide_collision()`` " "both come from the :ref:`CharacterBody3D ` class and " "are related to ``move_and_slide()``." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:304 msgid "" "``get_slide_collision()`` returns " "a :ref:`KinematicCollision3D` object that holds " "information about where and how the collision occurred. For example, we use " "its ``get_collider`` property to check if we collided with a \"mob\" by " "calling ``is_in_group()`` on it: " "``collision.get_collider().is_in_group(\"mob\")``." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:312 msgid "" "The method ``is_in_group()`` is available on every :ref:`Node`." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:314 msgid "" "To check that we are landing on the monster, we use the vector dot product: " "``Vector3.UP.dot(collision.get_normal()) > 0.1``. The collision normal is a " "3D vector that is perpendicular to the plane where the collision occurred. " "The dot product allows us to compare it to the up direction." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:319 msgid "" "With dot products, when the result is greater than ``0``, the two vectors " "are at an angle of fewer than 90 degrees. A value higher than ``0.1`` tells " "us that we are roughly above the monster." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:323 msgid "" "After handling the squash and bounce logic, we terminate the loop early via " "the ``break`` statement to prevent further duplicate calls to " "``mob.squash()``, which may otherwise result in unintended bugs such as " "counting the score multiple times for one kill." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:327 msgid "" "We are calling one undefined function, ``mob.squash()``, so we have to add " "it to the Mob class." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:330 msgid "" "Open the script ``mob.gd`` by double-clicking on it in the *FileSystem* " "dock. At the top of the script, we want to define a new signal named " "``squashed``. And at the bottom, you can add the squash function, where we " "emit the signal and destroy the mob." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:366 msgid "" "When using C#, Godot will create the appropriate events automatically for " "all Signals ending with `EventHandler`, see :ref:`C# Signals " "`." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:368 msgid "We will use the signal to add points to the score in the next lesson." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:370 msgid "" "With that, you should be able to kill monsters by jumping on them. You can " "press :kbd:`F5` to try the game and set ``main.tscn`` as your project's main " "scene." msgstr "" #: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:373 msgid "However, the player won't die yet. We'll work on that in the next part." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:4 msgid "Killing the player" msgstr "Di chuyển player" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:6 msgid "" "We can kill enemies by jumping on them, but the player still can't die. " "Let's fix this." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:9 msgid "" "We want to detect being hit by an enemy differently from squashing them. We " "want the player to die when they're moving on the floor, but not if they're " "in the air. We could use vector math to distinguish the two kinds of " "collisions. Instead, though, we will use an :ref:`Area3D ` " "node, which works well for hitboxes." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:16 msgid "Hitbox with the Area node" msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:18 msgid "" "Head back to the ``player.tscn`` scene and add a new child node :ref:`Area3D " "`. Name it ``MobDetector`` Add a :ref:`CollisionShape3D " "` node as a child of it." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:24 msgid "In the *Inspector*, assign a cylinder shape to it." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:28 msgid "" "Here is a trick you can use to make the collisions only happen when the " "player is on the ground or close to it. You can reduce the cylinder's height " "and move it up to the top of the character. This way, when the player jumps, " "the shape will be too high up for the enemies to collide with it." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:36 msgid "" "You also want the cylinder to be wider than the sphere. This way, the player " "gets hit before colliding and being pushed on top of the monster's collision " "box." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:40 msgid "The wider the cylinder, the more easily the player will get killed." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:42 msgid "" "Next, select the ``MobDetector`` node again, and in the *Inspector*, turn " "**off** its *Monitorable* property. This makes it so other physics nodes " "cannot detect the area. The complementary *Monitoring* property allows it to " "detect collisions. Then, remove the *Collision -> Layer* and set the mask to " "the \"enemies\" layer." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:50 msgid "" "When areas detect a collision, they emit signals. We're going to connect one " "to the ``Player`` node. Select ``MobDetector`` and go to *Inspector*'s " "*Node* tab, double-click the ``body_entered`` signal and connect it to the " "``Player``" msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:56 msgid "" "The *MobDetector* will emit ``body_entered`` when a :ref:`CharacterBody3D " "` or a :ref:`RigidBody3D ` node " "enters it. As it only masks the \"enemies\" physics layers, it will only " "detect the ``Mob`` nodes." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:60 msgid "" "Code-wise, we're going to do two things: emit a signal we'll later use to " "end the game and destroy the player. We can wrap these operations in a " "``die()`` function that helps us put a descriptive label on the code." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:104 msgid "Ending the game" msgstr "Di chuyển player" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:106 msgid "" "We can use the ``Player``\\ 's ``hit`` signal to end the game. All we need " "to do is connect it to the ``Main`` node and stop the ``MobTimer`` in " "reaction." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:110 msgid "" "Open ``main.tscn``, select the ``Player`` node, and in the *Node* dock, " "connect its ``hit`` signal to the ``Main`` node." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:115 msgid "Get the timer, and stop it, in the ``_on_player_hit()`` function." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:131 msgid "" "If you try the game now, the monsters will stop spawning when you die, and " "the remaining ones will leave the screen." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:134 msgid "" "Notice also that the game no longer crashes or displays an error when the " "player dies. Because we are stopping the MobTimer, it no longer triggers the " "``_on_mob_timer_timeout()`` function." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:137 msgid "" "Also note that the enemy colliding with the player and dying depends on the " "size and position of the ``Player`` and the ``Mob``\\ 's collision shapes. " "You may need to move them and resize them to achieve a tight game feel." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:141 msgid "" "You can pat yourself on the back: you prototyped a complete 3D game, even if " "it's still a bit rough." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:144 msgid "" "From there, we'll add a score, the option to retry the game, and you'll see " "how you can make the game feel much more alive with minimalistic animations." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:149 msgid "Code checkpoint" msgstr "Tạo điểm dừng" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:151 msgid "" "Here are the complete scripts for the ``Main``, ``Mob``, and ``Player`` " "nodes, for reference. You can use them to compare and check your code." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:154 msgid "Starting with ``main.gd``." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:216 msgid "Next is ``mob.gd``." msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:311 msgid "Finally, the longest script, ``player.gd``:" msgstr "" #: ../../docs/getting_started/first_3d_game/07.killing_player.rst:512 msgid "See you in the next lesson to add the score and the retry option." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:4 msgid "Score and replay" msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:6 msgid "" "In this part, we'll add the score, music playback, and the ability to " "restart the game." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:9 msgid "" "We have to keep track of the current score in a variable and display it on " "screen using a minimal interface. We will use a text label to do that." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:12 msgid "" "In the main scene, add a new child node :ref:`Control ` to " "``Main`` and name it ``UserInterface``. Ensure you are on the 2D screen, " "where you can edit your User Interface (UI)." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:15 msgid "Add a :ref:`Label ` node and name it ``ScoreLabel``" msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:19 msgid "" "In the *Inspector*, set the *Label*'s *Text* to a placeholder like \"Score: " "0\"." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:23 msgid "" "Also, the text is white by default, like our game's background. We need to " "change its color to see it at runtime." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:26 msgid "" "Scroll down to *Theme Overrides*, and expand *Colors* and enable *Font " "Color* in order to tint the text to black (which contrasts well with the " "white 3D scene)" msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:32 msgid "" "Finally, click and drag on the text in the viewport to move it away from the " "top-left corner." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:37 msgid "" "The ``UserInterface`` node allows us to group our UI in a branch of the " "scene tree and use a theme resource that will propagate to all its children. " "We'll use it to set our game's font." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:42 msgid "Creating a UI theme" msgstr "Tạo nội dung" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:44 msgid "" "Once again, select the ``UserInterface`` node. In the *Inspector*, create a " "new theme resource in *Theme -> Theme*." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:49 msgid "" "Click on it to open the theme editor In the bottom panel. It gives you a " "preview of how all the built-in UI widgets will look with your theme " "resource." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:54 msgid "" "By default, a theme only has a few properties: *Default Base Scale*, " "*Default Font* and *Default Font Size*." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:59 msgid "" "You can add more properties to the theme resource to design complex user " "interfaces, but that is beyond the scope of this series. To learn more about " "creating and editing themes, see :ref:`doc_gui_skinning`." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:63 msgid "" "The *Default Font* expects a font file like the ones you have on your " "computer. Two common font file formats are TrueType Font (TTF) and OpenType " "Font (OTF)." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:66 msgid "" "In the *FileSystem* dock, expand the ``fonts`` directory and click and drag " "the ``Montserrat-Medium.ttf`` file we included in the project onto the " "*Default Font*. The text will reappear in the theme preview." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:70 msgid "" "The text is a bit small. Set the *Default Font Size* to ``22`` pixels to " "increase the text's size." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:75 msgid "Keeping track of the score" msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:77 msgid "" "Let's work on the score next. Attach a new script to the ``ScoreLabel`` and " "define the ``score`` variable." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:96 msgid "" "The score should increase by ``1`` every time we squash a monster. We can " "use their ``squashed`` signal to know when that happens. However, because we " "instantiate monsters from the code, we cannot connect the mob signal to the " "``ScoreLabel`` via the editor." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:100 msgid "" "Instead, we have to make the connection from the code every time we spawn a " "monster." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:103 msgid "" "Open the script ``main.gd``. If it's still open, you can click on its name " "in the script editor's left column." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:108 msgid "" "Alternatively, you can double-click the ``main.gd`` file in the *FileSystem* " "dock." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:111 msgid "" "At the bottom of the ``_on_mob_timer_timeout()`` function, add the following " "line:" msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:131 msgid "" "This line means that when the mob emits the ``squashed`` signal, the " "``ScoreLabel`` node will receive it and call the function " "``_on_mob_squashed()``." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:134 msgid "" "Head back to the ``score_label.gd`` script to define the " "``_on_mob_squashed()`` callback function." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:137 msgid "There, we increment the score and update the displayed text." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:154 msgid "" "The second line uses the value of the ``score`` variable to replace the " "placeholder ``%s``. When using this feature, Godot automatically converts " "values to string text, which is convenient when outputting text in labels or " "when using the ``print()`` function." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:161 msgid "" "You can learn more about string formatting here: :ref:`doc_gdscript_printf`. " "In C#, consider using `string interpolation with \"$\" `_." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:164 msgid "" "You can now play the game and squash a few enemies to see the score increase." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:171 msgid "" "In a complex game, you may want to completely separate your user interface " "from the game world. In that case, you would not keep track of the score on " "the label. Instead, you may want to store it in a separate, dedicated " "object. But when prototyping or when your project is simple, it is fine to " "keep your code simple. Programming is always a balancing act." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:178 msgid "Retrying the game" msgstr "Script một scene" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:180 msgid "" "We'll now add the ability to play again after dying. When the player dies, " "we'll display a message on the screen and wait for input." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:183 msgid "" "Head back to the ``main.tscn`` scene, select the ``UserInterface`` node, add " "a child node :ref:`ColorRect `, and name it ``Retry``. This " "node fills a rectangle with a uniform color and will serve as an overlay to " "darken the screen." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:188 msgid "" "To make it span over the whole viewport, you can use the *Anchor Preset* " "menu in the toolbar." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:193 msgid "Open it and apply the *Full Rect* command." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:197 msgid "" "Nothing happens. Well, almost nothing; only the four green pins move to the " "corners of the selection box." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:202 msgid "" "This is because UI nodes (all the ones with a green icon) work with anchors " "and margins relative to their parent's bounding box. Here, the " "``UserInterface`` node has a small size and the ``Retry`` one is limited by " "it." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:206 msgid "" "Select the ``UserInterface`` and apply *Anchor Preset -> Full Rect* to it as " "well. The ``Retry`` node should now span the whole viewport." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:209 msgid "" "Let's change its color so it darkens the game area. Select ``Retry`` and in " "the *Inspector*, set its *Color* to something both dark and transparent. To " "do so, in the color picker, drag the *A* slider to the left. It controls the " "color's Alpha channel, that is to say, its opacity/transparency." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:216 msgid "" "Next, add a :ref:`Label ` as a child of ``Retry`` and give it " "the *Text* \"Press Enter to retry.\" To move it and anchor it in the center " "of the screen, apply *Anchor Preset -> Center* to it." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:224 msgid "Coding the retry option" msgstr "Hàm chồng chéo (Overrideable functions)" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:226 msgid "" "We can now head to the code to show and hide the ``Retry`` node when the " "player dies and plays again." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:229 msgid "" "Open the script ``main.gd``. First, we want to hide the overlay at the start " "of the game. Add this line to the ``_ready()`` function." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:245 msgid "Then, when the player gets hit, we show the overlay." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:262 msgid "" "Finally, when the ``Retry`` node is visible, we need to listen to the " "player's input and restart the game if they press enter. To do this, we use " "the built-in ``_unhandled_input()`` callback, which is triggered on any " "input." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:266 msgid "" "If the player pressed the predefined ``ui_accept`` input action and " "``Retry`` is visible, we reload the current scene." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:288 msgid "" "The function ``get_tree()`` gives us access to the global :ref:`SceneTree " "` object, which allows us to reload and restart the current " "scene." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:293 msgid "Adding music" msgstr "Thêm một script" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:295 msgid "" "To add music that plays continuously in the background, we're going to use " "another feature in Godot: :ref:`autoloads `." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:298 msgid "" "To play audio, all you need to do is add an :ref:`AudioStreamPlayer " "` node to your scene and attach an audio file to " "it. When you start the scene, it can play automatically. However, when you " "reload the scene, like we do to play again, the audio nodes are also reset, " "and the music starts back from the beginning." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:303 msgid "" "You can use the autoload feature to have Godot load a node or a scene " "automatically at the start of the game, outside the current scene. You can " "also use it to create globally accessible objects." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:307 msgid "" "Create a new scene by going to the *Scene* menu and clicking *New Scene* or " "by using the *+* icon next to your currently opened scene." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:312 msgid "" "Click the *Other Node* button to create an :ref:`AudioStreamPlayer " "` and rename it to ``MusicPlayer``." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:317 msgid "" "We included a music soundtrack in the ``art/`` directory, ``House In a " "Forest Loop.ogg``. Click and drag it onto the *Stream* property in the " "*Inspector*. Also, turn on *Autoplay* so the music plays automatically at " "the start of the game." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:324 #, fuzzy msgid "Save the scene as ``music_player.tscn``." msgstr "Cuối cùng, lưu scene với một tên như `` sayhello.tscn``." #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:326 #, fuzzy msgid "" "We have to register it as an autoload. Head to the *Project -> Project " "Settings…* menu and click on the *Globals -> Autoload* tab." msgstr "" "Bạn có thể xem và chỉnh sửa những nút này trong project của mình bằng cách " "vào menu Project -> Project Settings rồi chọn tab Input Map." #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:329 msgid "" "In the *Path* field, you want to enter the path to your scene. Click the " "folder icon to open the file browser and double-click on " "``music_player.tscn``. Then, click the *Add* button on the right to register " "the node." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:335 msgid "" "``music_player.tscn`` now loads into any scene you open or play. So if you " "run the game now, the music will play automatically in any scene." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:338 msgid "" "Before we wrap up this lesson, here's a quick look at how it works under the " "hood. When you run the game, your *Scene* dock changes to give you two tabs: " "*Remote* and *Local*." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:344 msgid "" "The *Remote* tab allows you to visualize the node tree of your running game. " "There, you will see the *Main* node and everything the scene contains and " "the instantiated mobs at the bottom." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:350 msgid "" "At the top are the autoloaded ``MusicPlayer`` and a *root* node, which is " "your game's viewport." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:353 msgid "" "And that does it for this lesson. In the next part, we'll add an animation " "to make the game both look and feel much nicer." msgstr "" #: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:356 msgid "Here is the complete ``main.gd`` script for reference." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:4 msgid "Character animation" msgstr "Sprite động" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:6 msgid "" "In this final lesson, we'll use Godot's built-in animation tools to make our " "characters float and flap. You'll learn to design animations in the editor " "and use code to make your game feel alive." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:12 msgid "We'll start with an introduction to using the animation editor." msgstr "Hướng dẫn Godot's editor" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:15 msgid "Using the animation editor" msgstr "Thư viện tài nguyên" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:17 msgid "" "The engine comes with tools to author animations in the editor. You can then " "use the code to play and control them at runtime." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:20 msgid "" "Open the player scene, select the ``Player`` node, and add " "an :ref:`AnimationPlayer ` node." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:22 msgid "The *Animation* dock appears in the bottom panel." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:26 msgid "" "It features a toolbar and the animation drop-down menu at the top, a track " "editor in the middle that's currently empty, and filter, snap, and zoom " "options at the bottom." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:30 msgid "Let's create an animation. Click on *Animation -> New*." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:34 msgid "Name the animation \"float\"." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:38 msgid "" "Once you've created the animation, the timeline appears with numbers " "representing time in seconds." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:43 msgid "" "We want the animation to start playback automatically at the start of the " "game. Also, it should loop." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:46 msgid "" "To do so, you can click the autoplay button (|Autoplay|) in the animation " "toolbar and the looping arrows, respectively." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:641 #, fuzzy msgid "Autoplay" msgstr "Tự nạp" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:51 msgid "" "You can also pin the animation editor by clicking the pin icon in the top-" "right. This prevents it from folding when you click on the viewport and " "deselect the nodes." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:57 msgid "" "Set the animation duration to ``1.2`` seconds in the top-right of the dock." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:59 msgid "" "You should see the gray ribbon widen a bit. It shows you the start and end " "of your animation and the vertical blue line is your time cursor." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:64 msgid "" "You can click and drag the slider in the bottom-right to zoom in and out of " "the timeline." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:70 msgid "The float animation" msgstr "Bật hoạt hình thích hợp." #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:72 msgid "" "With the animation player node, you can animate most properties on as many " "nodes as you need. Notice the key icon next to properties in the " "*Inspector*. You can click any of them to create a keyframe, a time and " "value pair for the corresponding property. The keyframe gets inserted where " "your time cursor is in the timeline." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:78 msgid "" "Let's insert our first keys. Here, we will animate both the position and the " "rotation of the ``Character`` node." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:81 msgid "" "Select the ``Character`` and in the *Inspector* expand the *Transform* " "section. Click the key icon next to *Position*, and *Rotation*." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:87 msgid "" "For this tutorial, just create RESET Track(s) which is the default choice" msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:89 msgid "" "Two tracks appear in the editor with a diamond icon representing each " "keyframe." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:93 msgid "" "You can click and drag on the diamonds to move them in time. Move the " "position key to ``0.3`` seconds and the rotation key to ``0.1`` seconds." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:98 msgid "" "Move the time cursor to ``0.5`` seconds by clicking and dragging on the gray " "timeline, or by entering it into the input field." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:101 msgid "|timeline_05_click|" msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:640 msgid "timeline_05_click" msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:103 msgid "" "In the *Inspector*, set the *Position*'s *Y* axis to ``0.65`` meters and the " "*Rotation*' *X* axis to ``8``." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:106 msgid "" "If you don't see the properties in the *Inspector* panel, first click on the " "``Character`` node again in the *Scene* dock." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:111 msgid "Create a keyframe for both properties" msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:113 msgid "|second_keys_both|" msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:639 msgid "second_keys_both" msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:115 msgid "" "Now, move the position keyframe to ``0.7`` seconds by dragging it on the " "timeline." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:122 msgid "" "A lecture on the principles of animation is beyond the scope of this " "tutorial. Just note that you don't want to time and space everything evenly. " "Instead, animators play with timing and spacing, two core animation " "principles. You want to offset and contrast in your character's motion to " "make them feel alive." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:128 msgid "" "Move the time cursor to the end of the animation, at ``1.2`` seconds. Set " "the Y position to about ``0.35`` and the X rotation to ``-9`` degrees. Once " "again, create a key for both properties." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:132 msgid "|animation_final_keyframes|" msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:638 msgid "animation_final_keyframes" msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:134 msgid "" "You can preview the result by clicking the play button or " "pressing :kbd:`Shift + D`. Click the stop button or press :kbd:`S` to stop " "playback." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:139 msgid "" "You can see that the engine interpolates between your keyframes to produce a " "continuous animation. At the moment, though, the motion feels very robotic. " "This is because the default interpolation is linear, causing constant " "transitions, unlike how living things move in the real world." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:144 msgid "We can control the transition between keyframes using easing curves." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:146 msgid "" "Click and drag around the first two keys in the timeline to box select them." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:150 msgid "" "You can edit the properties of both keys simultaneously in the *Inspector*, " "where you can see an *Easing* property." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:155 msgid "" "Click and drag on the curve, pulling it towards the left. This will make it " "ease-out, that is to say, transition fast initially and slow down as the " "time cursor reaches the next keyframe." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:161 msgid "" "Play the animation again to see the difference. The first half should " "already feel a bit bouncier." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:164 msgid "Apply an ease-out to the second keyframe in the rotation track." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:168 msgid "" "Do the opposite for the second position keyframe, dragging it to the right." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:172 msgid "Your animation should look something like this." msgstr "Hoạt ảnh của bạn sẽ trông như thế này." #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:178 msgid "" "Animations update the properties of the animated nodes every frame, " "overriding initial values. If we directly animated the *Player* node, it " "would prevent us from moving it in code. This is where the *Pivot* node " "comes in handy: even though we animated the *Character*, we can still move " "and rotate the *Pivot* and layer changes on top of the animation in a script." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:185 msgid "If you play the game, the player's creature will now float!" msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:187 msgid "" "If the creature is a little too close to the floor, you can move the " "``Pivot`` up to offset it." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:191 msgid "Controlling the animation in code" msgstr "Tạo nội dung" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:193 msgid "" "We can use code to control the animation playback based on the player's " "input. Let's change the animation speed when the character is moving." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:196 msgid "Open the ``Player``'s script by clicking the script icon next to it." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:200 msgid "" "In ``_physics_process()``, after the line where we check the ``direction`` " "vector, add the following code." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:230 msgid "" "This code makes it so when the player moves, we multiply the playback speed " "by ``4``. When they stop, we reset it to normal." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:233 msgid "" "We mentioned that the ``Pivot`` could layer transforms on top of the " "animation. We can make the character arc when jumping using the following " "line of code. Add it at the end of ``_physics_process()``." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:254 msgid "Animating the mobs" msgstr "Tạo nội dung" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:256 msgid "" "Here's another nice trick with animations in Godot: as long as you use a " "similar node structure, you can copy them to different scenes." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:259 msgid "" "For example, both the ``Mob`` and the ``Player`` scenes have a ``Pivot`` and " "a ``Character`` node, so we can reuse animations between them." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:262 msgid "" "Open the *Player* scene, select the AnimationPlayer node and then click on " "**Animation > Manage Animations...**. Click the *Copy animation to " "clipboard* button (two small squares) alongside the *float* animation. Click " "OK to close the window." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:266 msgid "" "Then open ``mob.tscn``, create an :ref:`AnimationPlayer " "` child node and select it. Click **Animation > " "Manage Animations**, then **New Library**. You should see the message " "\"Global library will be created.\" Leave the text field blank and click OK. " "Click the *Paste* icon (clipboard) and it should appear in the window. Click " "OK to close the window." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:272 msgid "" "Next, make sure that the autoplay button (|Autoplay|) and the looping arrows " "(Animation looping) are also turned on in the animation editor in the bottom " "panel. That's it; all monsters will now play the float animation." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:276 msgid "" "We can change the playback speed based on the creature's ``random_speed``. " "Open the *Mob*'s script and at the end of the ``initialize()`` function, add " "the following line." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:294 msgid "And with that, you finished coding your first complete 3D game." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:296 msgid "**Congratulations**!" msgstr "**Chúc mừng**!" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:298 msgid "" "In the next part, we'll quickly recap what you learned and give you some " "links to keep learning more. But for now, here are the complete " "``player.gd`` and ``mob.gd`` so you can check your code against them." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:302 msgid "Here's the *Player* script." msgstr "" #: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:517 msgid "And the *Mob*'s script." msgstr "" #: ../../docs/getting_started/first_3d_game/going_further.rst:4 msgid "Going further" msgstr "Di chuyển player" #: ../../docs/getting_started/first_3d_game/going_further.rst:6 msgid "" "You can pat yourself on the back for having completed your first 3D game " "with Godot." msgstr "" #: ../../docs/getting_started/first_3d_game/going_further.rst:9 msgid "" "In this series, we went over a wide range of techniques and editor features. " "Hopefully, you've witnessed how intuitive Godot's scene system can be and " "learned a few tricks you can apply in your projects." msgstr "" #: ../../docs/getting_started/first_3d_game/going_further.rst:13 msgid "" "But we just scratched the surface: Godot has a lot more in store for you to " "save time creating games. And you can learn all that by browsing the " "documentation." msgstr "" #: ../../docs/getting_started/first_3d_game/going_further.rst:16 msgid "" "Where should you begin? Below, you'll find a few pages to start exploring " "and build upon what you've learned so far." msgstr "" #: ../../docs/getting_started/first_3d_game/going_further.rst:19 #, fuzzy msgid "" "But before that, here's a link to download a completed version of the " "project: ``_." msgstr "" "Ngoài bộ tài liệu này, bạn có thể tham khảo các `Dự án Godot mẫu của chúng " "tôi `_." #: ../../docs/getting_started/first_3d_game/going_further.rst:23 msgid "Exploring the manual" msgstr "" #: ../../docs/getting_started/first_3d_game/going_further.rst:25 msgid "" "The manual is your ally whenever you have a doubt or you're curious about a " "feature. It does not contain tutorials about specific game genres or " "mechanics. Instead, it explains how Godot works in general. In it, you will " "find information about 2D, 3D, physics, rendering and performance, and much " "more." msgstr "" #: ../../docs/getting_started/first_3d_game/going_further.rst:30 msgid "Here are the sections we recommend you to explore next:" msgstr "" #: ../../docs/getting_started/first_3d_game/going_further.rst:32 msgid "" "Read the :ref:`Scripting section ` to learn " "essential programming features you'll use in every project." msgstr "" #: ../../docs/getting_started/first_3d_game/going_further.rst:34 msgid "" "The :ref:`3D ` and :ref:`Physics ` sections will teach you more about 3D game creation in the engine." msgstr "" #: ../../docs/getting_started/first_3d_game/going_further.rst:36 msgid "" ":ref:`Inputs ` is another important one for any " "game project." msgstr "" #: ../../docs/getting_started/first_3d_game/going_further.rst:38 msgid "" "You can start with these or, if you prefer, look at the sidebar menu on the " "left and pick your options." msgstr "" #: ../../docs/getting_started/first_3d_game/going_further.rst:41 msgid "" "We hope you enjoyed this tutorial series, and we're looking forward to " "seeing what you achieve using Godot." msgstr "" #: ../../docs/tutorials/best_practices/introduction_best_practices.rst:6 msgid "" "This series is a collection of best practices to help you work efficiently " "with Godot." msgstr "" "Chuỗi bài này tập hợp những phương pháp tốt nhất để giúp bạn làm việc hiệu " "quả với Godot." #: ../../docs/tutorials/best_practices/introduction_best_practices.rst:9 msgid "" "Godot allows for a great amount of flexibility in how you structure a " "project's codebase and break it down into scenes. Each approach has its pros " "and cons, and they can be hard to weigh until you've worked with the engine " "for long enough." msgstr "" #: ../../docs/tutorials/best_practices/introduction_best_practices.rst:13 msgid "" "There are always many ways to structure your code and solve specific " "programming problems. It would be impossible to cover them all here." msgstr "" #: ../../docs/tutorials/best_practices/introduction_best_practices.rst:16 msgid "" "That is why each article starts from a real-world problem. We will break " "down each problem in fundamental questions, suggest solutions, analyze the " "pros and cons of each option, and highlight the best course of action for " "the problem at hand." msgstr "" #: ../../docs/tutorials/best_practices/introduction_best_practices.rst:20 msgid "" "You should start by reading :ref:`doc_what_are_godot_classes`. It explains " "how Godot's nodes and scenes relate to classes and objects in other Object-" "Oriented programming languages. It will help you make sense of the rest of " "the series." msgstr "" #: ../../docs/tutorials/best_practices/introduction_best_practices.rst:26 msgid "" "The best practices in Godot rely on Object-Oriented design principles. We " "use tools like the `single responsibility `_ principle and `encapsulation `_." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:4 msgid "Applying object-oriented principles in Godot" msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:6 msgid "" "The engine offers two main ways to create reusable objects: scripts and " "scenes. Neither of these technically define classes under the hood." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:9 msgid "" "Still, many best practices using Godot involve applying object-oriented " "programming principles to the scripts and scenes that compose your game. " "That is why it's useful to understand how we can think of them as classes." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:13 msgid "" "This guide briefly explains how scripts and scenes work in the engine's core " "to help you understand how they work under the hood." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:17 msgid "How scripts work in the engine" msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:19 msgid "" "The engine provides built-in classes like :ref:`Node `. You can " "extend those to create derived types using a script." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:22 msgid "" "These scripts are not technically classes. Instead, they are resources that " "tell the engine a sequence of initializations to perform on one of the " "engine's built-in classes." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:25 msgid "" "Godot's internal classes have methods that register a class's data with " "a :ref:`ClassDB `. This database provides runtime access to " "class information. ``ClassDB`` contains information about classes like:" msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:29 msgid "Properties." msgstr "Nó có thuộc tính có thể chỉnh sửa." #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:30 msgid "Methods." msgstr "Tạo các node" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:31 msgid "Constants." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:32 msgid "Signals." msgstr "Tín hiệu (Signal)" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:34 msgid "" "This ``ClassDB`` is what objects check against when performing an operation " "like accessing a property or calling a method. It checks the database's " "records and the object's base types' records to see if the object supports " "the operation." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:38 msgid "" "Attaching a :ref:`Script ` to your object extends the methods, " "properties, and signals available from the ``ClassDB``." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:43 msgid "" "Even scripts that don't use the ``extends`` keyword implicitly inherit from " "the engine's base :ref:`RefCounted ` class. As a result, " "you can instantiate scripts without the ``extends`` keyword from code. Since " "they extend ``RefCounted`` though, you cannot attach them to a :ref:`Node " "`." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:51 msgid "" "The behavior of scenes has many similarities to classes, so it can make " "sense to think of a scene as a class. Scenes are reusable, instantiable, and " "inheritable groups of nodes. Creating a scene is similar to having a script " "that creates nodes and adds them as children using ``add_child()``." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:55 msgid "" "We often pair a scene with a scripted root node that makes use of the " "scene's nodes. As such, the script extends the scene by adding behavior " "through imperative code." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:58 msgid "The content of a scene helps to define:" msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:60 msgid "What nodes are available to the script." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:61 msgid "How they are organized." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:62 msgid "How they are initialized." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:63 msgid "What signal connections they have with each other." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:65 msgid "" "Why is any of this important to scene organization? Because instances of " "scenes *are* objects. As a result, many object-oriented principles that " "apply to written code also apply to scenes: single responsibility, " "encapsulation, and others." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:69 msgid "" "The scene is *always an extension of the script attached to its root node*, " "so you can interpret it as part of a class." msgstr "" #: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:72 msgid "" "Most of the techniques explained in this best practices series build on this " "point." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:4 msgid "Scene organization" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:6 msgid "" "This article covers topics related to the effective organization of scene " "content. Which nodes should you use? Where should you place them? How should " "they interact?" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:11 msgid "How to build relationships effectively" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:13 msgid "" "When Godot users begin crafting their own scenes, they often run into the " "following problem:" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:16 msgid "" "They create their first scene and fill it with content only to eventually " "end up saving branches of their scene into separate scenes as the nagging " "feeling that they should split things up starts to accumulate. However, they " "then notice that the hard references they were able to rely on before are no " "longer possible. Re-using the scene in multiple places creates issues " "because the node paths do not find their targets and signal connections " "established in the editor break." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:24 msgid "" "To fix these problems, you must instantiate the sub-scenes without them " "requiring details about their environment. You need to be able to trust that " "the sub-scene will create itself without being picky about how it's used." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:28 msgid "" "One of the biggest things to consider in OOP is maintaining focused, " "singular-purpose classes with `loose coupling `_ to other parts of the codebase. This keeps the size of " "objects small (for maintainability) and improves their reusability." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:34 msgid "" "These OOP best practices have *several* implications for best practices in " "scene structure and script usage." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:37 msgid "" "**If at all possible, you should design scenes to have no dependencies.** " "That is, you should create scenes that keep everything they need within " "themselves." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:41 msgid "" "If a scene must interact with an external context, experienced developers " "recommend the use of `Dependency Injection `_. This technique involves having a high-level API " "provide the dependencies of the low-level API. Why do this? Because classes " "which rely on their external environment can inadvertently trigger bugs and " "unexpected behavior." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:48 msgid "" "To do this, you must expose data and then rely on a parent context to " "initialize it:" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:51 msgid "" "Connect to a signal. Extremely safe, but should be used only to \"respond\" " "to behavior, not start it. By convention, signal names are usually past-" "tense verbs like \"entered\", \"skill_activated\", or \"item_collected\"." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:85 msgid "Call a method. Used to start behavior." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:115 msgid "" "Initialize a :ref:`Callable ` property. Safer than a method " "as ownership of the method is unnecessary. Used to start behavior." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:146 msgid "Initialize a Node or other Object reference." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:176 msgid "Initialize a NodePath." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:206 msgid "" "These options hide the points of access from the child node. This in turn " "keeps the child **loosely coupled** to its environment. You can reuse it in " "another context without any extra changes to its API." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:212 msgid "" "Although the examples above illustrate parent-child relationships, the same " "principles apply towards all object relations. Nodes which are siblings " "should only be aware of their own hierarchies while an ancestor mediates " "their communications and references." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:295 msgid "" "The same principles also apply to non-Node objects that maintain " "dependencies on other objects. Whichever object owns the other objects " "should manage the relationships between them." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:301 msgid "" "You should favor keeping data in-house (internal to a scene), though, as " "placing a dependency on an external context, even a loosely coupled one, " "still means that the node will expect something in its environment to be " "true. The project's design philosophies should prevent this from happening. " "If not, the code's inherent liabilities will force developers to use " "documentation to keep track of object relations on a microscopic scale; this " "is otherwise known as development hell. Writing code that relies on external " "documentation to use it safely is error-prone by default." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:310 msgid "" "To avoid creating and maintaining such documentation, you convert the " "dependent node (\"child\" above) into a tool script that implements " "``_get_configuration_warnings()``. Returning a non-empty PackedStringArray " "from it will make the Scene dock generate a warning icon with the string(s) " "as a tooltip by the node. This is the same icon that appears for nodes such " "as the :ref:`Area2D ` node when it has no " "child :ref:`CollisionShape2D ` nodes defined. The " "editor then self-documents the scene through the script code. No content " "duplication via documentation is necessary." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:321 msgid "" "A GUI like this can better inform project users of critical information " "about a Node. Does it have external dependencies? Have those dependencies " "been satisfied? Other programmers, and especially designers and writers, " "will need clear instructions in the messages telling them what to do to " "configure it." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:326 msgid "" "So, why does all this complex switcheroo work? Well, because scenes operate " "best when they operate alone. If unable to work alone, then working with " "others anonymously (with minimal hard dependencies, i.e. loose coupling) is " "the next best thing. Inevitably, changes may need to be made to a class, and " "if these changes cause it to interact with other scenes in unforeseen ways, " "then things will start to break down. The whole point of all this " "indirection is to avoid ending up in a situation where changing one class " "results in adversely affecting other classes dependent on it." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:335 msgid "" "Scripts and scenes, as extensions of engine classes, should abide by *all* " "OOP principles. Examples include..." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:338 msgid "`SOLID `_" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:339 msgid "`DRY `_" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:340 msgid "`KISS `_" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:341 msgid "`YAGNI `_" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:344 msgid "Choosing a node tree structure" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:346 msgid "" "You might start to work on a game but get overwhelmed by the vast " "possibilities before you. You might know what you want to do, what systems " "you want to have, but *where* do you put them all? How you go about making " "your game is always up to you. You can construct node trees in countless " "ways. If you are unsure, this guide can give you a sample of a decent " "structure to start with." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:353 msgid "" "A game should always have an \"entry point\"; somewhere you can definitively " "track where things begin so that you can follow the logic as it continues " "elsewhere. It also serves as a bird's eye view of all other data and logic " "in the program. For traditional applications, this is normally a \"main\" " "function. In Godot, it's a Main node." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:359 #: ../../docs/tutorials/best_practices/scene_organization.rst:367 msgid "Node \"Main\" (main.gd)" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:361 msgid "" "The ``main.gd`` script will serve as the primary controller of your game." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:363 msgid "" "Then you have an in-game \"World\" (a 2D or 3D one). This can be a child of " "Main. In addition, you will need a primary GUI for your game that manages " "the various menus and widgets the project needs." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:368 msgid "Node2D/Node3D \"World\" (game_world.gd)" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:369 msgid "Control \"GUI\" (gui.gd)" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:371 msgid "" "When changing levels, you can then swap out the children of the \"World\" " "node. :ref:`Changing scenes manually ` gives you " "full control over how your game world transitions." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:375 msgid "" "The next step is to consider what gameplay systems your project requires. If " "you have a system that..." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:378 msgid "tracks all of its data internally" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:379 msgid "should be globally accessible" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:380 msgid "should exist in isolation" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:382 msgid "" "... then you should create an :ref:`autoload 'singleton' node " "`." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:386 msgid "" "For smaller games, a simpler alternative with less control would be to have " "a \"Game\" singleton that simply calls " "the :ref:`SceneTree.change_scene_to_file() " "` method to swap out the main " "scene's content. This structure more or less keeps the \"World\" as the main " "game node." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:392 msgid "" "Any GUI would also need to be either a singleton, a transitory part of the " "\"World\", or manually added as a direct child of the root. Otherwise, the " "GUI nodes would also delete themselves during scene transitions." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:396 msgid "" "If you have systems that modify other systems' data, you should define those " "as their own scripts or scenes, rather than autoloads. For more information, " "see :ref:`Autoloads versus regular nodes " "`." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:400 msgid "" "Each subsystem within your game should have its own section within the " "SceneTree. You should use parent-child relationships only in cases where " "nodes are effectively elements of their parents. Does removing the parent " "reasonably mean that the children should also be removed? If not, then it " "should have its own place in the hierarchy as a sibling or some other " "relation." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:408 msgid "" "In some cases, you need these separated nodes to *also* position themselves " "relative to each other. You can use the :ref:`RemoteTransform " "` / :ref:`RemoteTransform2D " "` nodes for this purpose. They will allow a target " "node to conditionally inherit selected transform elements from the Remote\\* " "node. To assign the ``target`` :ref:`NodePath `, use one of " "the following:" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:416 msgid "" "A reliable third party, likely a parent node, to mediate the assignment." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:417 msgid "" "A group, to pull a reference to the desired node (assuming there will only " "ever be one of the targets)." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:420 msgid "" "When you should do this is subjective. The dilemma arises when you must " "micro-manage when a node must move around the SceneTree to preserve itself. " "For example..." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:424 msgid "Add a \"player\" node to a \"room\"." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:425 msgid "Need to change rooms, so you must delete the current room." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:426 msgid "" "Before the room can be deleted, you must preserve and/or move the player." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:428 msgid "If memory is not a concern, you can..." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:430 #, fuzzy msgid "Create the new room." msgstr "Tạo nội dung" #: ../../docs/tutorials/best_practices/scene_organization.rst:431 #, fuzzy msgid "Move the player to the new room." msgstr "Di chuyển player" #: ../../docs/tutorials/best_practices/scene_organization.rst:432 msgid "Delete the old room." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:434 msgid "If memory is a concern, instead you will need to..." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:436 msgid "Move the player somewhere else in the tree." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:437 msgid "Delete the room." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:438 msgid "Instantiate and add the new room." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:439 msgid "Re-add the player to the new room." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:441 msgid "" "The issue is that the player here is a \"special case\" where the developers " "must *know* that they need to handle the player this way for the project. " "The only way to reliably share this information as a team is to *document* " "it. Keeping implementation details in documentation is dangerous. It's a " "maintenance burden, strains code readability, and unnecessarily bloats the " "intellectual content of a project." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:448 msgid "" "In a more complex game with larger assets, it can be a better idea to keep " "the player somewhere else in the SceneTree entirely. This results in:" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:451 msgid "More consistency." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:452 msgid "No \"special cases\" that must be documented and maintained somewhere." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:453 msgid "" "No opportunity for errors to occur because these details are not accounted " "for." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:456 msgid "" "In contrast, if you ever need a child node that does *not* inherit the " "transform of its parent, you have the following options:" msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:459 msgid "" "The **declarative** solution: place a :ref:`Node ` in between " "them. Since it doesn't have a transform, they won't pass this information to " "its children." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:462 msgid "" "The **imperative** solution: Use the ``top_level`` property for " "the :ref:`CanvasItem ` or :ref:`Node3D " "` node. This will make the node ignore its " "inherited transform." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:469 msgid "" "If building a networked game, keep in mind which nodes and gameplay systems " "are relevant to all players versus those just pertinent to the authoritative " "server. For example, users do not all need to have a copy of every players' " "\"PlayerController\" logic - they only need their own. Keeping them in a " "separate branch from the \"world\" can help simplify the management of game " "connections and the like." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:476 msgid "" "The key to scene organization is to consider the SceneTree in relational " "terms rather than spatial terms. Are the nodes dependent on their parent's " "existence? If not, then they can thrive all by themselves somewhere else. If " "they are dependent, then it stands to reason that they should be children of " "that parent (and likely part of that parent's scene if they aren't already)." msgstr "" #: ../../docs/tutorials/best_practices/scene_organization.rst:482 msgid "" "Does this mean nodes themselves are components? Not at all. Godot's node " "trees form an aggregation relationship, not one of composition. But while " "you still have the flexibility to move nodes around, it is still best when " "such moves are unnecessary by default." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:4 msgid "When to use scenes versus scripts" msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:6 msgid "" "We've already covered how scenes and scripts are different. Scripts define " "an engine class extension with imperative code, scenes with declarative code." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:10 msgid "" "Each system's capabilities are different as a result. Scenes can define how " "an extended class initializes, but not what its behavior actually is. Scenes " "are often used in conjunction with a script, the scene declaring a " "composition of nodes, and the script adding behavior with imperative code." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:16 msgid "Anonymous types" msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:18 msgid "" "It *is* possible to completely define a scenes' contents using a script " "alone. This is, in essence, what the Godot Editor does, only in the C++ " "constructor of its objects." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:22 msgid "" "But, choosing which one to use can be a dilemma. Creating script instances " "is identical to creating in-engine classes whereas handling scenes requires " "a change in API:" msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:62 msgid "" "Also, scripts will operate a little slower than scenes due to the speed " "differences between engine and script code. The larger and more complex the " "node, the more reason there is to build it as a scene." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:67 msgid "Named types" msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:69 msgid "" "Scripts can be registered as a new type within the editor itself. This " "displays it as a new type in the node or resource creation dialog with an " "optional icon. This way, the user's ability to use the script is much more " "streamlined. Rather than having to..." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:74 msgid "Know the base type of the script they would like to use." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:76 msgid "Create an instance of that base type." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:78 msgid "Add the script to the node." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:80 msgid "" "With a registered script, the scripted type instead becomes a creation " "option like the other nodes and resources in the system. The creation dialog " "even has a search bar to look up the type by name." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:85 msgid "There are two systems for registering types:" msgstr "Chúng ta có hai cách làm dưới đây:" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:87 msgid ":ref:`Custom Types `" msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:89 msgid "Editor-only. Typenames are not accessible at runtime." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:91 msgid "Does not support inherited custom types." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:93 msgid "An initializer tool. Creates the node with the script. Nothing more." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:95 msgid "" "Editor has no type-awareness of the script or its relationship to other " "engine types or scripts." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:98 #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:116 msgid "Allows users to define an icon." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:100 msgid "" "Works for all scripting languages because it deals with Script resources in " "abstract." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:102 msgid "" "Set up using :ref:`EditorPlugin.add_custom_type " "`." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:104 msgid ":ref:`Script Classes `" msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:106 msgid "Editor and runtime accessible." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:108 msgid "Displays inheritance relationships in full." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:110 msgid "" "Creates the node with the script, but can also change types or extend the " "type from the editor." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:113 msgid "" "Editor is aware of inheritance relationships between scripts, script " "classes, and engine C++ classes." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:118 msgid "" "Engine developers must add support for languages manually (both name " "exposure and runtime accessibility)." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:121 msgid "" "The Editor scans project folders and registers any exposed names for all " "scripting languages. Each scripting language must implement its own support " "for exposing this information." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:125 msgid "" "Both methodologies add names to the creation dialog, but script classes, in " "particular, also allow for users to access the typename without loading the " "script resource. Creating instances and accessing constants or static " "methods is viable from anywhere." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:130 msgid "" "With features like these, one may wish their type to be a script without a " "scene due to the ease of use it grants users. Those developing plugins or " "creating in-house tools for designers to use will find an easier time of " "things this way." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:135 msgid "" "On the downside, it also means having to use largely imperative programming." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:138 msgid "Performance of Script vs PackedScene" msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:140 msgid "" "One last aspect to consider when choosing scenes and scripts is execution " "speed." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:142 msgid "" "As the size of objects increases, the scripts' necessary size to create and " "initialize them grows much larger. Creating node hierarchies demonstrates " "this. Each Node's logic could be several hundred lines of code in length." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:146 msgid "" "The code example below creates a new ``Node``, changes its name, assigns a " "script to it, sets its future parent as its owner so it gets saved to disk " "along with it, and finally adds it as a child of the ``Main`` node:" msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:185 msgid "" "Script code like this is much slower than engine-side C++ code. Each " "instruction makes a call to the scripting API which leads to many " "\"lookups\" on the back-end to find the logic to execute." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:189 msgid "" "Scenes help to avoid this performance issue. :ref:`PackedScene " "`, the base type that scenes inherit from, defines " "resources that use serialized data to create objects. The engine can process " "scenes in batches on the back-end and provide much better performance than " "scripts." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:195 #: ../../docs/tutorials/scripting/gdextension/gdextension_c_example.rst:2144 #: ../../docs/tutorials/shaders/your_first_shader/your_first_2d_shader.rst:256 msgid "Conclusion" msgstr "Kết luận" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:197 msgid "In the end, the best approach is to consider the following:" msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:199 msgid "" "If one wishes to create a basic tool that is going to be re-used in several " "different projects and which people of all skill levels will likely use " "(including those who don't label themselves as \"programmers\"), then " "chances are that it should probably be a script, likely one with a custom " "name/icon." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:204 msgid "" "If one wishes to create a concept that is particular to their game, then it " "should always be a scene. Scenes are easier to track/edit and provide more " "security than scripts." msgstr "" #: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:208 msgid "" "If one would like to give a name to a scene, then they can still sort of do " "this by declaring a script class and giving it a scene as a constant. The " "script becomes, in effect, a namespace:" msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:4 msgid "Autoloads versus regular nodes" msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:6 msgid "" "Godot offers a feature to automatically load nodes at the root of your " "project, allowing you to access them globally, that can fulfill the role of " "a Singleton: :ref:`doc_singletons_autoload`. These autoloaded nodes are not " "freed when you change the scene from code " "with :ref:`SceneTree.change_scene_to_file " "`." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:11 msgid "" "In this guide, you will learn when to use the Autoload feature, and " "techniques you can use to avoid it." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:15 msgid "The cutting audio issue" msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:17 msgid "" "Other engines can encourage the use of creating manager classes, singletons " "that organize a lot of functionality into a globally accessible object. " "Godot offers many ways to avoid global state thanks to the node tree and " "signals." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:21 msgid "" "For example, let's say we are building a platformer and want to collect " "coins that play a sound effect. There's a node for that: " "the :ref:`AudioStreamPlayer `. But if we call the " "``AudioStreamPlayer`` while it is already playing a sound, the new sound " "interrupts the first." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:26 msgid "" "A solution is to code a global, autoloaded sound manager class. It generates " "a pool of ``AudioStreamPlayer`` nodes that cycle through as each new request " "for sound effects comes in. Say we call that class ``Sound``, you can use it " "from anywhere in your project by calling " "``Sound.play(\"coin_pickup.ogg\")``. This solves the problem in the short " "term but causes more problems:" msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:32 msgid "" "**Global state**: one object is now responsible for all objects' data. If " "the ``Sound`` class has errors or doesn't have an AudioStreamPlayer " "available, all the nodes calling it can break." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:36 msgid "" "**Global access**: now that any object can call ``Sound.play(sound_path)`` " "from anywhere, there's no longer an easy way to find the source of a bug." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:39 msgid "" "**Global resource allocation**: with a pool of ``AudioStreamPlayer`` nodes " "stored from the start, you can either have too few and face bugs, or too " "many and use more memory than you need." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:45 msgid "" "About global access, the problem is that any code anywhere could pass wrong " "data to the ``Sound`` autoload in our example. As a result, the domain to " "explore to fix the bug spans the entire project." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:49 msgid "" "When you keep code inside a scene, only one or two scripts may be involved " "in audio." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:52 msgid "" "Contrast this with each scene keeping as many ``AudioStreamPlayer`` nodes as " "it needs within itself and all these problems go away:" msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:55 msgid "" "Each scene manages its own state information. If there is a problem with the " "data, it will only cause issues in that one scene." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:58 msgid "" "Each scene accesses only its own nodes. Now, if there is a bug, it's easy to " "find which node is at fault." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:61 msgid "Each scene allocates exactly the amount of resources it needs." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:64 msgid "Managing shared functionality or data" msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:66 msgid "" "Another reason to use an Autoload can be that you want to reuse the same " "method or data across many scenes." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:69 msgid "" "In the case of functions, you can create a new type of ``Node`` that " "provides that feature for an individual scene using the :ref:`class_name " "` keyword in GDScript." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:73 msgid "When it comes to data, you can either:" msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:75 msgid "" "Create a new type of :ref:`Resource ` to share the data." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:77 msgid "" "Store the data in an object to which each node has access, for example using " "the ``owner`` property to access the scene's root node." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:81 msgid "When you should use an Autoload" msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:83 msgid "" "GDScript supports the creation of ``static`` functions using ``static " "func``. When combined with ``class_name``, this makes it possible to create " "libraries of helper functions without having to create an instance to call " "them. The limitation of static functions is that they can't reference member " "variables, non-static functions or ``self``." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:89 msgid "" "Since Godot 4.1, GDScript also supports ``static`` variables using ``static " "var``. This means you can now share variables across instances of a class " "without having to create a separate autoload." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:93 msgid "" "Still, autoloaded nodes can simplify your code for systems with a wide " "scope. If the autoload is managing its own information and not invading the " "data of other objects, then it's a great way to create systems that handle " "broad-scoped tasks. For example, a quest or a dialogue system." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:100 msgid "" "An autoload is *not* necessarily a singleton. Nothing prevents you from " "instantiating copies of an autoloaded node. An autoload is only a tool that " "makes a node load automatically as a child of the root of your scene tree, " "regardless of your game's node structure or which scene you run, e.g. by " "pressing the :kbd:`F6` key." msgstr "" #: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:106 msgid "" "As a result, you can get the autoloaded node, for example an autoload called " "``Sound``, by calling ``get_node(\"/root/Sound\")``." msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:4 msgid "When and how to avoid using nodes for everything" msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:6 msgid "" "Nodes are cheap to produce, but even they have their limits. A project may " "have tens of thousands of nodes all doing things. The more complex their " "behavior though, the larger the strain each one adds to a project's " "performance." msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:11 msgid "" "Godot provides more lightweight objects for creating APIs which nodes use. " "Be sure to keep these in mind as options when designing how you wish to " "build your project's features." msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:15 msgid "" ":ref:`Object `: The ultimate lightweight object, the original " "Object must use manual memory management. With that said, it isn't too " "difficult to create one's own custom data structures, even node structures, " "that are also lighter than the :ref:`Node ` class." msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:20 msgid "" "**Example:** See the :ref:`Tree ` node. It supports a high level " "of customization for a table of content with an arbitrary number of rows and " "columns. The data that it uses to generate its visualization though is " "actually a tree of :ref:`TreeItem ` Objects." msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:25 msgid "" "**Advantages:** Simplifying one's API to smaller scoped objects helps " "improve its accessibility and improve iteration time. Rather than working " "with the entire Node library, one creates an abbreviated set of Objects from " "which a node can generate and manage the appropriate sub-nodes." msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:32 msgid "" "One should be careful when handling them. One can store an Object into a " "variable, but these references can become invalid without warning. For " "example, if the object's creator decides to delete it out of nowhere, this " "would trigger an error state when one next accesses it." msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:37 msgid "" ":ref:`RefCounted `: Only a little more complex than " "Object. They track references to themselves, only deleting loaded memory " "when no further references to themselves exist. These are useful in the " "majority of cases where one needs data in a custom class." msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:42 msgid "" "**Example:** See the :ref:`FileAccess ` object. It " "functions just like a regular Object except that one need not delete it " "themselves." msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:45 msgid "**Advantages:** same as the Object." msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:47 msgid "" ":ref:`Resource `: Only slightly more complex than " "RefCounted. They have the innate ability to serialize/deserialize (i.e. save " "and load) their object properties to/from Godot resource files." msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:51 msgid "" "**Example:** Scripts, PackedScene (for scene files), and other types like " "each of the :ref:`AudioEffect ` classes. Each of these " "can be saved and loaded, therefore they extend from Resource." msgstr "" #: ../../docs/tutorials/best_practices/node_alternatives.rst:55 msgid "" "**Advantages:** Much has :ref:`already been said ` " "on :ref:`Resource `'s advantages over traditional data " "storage methods. In the context of using Resources over Nodes though, their " "main advantage is in Inspector-compatibility. While nearly as lightweight as " "Object/RefCounted, they can still display and export properties in the " "Inspector. This allows them to fulfill a purpose much like sub-Nodes on the " "usability front, but also improve performance if one plans to have many such " "Resources/Nodes in their scenes." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:4 msgid "Godot interfaces" msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:6 msgid "" "Often one needs scripts that rely on other objects for features. There are 2 " "parts to this process:" msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:9 msgid "Acquiring a reference to the object that presumably has the features." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:11 msgid "Accessing the data or logic from the object." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:13 msgid "The rest of this tutorial outlines the various ways of doing all this." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:16 msgid "Acquiring object references" msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:18 msgid "" "For all :ref:`Object `\\s, the most basic way of referencing " "them is to get a reference to an existing object from another acquired " "instance." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:32 msgid "" "The same principle applies for :ref:`RefCounted ` objects. " "While users often access :ref:`Node ` and :ref:`Resource " "` this way, alternative measures are available." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:36 msgid "" "Instead of property or method access, one can get Resources by load access." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:121 msgid "Note the following:" msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:123 msgid "There are many ways in which a language can load such resources." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:125 msgid "" "When designing how objects will access data, don't forget that one can pass " "resources around as references as well." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:128 msgid "" "Keep in mind that loading a resource fetches the cached resource instance " "maintained by the engine. To get a new object, one must :ref:`duplicate " "` an existing reference or instantiate one " "from scratch with ``new()``." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:133 msgid "Nodes likewise have an alternative access point: the SceneTree." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:267 msgid "Accessing data or logic from an object" msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:269 msgid "" "Godot's scripting API is duck-typed. This means that if a script executes an " "operation, Godot doesn't validate that it supports the operation by " "**type**. It instead checks that the object **implements** the individual " "method." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:273 msgid "" "For example, the :ref:`CanvasItem ` class has a " "``visible`` property. All properties exposed to the scripting API are in " "fact a setter and getter pair bound to a name. If one tried to " "access :ref:`CanvasItem.visible `, then " "Godot would do the following checks, in order:" msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:279 msgid "" "If the object has a script attached, it will attempt to set the property " "through the script. This leaves open the opportunity for scripts to override " "a property defined on a base object by overriding the setter method for the " "property." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:284 msgid "" "If the script does not have the property, it performs a HashMap lookup in " "the ClassDB for the \"visible\" property against the CanvasItem class and " "all of its inherited types. If found, it will call the bound setter or " "getter. For more information about HashMaps, see the :ref:`data preferences " "` docs." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:290 msgid "" "If not found, it does an explicit check to see if the user wants to access " "the \"script\" or \"meta\" properties." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:293 msgid "" "If not, it checks for a ``_set``/``_get`` implementation (depending on type " "of access) in the CanvasItem and its inherited types. These methods can " "execute logic that gives the impression that the Object has a property. This " "is also the case with the ``_get_property_list`` method." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:298 msgid "" "Note that this happens even for non-legal symbol names, such as names " "starting with a digit or containing a slash." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:301 msgid "" "As a result, this duck-typed system can locate a property either in the " "script, the object's class, or any class that object inherits, but only for " "things which extend Object." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:305 msgid "" "Godot provides a variety of options for performing runtime checks on these " "accesses:" msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:308 msgid "" "A duck-typed property access. These will be property checks (as described " "above). If the operation isn't supported by the object, execution will halt." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:336 msgid "" "A method check. In the case of :ref:`CanvasItem.visible " "`, one can access the methods, " "``set_visible`` and ``is_visible`` like any other method." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:474 msgid "" "Outsource the access to a :ref:`Callable `. These may be " "useful in cases where one needs the max level of freedom from dependencies. " "In this case, one relies on an external context to setup the method." msgstr "" #: ../../docs/tutorials/best_practices/godot_interfaces.rst:536 msgid "" "These strategies contribute to Godot's flexible design. Between them, users " "have a breadth of tools to meet their specific needs." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:4 msgid "Godot notifications" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:6 msgid "" "Every Object in Godot implements a :ref:`_notification " "` method. Its purpose is to allow " "the Object to respond to a variety of engine-level callbacks that may relate " "to it. For example, if the engine tells a :ref:`CanvasItem " "` to \"draw\", it will call " "``_notification(NOTIFICATION_DRAW)``." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:13 msgid "" "Some of these notifications, like draw, are useful to override in scripts. " "So much so that Godot exposes many of them with dedicated functions:" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:16 msgid "``_ready()``: ``NOTIFICATION_READY``" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:18 msgid "``_enter_tree()``: ``NOTIFICATION_ENTER_TREE``" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:20 msgid "``_exit_tree()``: ``NOTIFICATION_EXIT_TREE``" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:22 msgid "``_process(delta)``: ``NOTIFICATION_PROCESS``" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:24 msgid "``_physics_process(delta)``: ``NOTIFICATION_PHYSICS_PROCESS``" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:26 msgid "``_draw()``: ``NOTIFICATION_DRAW``" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:28 msgid "" "What users might *not* realize is that notifications exist for types other " "than Node alone, for example:" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:31 msgid "" ":ref:`Object::NOTIFICATION_POSTINITIALIZE " "`: a callback that " "triggers during object initialization. Not accessible to scripts." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:34 msgid "" ":ref:`Object::NOTIFICATION_PREDELETE " "`: a callback that triggers " "before the engine deletes an Object, i.e. a \"destructor\"." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:38 msgid "" "And many of the callbacks that *do* exist in Nodes don't have any dedicated " "methods, but are still quite useful." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:41 msgid "" ":ref:`Node::NOTIFICATION_PARENTED " "`: a callback that triggers " "anytime one adds a child node to another node." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:44 msgid "" ":ref:`Node::NOTIFICATION_UNPARENTED " "`: a callback that triggers " "anytime one removes a child node from another node." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:48 msgid "" "One can access all these custom notifications from the universal " "``_notification()`` method." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:52 msgid "" "Methods in the documentation labeled as \"virtual\" are also intended to be " "overridden by scripts." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:55 msgid "" "A classic example is the :ref:`_init ` " "method in Object. While it has no ``NOTIFICATION_*`` equivalent, the engine " "still calls the method. Most languages (except C#) rely on it as a " "constructor." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:60 msgid "" "So, in which situation should one use each of these notifications or virtual " "functions?" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:64 msgid "_process vs. _physics_process vs. \\*_input" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:66 msgid "" "Use ``_process()`` when one needs a framerate-dependent delta time between " "frames. If code that updates object data needs to update as often as " "possible, this is the right place. Recurring logic checks and data caching " "often execute here, but it comes down to the frequency at which one needs " "the evaluations to update. If they don't need to execute every frame, then " "implementing a Timer-timeout loop is another option." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:128 msgid "" "Use ``_physics_process()`` when one needs a framerate-independent delta time " "between frames. If code needs consistent updates over time, regardless of " "how fast or slow time advances, this is the right place. Recurring kinematic " "and object transform operations should execute here." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:133 msgid "" "While it is possible, to achieve the best performance, one should avoid " "making input checks during these callbacks. ``_process()`` and " "``_physics_process()`` will trigger at every opportunity (they do not " "\"rest\" by default). In contrast, ``*_input()`` callbacks will trigger only " "on frames in which the engine has actually detected the input." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:139 msgid "" "One can check for input actions within the input callbacks just the same. If " "one wants to use delta time, one can fetch it from the related delta time " "methods as needed." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:215 msgid "_init vs. initialization vs. export" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:217 msgid "" "If the script initializes its own node subtree, without a scene, that code " "should execute in ``_init()``. Other property or SceneTree-independent " "initializations should also run here." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:222 msgid "The C# equivalent to GDScript's ``_init()`` method is the constructor." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:224 msgid "" "``_init()`` triggers before ``_enter_tree()`` or ``_ready()``, but after a " "script creates and initializes its properties. When instantiating a scene, " "property values will set up according to the following sequence:" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:228 msgid "" "**Initial value assignment:** the property is assigned its initialization " "value, or its default value if one is not specified. If a setter exists, it " "is not used." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:231 msgid "" "``_init()`` **assignment:** the property's value is replaced by any " "assignments made in ``_init()``, triggering the setter." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:234 msgid "" "**Exported value assignment:** an exported property's value is again " "replaced by any value set in the Inspector, triggering the setter." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:306 msgid "" "As a result, instantiating a script versus a scene may affect both the " "initialization *and* the number of times the engine calls the setter." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:310 msgid "_ready vs. _enter_tree vs. NOTIFICATION_PARENTED" msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:312 msgid "" "When instantiating a scene connected to the first executed scene, Godot will " "instantiate nodes down the tree (making ``_init()`` calls) and build the " "tree going downwards from the root. This causes ``_enter_tree()`` calls to " "cascade down the tree. Once the tree is complete, leaf nodes call " "``_ready``. A node will call this method once all child nodes have finished " "calling theirs. This then causes a reverse cascade going up back to the " "tree's root." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:319 msgid "" "When instantiating a script or a standalone scene, nodes are not added to " "the SceneTree upon creation, so no ``_enter_tree()`` callbacks trigger. " "Instead, only the ``_init()`` call occurs. When the scene is added to the " "SceneTree, the ``_enter_tree()`` and ``_ready()`` calls occur." msgstr "" #: ../../docs/tutorials/best_practices/godot_notifications.rst:324 msgid "" "If one needs to trigger behavior that occurs as nodes parent to another, " "regardless of whether it occurs as part of the main/active scene or not, one " "can use the :ref:`PARENTED ` " "notification. For example, here is a snippet that connects a node's method " "to a custom signal on the parent node without failing. Useful on data-" "centric nodes that one might create at runtime." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:6 msgid "Data preferences" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:8 msgid "" "Ever wondered whether one should approach problem X with data structure Y or " "Z? This article covers a variety of topics related to these dilemmas." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:13 msgid "" "This article makes references to \"[something]-time\" operations. This " "terminology comes from algorithm analysis' `Big O Notation `_." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:17 msgid "" "Long-story short, it describes the worst-case scenario of runtime length. In " "laymen's terms:" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:20 msgid "" "\"As the size of a problem domain increases, the runtime length of the " "algorithm...\"" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:23 msgid "Constant-time, ``O(1)``: \"...does not increase.\"" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:24 msgid "Logarithmic-time, ``O(log n)``: \"...increases at a slow rate.\"" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:25 msgid "Linear-time, ``O(n)``: \"...increases at the same rate.\"" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:26 msgid "Etc." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:28 msgid "" "Imagine if one had to process 3 million data points within a single frame. " "It would be impossible to craft the feature with a linear-time algorithm " "since the sheer size of the data would increase the runtime far beyond the " "time allotted. In comparison, using a constant-time algorithm could handle " "the operation without issue." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:34 msgid "" "By and large, developers want to avoid engaging in linear-time operations as " "much as possible. But, if one keeps the scale of a linear-time operation " "small, and if one does not need to perform the operation often, then it may " "be acceptable. Balancing these requirements and choosing the right " "algorithm / data structure for the job is part of what makes programmers' " "skills valuable." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:42 msgid "Array vs. Dictionary vs. Object" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:44 msgid "" "Godot stores all variables in the scripting API in the :ref:`Variant " "` class. Variants can store Variant-compatible data " "structures such as :ref:`Array ` and :ref:`Dictionary " "` as well as :ref:`Objects `." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:50 msgid "" "Godot implements Array as a ``Vector``. The engine stores the Array " "contents in a contiguous section of memory, i.e. they are in a row adjacent " "to each other." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:56 msgid "" "For those unfamiliar with C++, a Vector is the name of the array object in " "traditional C++ libraries. It is a \"templated\" type, meaning that its " "records can only contain a particular type (denoted by angled brackets). So, " "for example, a :ref:`PackedStringArray ` would be " "something like a ``Vector``." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:63 msgid "Contiguous memory stores imply the following operation performance:" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:65 msgid "**Iterate:** Fastest. Great for loops." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:67 msgid "Op: All it does is increment a counter to get to the next record." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:69 msgid "**Insert, Erase, Move:** Position-dependent. Generally slow." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:71 msgid "" "Op: Adding/removing/moving content involves moving the adjacent records over " "(to make room / fill space)." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:74 msgid "Fast add/remove *from the end*." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:76 msgid "Slow add/remove *from an arbitrary position*." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:78 msgid "Slowest add/remove *from the front*." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:80 msgid "If doing many inserts/removals *from the front*, then..." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:82 msgid "invert the array." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:84 msgid "do a loop which executes the Array changes *at the end*." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:86 msgid "re-invert the array." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:88 msgid "" "This makes only 2 copies of the array (still constant time, but slow) versus " "copying roughly 1/2 of the array, on average, N times (linear time)." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:91 msgid "" "**Get, Set:** Fastest *by position*. E.g. can request 0th, 2nd, 10th record, " "etc. but cannot specify which record you want." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:94 msgid "Op: 1 addition operation from array start position up to desired index." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:96 msgid "**Find:** Slowest. Identifies the index/position of a value." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:98 msgid "" "Op: Must iterate through array and compare values until one finds a match." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:100 msgid "" "Performance is also dependent on whether one needs an exhaustive search." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:103 msgid "" "If kept ordered, custom search operations can bring it to logarithmic time " "(relatively fast). Laymen users won't be comfortable with this though. Done " "by re-sorting the Array after every edit and writing an ordered-aware search " "algorithm." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:108 msgid "" "Godot implements Dictionary as a ``HashMap``. The engine stores a small array (initialized " "to 2^3 or 8 records) of key-value pairs. When one attempts to access a " "value, they provide it a key. It then *hashes* the key, i.e. converts it " "into a number. The \"hash\" is used to calculate the index into the array. " "As an array, the HM then has a quick lookup within the \"table\" of keys " "mapped to values. When the HashMap becomes too full, it increases to the " "next power of 2 (so, 16 records, then 32, etc.) and rebuilds the structure." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:116 msgid "" "Hashes are to reduce the chance of a key collision. If one occurs, the table " "must recalculate another index for the value that takes the previous " "position into account. In all, this results in constant-time access to all " "records at the expense of memory and some minor operational efficiency." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:121 msgid "Hashing every key an arbitrary number of times." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:123 msgid "" "Hash operations are constant-time, so even if an algorithm must do more than " "one, as long as the number of hash calculations doesn't become too dependent " "on the density of the table, things will stay fast. Which leads to..." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:128 msgid "Maintaining an ever-growing size for the table." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:130 msgid "" "HashMaps maintain gaps of unused memory interspersed in the table on purpose " "to reduce hash collisions and maintain the speed of accesses. This is why it " "constantly increases in size exponentially by powers of 2." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:135 msgid "" "As one might be able to tell, Dictionaries specialize in tasks that Arrays " "do not. An overview of their operational details is as follows:" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:138 msgid "**Iterate:** Fast." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:140 msgid "" "Op: Iterate over the map's internal vector of hashes. Return each key. " "Afterwards, users then use the key to jump to and return the desired value." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:144 msgid "**Insert, Erase, Move:** Fastest." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:146 msgid "" "Op: Hash the given key. Do 1 addition operation to look up the appropriate " "value (array start + offset). Move is two of these (one insert, one erase). " "The map must do some maintenance to preserve its capabilities:" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:151 msgid "update ordered List of records." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:153 msgid "determine if table density mandates a need to expand table capacity." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:155 msgid "" "The Dictionary remembers in what order users inserted its keys. This enables " "it to execute reliable iterations." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:158 msgid "**Get, Set:** Fastest. Same as a lookup *by key*." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:160 msgid "Op: Same as insert/erase/move." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:162 msgid "**Find:** Slowest. Identifies the key of a value." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:164 msgid "" "Op: Must iterate through records and compare the value until a match is " "found." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:167 msgid "" "Note that Godot does not provide this feature out-of-the-box (because they " "aren't meant for this task)." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:170 msgid "" "Godot implements Objects as stupid, but dynamic containers of data content. " "Objects query data sources when posed questions. For example, to answer the " "question, \"do you have a property called, 'position'?\", it might ask " "its :ref:`script ` or the :ref:`ClassDB `. One " "can find more information about what objects are and how they work in " "the :ref:`doc_what_are_godot_classes` article." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:177 msgid "" "The important detail here is the complexity of the Object's task. Every time " "it performs one of these multi-source queries, it runs through *several* " "iteration loops and HashMap lookups. What's more, the queries are linear-" "time operations dependent on the Object's inheritance hierarchy size. If the " "class the Object queries (its current class) doesn't find anything, the " "request defers to the next base class, all the way up until the original " "Object class. While these are each fast operations in isolation, the fact " "that it must make so many checks is what makes them slower than both of the " "alternatives for looking up data." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:189 msgid "" "When developers mention how slow the scripting API is, it is this chain of " "queries they refer to. Compared to compiled C++ code where the application " "knows exactly where to go to find anything, it is inevitable that scripting " "API operations will take much longer. They must locate the source of any " "relevant data before they can attempt to access it." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:195 msgid "" "The reason GDScript is slow is because every operation it performs passes " "through this system." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:198 msgid "" "C# can process some content at higher speeds via more optimized bytecode. " "But, if the C# script calls into an engine class' content or if the script " "tries to access something external to it, it will go through this pipeline." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:203 msgid "" "NativeScript C++ goes even further and keeps everything internal by default. " "Calls into external structures will go through the scripting API. In " "NativeScript C++, registering methods to expose them to the scripting API is " "a manual task. It is at this point that external, non-C++ classes will use " "the API to locate them." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:209 msgid "" "So, assuming one extends from Reference to create a data structure, like an " "Array or Dictionary, why choose an Object over the other two options?" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:212 msgid "" "**Control:** With objects comes the ability to create more sophisticated " "structures. One can layer abstractions over the data to ensure the external " "API doesn't change in response to internal data structure changes. What's " "more, Objects can have signals, allowing for reactive behavior." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:217 msgid "" "**Clarity:** Objects are a reliable data source when it comes to the data " "that scripts and engine classes define for them. Properties may not hold the " "values one expects, but one doesn't need to worry about whether the property " "exists in the first place." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:222 msgid "" "**Convenience:** If one already has a similar data structure in mind, then " "extending from an existing class makes the task of building the data " "structure much easier. In comparison, Arrays and Dictionaries don't fulfill " "all use cases one might have." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:227 msgid "" "Objects also give users the opportunity to create even more specialized data " "structures. With it, one can design their own List, Binary Search Tree, " "Heap, Splay Tree, Graph, Disjoint Set, and any host of other options." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:231 msgid "" "\"Why not use Node for tree structures?\" one might ask. Well, the Node " "class contains things that won't be relevant to one's custom data structure. " "As such, it can be helpful to construct one's own node type when building " "tree structures." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:278 msgid "" "From here, one can then create their own structures with specific features, " "limited only by their imagination." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:282 msgid "Enumerations: int vs. string" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:284 msgid "" "Most languages offer an enumeration type option. GDScript is no different, " "but unlike most other languages, it allows one to use either integers or " "strings for the enum values (the latter only when using the ``@export_enum`` " "annotation in GDScript). The question then arises, \"which should one use?\"" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:289 msgid "" "The short answer is, \"whichever you are more comfortable with.\" This is a " "feature specific to GDScript and not Godot scripting in general; The " "languages prioritizes usability over performance." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:293 msgid "" "On a technical level, integer comparisons (constant-time) will happen faster " "than string comparisons (linear-time). If one wants to keep up other " "languages' conventions though, then one should use integers." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:297 msgid "" "The primary issue with using integers comes up when one wants to *print* an " "enum value. As integers, attempting to print ``MY_ENUM`` will print ``5`` or " "what-have-you, rather than something like ``\"MyEnum\"``. To print an " "integer enum, one would have to write a Dictionary that maps the " "corresponding string value for each enum." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:303 msgid "" "If the primary purpose of using an enum is for printing values and one " "wishes to group them together as related concepts, then it makes sense to " "use them as strings. That way, a separate data structure to execute on the " "printing is unnecessary." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:309 msgid "" "AnimatedTexture vs. AnimatedSprite2D vs. AnimationPlayer vs. AnimationTree" msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:311 msgid "" "Under what circumstances should one use each of Godot's animation classes? " "The answer may not be immediately clear to new Godot users." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:314 msgid "" ":ref:`AnimatedTexture ` is a texture that the engine " "draws as an animated loop rather than a static image. Users can manipulate..." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:318 msgid "the rate at which it moves across each section of the texture (FPS)." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:320 msgid "the number of regions contained within the texture (frames)." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:322 msgid "" "Godot's :ref:`RenderingServer ` then draws the " "regions in sequence at the prescribed rate. The good news is that this " "involves no extra logic on the part of the engine. The bad news is that " "users have very little control." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:327 msgid "" "Also note that AnimatedTexture is a :ref:`Resource ` unlike " "the other :ref:`Node ` objects discussed here. One might create " "a :ref:`Sprite2D ` node that uses AnimatedTexture as its " "texture. Or (something the others can't do) one could add AnimatedTextures " "as tiles in a :ref:`TileSet ` and integrate it with " "a :ref:`TileMapLayer ` for many auto-animating " "backgrounds that all render in a single batched draw call." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:335 msgid "" "The :ref:`AnimatedSprite2D ` node, in combination " "with the :ref:`SpriteFrames ` resource, allows one to " "create a variety of animation sequences through spritesheets, flip between " "animations, and control their speed, regional offset, and orientation. This " "makes them well-suited to controlling 2D frame-based animations." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:341 msgid "" "If one needs to trigger other effects in relation to animation changes (for " "example, create particle effects, call functions, or manipulate other " "peripheral elements besides the frame-based animation), then one will need " "to use an :ref:`AnimationPlayer ` node in conjunction " "with the AnimatedSprite2D." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:347 msgid "" "AnimationPlayers are also the tool one will need to use if they wish to " "design more complex 2D animation systems, such as..." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:350 msgid "**Cut-out animations:** editing sprites' transforms at runtime." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:352 msgid "" "**2D Mesh animations:** defining a region for the sprite's texture and " "rigging a skeleton to it. Then one animates the bones which stretch and bend " "the texture in proportion to the bones' relationships to each other." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:357 msgid "A mix of the above." msgstr "" #: ../../docs/tutorials/best_practices/data_preferences.rst:359 msgid "" "While one needs an AnimationPlayer to design each of the individual " "animation sequences for a game, it can also be useful to combine animations " "for blending, i.e. enabling smooth transitions between these animations. " "There may also be a hierarchical structure between animations that one plans " "out for their object. These are the cases where the :ref:`AnimationTree " "` shines. One can find an in-depth guide on using the " "AnimationTree :ref:`here `." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:4 msgid "Logic preferences" msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:6 msgid "" "Ever wondered whether one should approach problem X with strategy Y or Z? " "This article covers a variety of topics related to these dilemmas." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:10 msgid "Adding nodes and changing properties: which first?" msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:12 msgid "" "When initializing nodes from a script at runtime, you may need to change " "properties such as the node's name or position. A common dilemma is, when " "should you change those values?" msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:16 msgid "" "It is the best practice to change values on a node before adding it to the " "scene tree. Some property's setters have code to update other corresponding " "values, and that code can be slow! For most cases, this code has no impact " "on your game's performance, but in heavy use cases such as procedural " "generation, it can bring your game to a crawl." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:22 msgid "" "For these reasons, it is usually best practice to set the initial values of " "a node before adding it to the scene tree. There are some exceptions where " "values *can't* be set before being added to the scene tree, like setting " "global position." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:28 msgid "Loading vs. preloading" msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:30 msgid "" "In GDScript, there exists the global :ref:`preload " "` method. It loads resources as early as " "possible to front-load the \"loading\" operations and avoid loading " "resources while in the middle of performance-sensitive code." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:35 msgid "" "Its counterpart, the :ref:`load ` method, loads " "a resource only when it reaches the load statement. That is, it will load a " "resource in-place which can cause slowdowns when it occurs in the middle of " "sensitive processes. The ``load()`` function is also an alias " "for :ref:`ResourceLoader.load(path) ` " "which is accessible to *all* scripting languages." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:42 msgid "" "So, when exactly does preloading occur versus loading, and when should one " "use either? Let's see an example:" msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:122 msgid "" "Preloading allows the script to handle all the loading the moment one loads " "the script. Preloading is useful, but there are also times when one doesn't " "wish to use it. Here are a few considerations when determining which to use:" msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:126 msgid "" "If one cannot determine when the script might load, then preloading a " "resource (especially a scene or script) could result in additional loads one " "does not expect. This could lead to unintentional, variable-length load " "times on top of the original script's load operations." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:131 msgid "" "If something else could replace the value (like a scene's exported " "initialization), then preloading the value has no meaning. This point isn't " "a significant factor if one intends to always create the script on its own." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:135 msgid "" "If one wishes only to 'import' another class resource (script or scene), " "then using a preloaded constant is often the best course of action. However, " "in exceptional cases, one may wish not to do this:" msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:139 msgid "" "If the 'imported' class is liable to change, then it should be a property " "instead, initialized either using an ``@export`` or a ``load()`` (and " "perhaps not even initialized until later)." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:143 msgid "" "If the script requires a great many dependencies, and one does not wish to " "consume so much memory, then one may wish to load and unload various " "dependencies at runtime as circumstances change. If one preloads resources " "into constants, then the only way to unload these resources would be to " "unload the entire script. If they are instead loaded as properties, then one " "can set these properties to ``null`` and remove all references to the " "resource (which, as a :ref:`RefCounted `-extending type, " "will cause the resources to delete themselves from memory)." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:154 msgid "Large levels: static vs. dynamic" msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:156 msgid "" "If one is creating a large level, which circumstances are most appropriate? " "Is it better to create the level as one static space? Or is it better to " "load the level in pieces and shift the world's content as needed?" msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:160 msgid "" "Well, the simple answer is, \"when the performance requires it.\" The " "dilemma associated with the two options is one of the age-old programming " "choices: does one optimize memory over speed, or vice versa?" msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:164 msgid "" "The naive answer is to use a static level that loads everything at once. " "But, depending on the project, this could consume a large amount of memory. " "Wasting users' RAM leads to programs running slow or outright crashing from " "everything else the computer tries to do at the same time." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:169 msgid "" "No matter what, one should break larger scenes into smaller ones (to aid in " "reusability of assets). Developers can then design a node that manages the " "creation/loading and deletion/unloading of resources and nodes in real-time. " "Games with large and varied environments or procedurally generated elements " "often implement these strategies to avoid wasting memory." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:175 msgid "" "On the flip side, coding a dynamic system is more complex; it uses more " "programmed logic which results in opportunities for errors and bugs. If one " "isn't careful, they can develop a system that bloats the technical debt of " "the application." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:180 msgid "As such, the best options would be..." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:182 msgid "Use static levels for smaller games." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:184 msgid "" "If one has the time/resources on a medium/large game, create a library or " "plugin that can manage nodes and resources with code. If refined over time " "so as to improve usability and stability, then it could evolve into a " "reliable tool across projects." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:189 msgid "" "Use dynamic logic for a medium/large game because one has the coding skills, " "but not the time or resources to refine the code (game's gotta get done). " "Could potentially refactor later to outsource the code into a plugin." msgstr "" #: ../../docs/tutorials/best_practices/logic_preferences.rst:194 msgid "" "For an example of the various ways one can swap scenes around at runtime, " "please see the :ref:`\"Change scenes manually\" " "` documentation." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:4 msgid "Project organization" msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:9 msgid "" "Since Godot has no restrictions on project structure or filesystem usage, " "organizing files when learning the engine can seem challenging. This " "tutorial suggests a workflow which should be a good starting point. We will " "also cover using version control with Godot." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:15 msgid "Organization" msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:17 msgid "" "Godot is scene-based in nature, and uses the filesystem as-is, without " "metadata or an asset database." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:20 msgid "" "Unlike other engines, many resources are contained within the scene itself, " "so the amount of files in the filesystem is considerably lower." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:23 msgid "" "Considering that, the most common approach is to group assets as close to " "scenes as possible; when a project grows, it makes it more maintainable." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:27 msgid "" "As an example, one can usually place into a single folder their basic " "assets, such as sprite images, 3D model meshes, materials, and music, etc. " "They can then use a separate folder to store built levels that use them." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:48 msgid "Style guide" msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:50 msgid "" "For consistency across projects, we recommend following these guidelines:" msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:52 msgid "" "Use **snake_case** for folder and file names (with the exception of C# " "scripts). This sidesteps case sensitivity issues that can crop up after " "exporting a project on Windows. C# scripts are an exception to this rule, as " "the convention is to name them after the class name which should be in " "PascalCase." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:57 msgid "" "Use **PascalCase** for node names, as this matches built-in node casing." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:58 msgid "" "In general, keep third-party resources in a top-level ``addons/`` folder, " "even if they aren't editor plugins. This makes it easier to track which " "files are third-party. There are some exceptions to this rule; for instance, " "if you use third-party game assets for a character, it makes more sense to " "include them within the same folder as the character scenes and scripts." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:65 msgid "Importing" msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:67 msgid "" "Godot versions prior 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/tutorials/best_practices/project_organization.rst:71 msgid "" "Because of this, assets are now transparently imported from within the " "project folder." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:75 msgid "Ignoring specific folders" msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:77 msgid "" "To prevent Godot from importing files contained in a specific folder, create " "an empty file called ``.gdignore`` in the folder (the leading ``.`` is " "required). This can be useful to speed up the initial project importing." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:83 msgid "" "To create a file whose name starts with a dot on Windows, place a dot at " "both the beginning and end of the filename (\".gdignore.\"). Windows will " "automatically remove the trailing dot when you confirm the name." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:87 msgid "" "Alternatively, you can use a text editor such as Notepad++ or use the " "following command in a command prompt: ``type nul > .gdignore``" msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:90 msgid "" "Once the folder is ignored, resources in that folder can't be loaded anymore " "using the ``load()`` and ``preload()`` methods. Ignoring a folder will also " "automatically hide it from the FileSystem dock, which can be useful to " "reduce clutter." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:94 msgid "" "Note that the ``.gdignore`` file's contents are ignored, which is why the " "file should be empty. It does not support patterns like ``.gitignore`` files " "do." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:100 msgid "Case sensitivity" msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:102 msgid "" "Windows and recent macOS versions use case-insensitive filesystems by " "default, whereas Linux distributions use a case-sensitive filesystem by " "default. This can cause issues after exporting a project, since Godot's PCK " "virtual filesystem is case-sensitive. To avoid this, it's recommended to " "stick to ``snake_case`` naming for all files in the project (and lowercase " "characters in general)." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:111 msgid "" "You can break this rule when style guides say otherwise (such as the C# " "style guide). Still, be consistent to avoid mistakes." msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:114 msgid "" "On Windows 10, to further avoid mistakes related to case sensitivity, you " "can also make the project folder case-sensitive. After enabling the Windows " "Subsystem for Linux feature, run the following command in a PowerShell " "window:" msgstr "" #: ../../docs/tutorials/best_practices/project_organization.rst:126 msgid "" "If you haven't enabled the Windows Subsystem for Linux, you can enter the " "following line in a PowerShell window *running as Administrator* then reboot " "when asked:" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:4 msgid "Version control systems" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:9 msgid "" "Godot aims to be VCS-friendly and generate mostly readable and mergeable " "files." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:12 msgid "Version control plugins" msgstr "Android" #: ../../docs/tutorials/best_practices/version_control_systems.rst:14 msgid "" "Godot also supports the use of version control systems in the editor itself. " "However, version control in the editor requires a plugin for the specific " "VCS you're using." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:18 msgid "" "As of October 2025, there is only a Git plugin available, but the community " "may create additional VCS plugins." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:22 msgid "Official Git plugin" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:24 msgid "" "Using Git from inside the editor is supported with an official plugin. You " "can find the latest releases on `GitHub `__." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:28 msgid "" "Documentation on how to use the Git plugin can be found on its `wiki " "`__." msgstr "" "Nếu bạn muốn đóng góp vào phần hướng dẫn, mã nguồn có thể được tìm thấy ở " "`đây `_." #: ../../docs/tutorials/best_practices/version_control_systems.rst:32 msgid "Files to exclude from VCS" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:36 msgid "" "This lists files and folders that should be ignored from version control in " "Godot 4.1 and later." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:39 msgid "" "The list of files of folders that should be ignored from version control in " "Godot 3.x and Godot 4.0 is **entirely** different. This is important, as " "Godot 3.x and 4.0 may store sensitive credentials in ``export_presets.cfg`` " "(unlike Godot 4.1 and later)." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:44 msgid "" "If you are using Godot 3, check the ``3.6`` version of this documentation " "page instead." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:47 msgid "" "There are some files and folders Godot automatically creates when opening a " "project in the editor for the first time. To avoid bloating your version " "control repository with generated data, you should add them to your VCS " "ignore:" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:51 msgid "``.godot/``: This folder stores various project cache data." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:52 msgid "" "``*.translation``: These files are binary imported :ref:`translations " "` generated from CSV files." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:55 msgid "" "You can make the Godot project manager generate version control metadata for " "you automatically when creating a project. When choosing the **Git** option, " "this creates ``.gitignore`` and ``.gitattributes`` files in the project root:" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:59 msgid "" "Creating version control metadata in the project manager's New Project dialog" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:63 msgid "" "Creating version control metadata in the project manager's **New Project** " "dialog" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:65 msgid "" "In existing projects, select the **Project** menu at the top of the editor, " "then choose **Version Control > Generate Version Control Metadata**. This " "creates the same files as if the operation was performed in the project " "manager." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:70 msgid "Working with Git on Windows" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:72 msgid "" "Most Git for Windows clients are configured with the ``core.autocrlf`` set " "to ``true``. This can lead to files unnecessarily being marked as modified " "by Git due to their line endings being converted from LF to CRLF " "automatically." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:76 msgid "It is better to set this option as:" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:82 msgid "" "Creating version control metadata using the project manager or editor will " "automatically enforce LF line endings using the ``.gitattributes`` file. In " "this case, you don't need to change your Git configuration." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:87 msgid "Git LFS" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:89 msgid "" "Git LFS (Large File Storage) is a Git extension that allows you to manage " "large files in your repository. It replaces large files with text pointers " "inside Git, while storing the file contents on a remote server. This is " "useful for managing large assets, such as textures, audio files, and 3D " "models, without bloating your Git repository." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:97 msgid "" "When using Git LFS you will want to ensure it is setup before you commit any " "files to your repository. If you have already committed files to your " "repository, you will need to remove them from the repository and re-add them " "after setting up Git LFS." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:101 msgid "" "It is possible to use ``git lfs migrate`` to convert existing files in your " "repository, but this is more in-depth and requires a good understanding of " "Git." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:104 msgid "" "A common approach is setting up a new repository with Git LFS (and a proper " "``.gitattributes``), then copying the files from the old repository to the " "new one. This way, you can ensure that all files are tracked by LFS from the " "start." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:108 msgid "" "To use Git LFS with Godot, you need to install the Git LFS extension and " "configure it to track the file types you want to manage. You can do this by " "running the following command in your terminal: ::" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:115 msgid "" "This will create a ``.gitattributes`` file in your repository that tells Git " "to use LFS for the specified file types. You can add more file types by " "modifying the ``.gitattributes`` file. For example, to track all GLB files, " "you can do this by running the following command in your terminal: ::" msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:123 msgid "" "When you add or modify files that are tracked by LFS, Git will automatically " "store them in LFS instead of the regular Git history. You can push and pull " "LFS files just like regular Git files, but keep in mind that LFS files are " "stored separately from the rest of your Git history. This means that you may " "need to install Git LFS on any machine that you clone the repository to in " "order to access the LFS files." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:130 msgid "" "Below is an example ``.gitattributes`` file that you can use as a starting " "point for Git LFS. These file types were chosen because they are commonly " "used, but you can modify the list to include any binary types you may have " "in your project." msgstr "" #: ../../docs/tutorials/best_practices/version_control_systems.rst:177 msgid "" "For more information on Git LFS, check the official documentation: https://" "git-lfs.github.com/ and https://docs.github.com/en/repositories/working-with-" "files/managing-large-files." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:4 #: ../../docs/tutorials/3d/particles/collision.rst:170 #: ../../docs/tutorials/3d/occlusion_culling.rst:272 #: ../../docs/tutorials/3d/resolution_scaling.rst:269 #: ../../docs/tutorials/audio/text_to_speech.rst:86 #: ../../docs/tutorials/export/exporting_pcks.rst:156 #: ../../docs/tutorials/export/exporting_for_ios.rst:152 #: ../../docs/tutorials/export/exporting_for_web.rst:459 #: ../../docs/tutorials/export/one-click_deploy.rst:100 #: ../../docs/tutorials/inputs/controllers_gamepads_joysticks.rst:284 #: ../../docs/engine_details/development/compiling/compiling_for_windows.rst:403 #: ../../docs/engine_details/development/compiling/compiling_for_windows.rst:485 #: ../../docs/engine_details/development/compiling/compiling_for_macos.rst:310 #: ../../docs/engine_details/development/compiling/compiling_for_android.rst:249 #: ../../docs/engine_details/development/compiling/compiling_for_ios.rst:96 #: ../../docs/engine_details/development/compiling/compiling_with_script_encryption_key.rst:77 #: ../../docs/engine_details/editor/creating_icons.rst:82 msgid "Troubleshooting" msgstr "Xử lý sự cố" #: ../../docs/tutorials/troubleshooting.rst:6 msgid "" "This page lists common issues encountered when using Godot and possible " "solutions." msgstr "" "Trang này liệt kê các sự cố thường gặp khi sử dụng Godot và các giải pháp " "khả thi." #: ../../docs/tutorials/troubleshooting.rst:10 msgid "" "See :ref:`doc_using_the_web_editor` for caveats specific to the Web version " "of the Godot editor." msgstr "" "Xem :ref:`doc_using_the_web_editor` để biết các lưu ý cụ thể đối với phiên " "bản HTML5 của trình chỉnh sửa Godot." #: ../../docs/tutorials/troubleshooting.rst:14 msgid "" "The editor runs slowly and uses all my CPU and GPU resources, making my " "computer noisy" msgstr "" #: ../../docs/tutorials/troubleshooting.rst:16 msgid "" "This is a known issue, especially on macOS since most Macs have Retina " "displays. Due to Retina displays' higher pixel density, everything has to be " "rendered at a higher resolution. This increases the load on the GPU and " "decreases perceived performance." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:21 msgid "There are several ways to improve performance and battery life:" msgstr "" #: ../../docs/tutorials/troubleshooting.rst:23 msgid "" "In 3D, click the **Perspective** button in the top left corner and enable " "**Half Resolution**. The 3D viewport will now be rendered at half " "resolution, which can be up to 4 times faster." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:26 msgid "" "Open the Editor Settings and increase the value of **Low Processor Mode " "Sleep (µsec)** to ``33000`` (30 FPS). This value determines the amount of " "*microseconds* between frames to render. Higher values will make the editor " "feel less reactive, but will help decrease CPU and GPU usage significantly." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:30 msgid "" "If you have a node that causes the editor to redraw continuously (such as " "particles), hide it and show it using a script in the ``_ready()`` method. " "This way, it will be hidden in the editor, but will still be visible in the " "running project." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:36 msgid "" "The editor stutters and flickers on my variable refresh rate monitor (G-Sync/" "FreeSync)" msgstr "" #: ../../docs/tutorials/troubleshooting.rst:38 msgid "" "This is a `known issue `__. Variable refresh rate monitors need to adjust their gamma curves " "continuously to emit a consistent amount of light over time. This can cause " "flicker to appear in dark areas of the image when the refresh rate varies a " "lot, which occurs as the Godot editor only redraws when necessary." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:44 msgid "There are several workarounds for this:" msgstr "Có một vài lý do cho điều này:" #: ../../docs/tutorials/troubleshooting.rst:46 msgid "" "Enable **Interface > Editor > Update Continuously** in the Editor Settings. " "Keep in mind this will increase power usage and heat/noise emissions since " "the editor will now be rendering constantly, even if nothing has changed on " "screen. To alleviate this, you can increase **Low Processor Mode Sleep " "(µsec)** to ``33000`` (30 FPS) in the Editor Settings. This value determines " "the amount of *microseconds* between frames to render. Higher values will " "make the editor feel less reactive, but will help decrease CPU and GPU usage " "significantly." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:53 msgid "" "Alternatively, disable variable refresh rate on your monitor or in the " "graphics driver." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:54 msgid "" "VRR flicker can be reduced on some displays using the **VRR Control** or " "**Fine Tune Dark Areas** options in your monitor's OSD. These options may " "increase input lag or result in crushed blacks." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:57 msgid "" "If using an OLED display, use the **Black (OLED)** editor theme preset in " "the Editor Settings. This hides VRR flicker thanks to OLED's perfect black " "levels." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:61 msgid "The editor or project takes a very long time to start" msgstr "Trình chỉnh sửa hoặc dự án mất rất nhiều thời gian để bắt đầu." #: ../../docs/tutorials/troubleshooting.rst:63 msgid "" "When using one of the RenderingDevice-based renderers (Forward+ or Mobile), " "the first startup is expected to be relatively long. This is because shaders " "need to be compiled before they can be cached. Shaders also need to be " "cached again after updating Godot, after updating graphics drivers or after " "switching graphics cards." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:69 msgid "" "If the issue persists after the first startup, this is a `known bug `__ on Windows when you have " "specific USB peripherals connected. In particular, Corsair's iCUE software " "seems to cause this bug. Try updating your USB peripherals' drivers to their " "latest version. If the bug persists, you need to disconnect the specific " "peripheral before opening the editor. You can then connect the peripheral " "again." msgstr "" "Đây là `lỗi đã biết `__ " "trên Windows khi bạn kết nối các thiết bị ngoại vi USB. Cụ thể, phần mềm " "iCUE của Corsair dường như gây ra lỗi. Hãy thử cập nhật trình điều khiển của " "thiết bị ngoại vi USB của bạn lên phiên bản mới nhất. Nếu lỗi vẫn còn, bạn " "cần ngắt kết nối các thiết bị ngoại vi bị lỗi trước khi mở trình chỉnh sửa. " "Sau đó, bạn có thể kết nối lại thiết bị ngoại vi." #: ../../docs/tutorials/troubleshooting.rst:77 msgid "" "Firewall software such as Portmaster may also cause the debug port to be " "blocked. This causes the project to take a long time to start, while being " "unable to use debugging features in the editor (such as viewing ``print()`` " "output). You can work this around by changing the debug port used by the " "project in the Editor Settings (**Network > Debug > Remote Port**). The " "default is ``6007``; try another value that is greater than ``1024``, such " "as ``7007``." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:84 msgid "" "On Windows, when loading the project for the first time after the PC is " "turned on, Windows Defender will cause the filesystem cache validation on " "project startup to take significantly longer. This is especially noticeable " "in projects with a large number of files. Consinder adding the project " "folder to the list of exclusions by going to Virus & threat protection > " "Virus & threat protection settings > Add or remove exclusions." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:92 msgid "The Godot editor appears frozen after clicking the system console" msgstr "" "Trình chỉnh sửa Godot bị treo sau khi nhấp vào bảng điều khiển hệ thống." #: ../../docs/tutorials/troubleshooting.rst:94 msgid "" "When running Godot on Windows with the system console enabled, you can " "accidentally enable *selection mode* by clicking inside the command window. " "This Windows-specific behavior pauses the application to let you select text " "inside the system console. Godot cannot override this system-specific " "behavior." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:99 msgid "" "To solve this, select the system console window and press Enter to leave " "selection mode." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:103 msgid "" "The Godot editor's macOS dock icon gets duplicated every time it is manually " "moved" msgstr "" #: ../../docs/tutorials/troubleshooting.rst:105 msgid "" "If you open the Godot editor and manually change the position of the dock " "icon, then restart the editor, you will get a duplicate dock icon all the " "way to the right of the dock." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:109 msgid "" "This is due to a design limitation of the macOS dock. The only known way to " "resolve this would be to merge the project manager and editor into a single " "process, which means the project manager would no longer spawn a separate " "process when starting the editor. While using a single process instance " "would bring several benefits, it isn't planned to be done in the near future " "due to the complexity of the task." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:116 msgid "" "To avoid this issue, keep the Godot editor's dock icon at its default " "location as created by macOS." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:120 msgid "" "Some text such as \"NO DC\" appears in the top-left corner of the Project " "Manager and editor window" msgstr "" #: ../../docs/tutorials/troubleshooting.rst:122 msgid "" "This is caused by the NVIDIA graphics driver injecting an overlay to display " "information." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:124 msgid "" "To disable this overlay on Windows, restore your graphics driver settings to " "the default values in the NVIDIA Control Panel." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:127 msgid "" "To disable this overlay on Linux, open ``nvidia-settings``, go to **X Screen " "0 > OpenGL Settings** then uncheck **Enable Graphics API Visual Indicator**." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:131 msgid "" "A microphone or \"refresh\" icon appears in the bottom-right corner of the " "Project Manager and editor window" msgstr "" #: ../../docs/tutorials/troubleshooting.rst:133 msgid "" "This is caused by the NVIDIA graphics driver injecting an overlay to display " "instant replay information on ShadowPlay recording. This overlay can only be " "seen on Windows, as Linux does not have support for ShadowPlay." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:137 msgid "" "To disable this overlay, press :kbd:`Alt + Z` (default shortcut for the " "NVIDIA overlay) and disable **Settings > HUD Layout > Status Indicator** in " "the NVIDIA overlay." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:140 msgid "" "Alternatively, you can install the `new NVIDIA app ` which replaces GeForce Experience and does not " "suffer from this issue. Unlike GeForce Experience, the NVIDIA app draws the " "replay indicator in the corner of the screen as opposed to the corner of " "each window." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:147 msgid "The editor or project appears overly sharp or blurry" msgstr "Trình chỉnh sửa hoặc dự án mất rất nhiều thời gian để bắt đầu." #: ../../docs/tutorials/troubleshooting.rst:149 #: ../../docs/tutorials/troubleshooting.rst:153 msgid "" "Correct appearance (left), oversharpened appearance due to graphics driver " "sharpening (right)" msgstr "" #: ../../docs/tutorials/troubleshooting.rst:155 msgid "" "If the editor or project appears overly sharp, this is likely due to image " "sharpening being forced on all Vulkan or OpenGL applications by your " "graphics driver. You can disable this behavior in the graphics driver's " "control panel:" msgstr "" #: ../../docs/tutorials/troubleshooting.rst:159 msgid "" "**NVIDIA (Windows):** Open the start menu and choose **NVIDIA Control " "Panel**. Open the **Manage 3D settings** tab on the left. In the list in the " "middle, scroll to **Image Sharpening** and set it to **Sharpening Off**." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:162 msgid "" "**AMD (Windows):** Open the start menu and choose **AMD Software**. Click " "the settings \"cog\" icon in the top-right corner. Go to the **Graphics** " "tab then disable **Radeon Image Sharpening**." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:166 msgid "" "If the editor or project appears overly blurry, this is likely due " "to :abbr:`FXAA (Fast Approximate AntiAliasing)` being forced on all Vulkan " "or OpenGL applications by your graphics driver." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:170 msgid "" "**NVIDIA (Windows):** Open the start menu and choose **NVIDIA Control " "Panel**. Open the **Manage 3D settings** tab on the left. In the list in the " "middle, scroll to **Fast Approximate Antialiasing** and set it to " "**Application Controlled**." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:174 msgid "" "**NVIDIA (Linux):** Open the applications menu and choose **NVIDIA X Server " "Settings**. Select to **Antialiasing Settings** on the left, then uncheck " "**Enable FXAA**." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:177 msgid "" "**AMD (Windows):** Open the start menu and choose **AMD Software**. Click " "the settings \"cog\" icon in the top-right corner. Go to the **Graphics** " "tab, scroll to the bottom and click **Advanced** to unfold its settings. " "Disable **Morphological Antialiasing**." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:182 msgid "" "Third-party vendor-independent utilities such as vkBasalt may also force " "sharpening or FXAA on all Vulkan applications. You may want to check their " "configuration as well." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:186 msgid "" "After changing options in the graphics driver or third-party utilities, " "restart Godot to make the changes effective." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:189 msgid "" "If you still wish to force sharpening or FXAA on other applications, it's " "recommended to do so on a per-application basis using the application " "profiles system provided by graphics drivers' control panels." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:194 msgid "The editor or project appears to have washed out colors" msgstr "Trình chỉnh sửa hoặc dự án mất rất nhiều thời gian để bắt đầu." #: ../../docs/tutorials/troubleshooting.rst:196 msgid "" "On Windows, this is usually caused by incorrect OS or monitor settings, as " "Godot currently does not support :abbr:`HDR (High Dynamic Range)` *output* " "(even though it may internally render in HDR)." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:200 msgid "" "As `most displays are not designed to display SDR content in HDR mode " "`__, it is recommended to " "disable HDR in the Windows settings when not running applications that use " "HDR output. On Windows 11, this can be done by pressing :kbd:`Windows + Alt " "+ B` (this shortcut is part of the Xbox Game Bar app). To toggle HDR " "automatically based on applications currently running, you can use " "`AutoActions `__." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:207 msgid "" "If you insist on leaving HDR enabled, it is possible to somewhat improve the " "result by ensuring the display is configured to use :abbr:`HGIG (HDR Gaming " "Interest Group)` tonemapping (as opposed to :abbr:`DTM (Dynamic Tone " "Mapping)`), then `using the Windows HDR calibration app `__. It is " "also strongly recommended to use Windows 11 instead of Windows 10 when using " "HDR. The end result will still likely be inferior to disabling HDR on the " "display, though." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:217 msgid "Support for HDR *output* is planned in a future release." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:220 msgid "" "The editor/project freezes or displays glitched visuals after resuming the " "PC from suspend" msgstr "" #: ../../docs/tutorials/troubleshooting.rst:222 msgid "" "This is a known issue on Linux with NVIDIA graphics when using the " "proprietary driver. There is no definitive fix yet, as suspend on Linux + " "NVIDIA is often buggy when OpenGL or Vulkan is involved. The Compatibility " "rendering method (which uses OpenGL) is generally less prone to suspend-" "related issues compared to the Forward+ and Mobile renderers (which use " "Vulkan)." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:228 msgid "" "The NVIDIA driver offers an *experimental* `option to preserve video memory " "after suspend `__ which may resolve " "this issue. This option has been reported to work better with more recent " "NVIDIA driver versions." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:233 msgid "" "To avoid losing work, save scenes in the editor before putting the PC to " "sleep." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:236 msgid "" "The project works when run from the editor, but fails to load some files " "when running from an exported copy" msgstr "" #: ../../docs/tutorials/troubleshooting.rst:238 msgid "" "This is usually caused by forgetting to specify a filter for non-resource " "files in the Export dialog. By default, Godot will only include actual " "*resources* into the PCK file. Some files commonly used, such as JSON files, " "are not considered resources. For example, if you load ``test.json`` in the " "exported project, you need to specify ``*.json`` in the non-resource export " "filter. See :ref:`doc_exporting_projects_export_mode` for more information." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:245 msgid "" "Also, note that files and folders whose names begin with a period will never " "be included in the exported project. This is done to prevent version control " "folders like ``.git`` from being included in the exported PCK file." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:249 msgid "" "On Windows, this can also be due to :ref:`case sensitivity " "` issues. If you reference a " "resource in your script with a different case than on the filesystem, " "loading will fail once you export the project. This is because the virtual " "PCK filesystem is case-sensitive, while Windows's filesystem is case-" "insensitive by default." msgstr "" #: ../../docs/tutorials/troubleshooting.rst:256 msgid "" "The project crashes frequently or instantly after opening it from the " "project manager" msgstr "" #: ../../docs/tutorials/troubleshooting.rst:258 msgid "" "This could be caused by a number of things such as an editor plugin, " "GDExtension addon, or something else. In this scenario it's recommended that " "you open the project in recovery mode, and attempt to find and fix whatever " "is causing the crashes. See the :ref:`Project Manager page " "` for more information." msgstr "" #: ../../docs/tutorials/editor/index.rst:7 msgid "Editor introduction" msgstr "Trình biên tập" #: ../../docs/tutorials/editor/index.rst:9 msgid "" "In this section, we cover the Godot editor in general, from its interface to " "using it with the command line." msgstr "" #: ../../docs/tutorials/editor/index.rst:13 msgid "Editor's interface" msgstr "Sửa đổi giao diện" #: ../../docs/tutorials/editor/index.rst:15 msgid "" "The following pages explain how to use the various windows, workspaces, and " "docks that make up the Godot editor. We cover some specific editors' " "interfaces in other sections where appropriate. For example, " "the :ref:`animation editor `." msgstr "" #: ../../docs/tutorials/editor/index.rst:32 #, fuzzy msgid "XR editor" msgstr "Trình chỉnh sửa" #: ../../docs/tutorials/editor/index.rst:34 msgid "" "Godot offers a port of the editor designed to run natively on Meta Quest " "devices. The port can be downloaded from the `Meta Horizon Store `__, or from " "the `Godot download page `__." msgstr "" #: ../../docs/tutorials/editor/index.rst:45 msgid "Android editor" msgstr "Android" #: ../../docs/tutorials/editor/index.rst:47 msgid "" "Godot offers a native port of the editor running entirely on Android " "devices. The Android port can be downloaded from the `Android Downloads page " "`__. While we strive for feature " "parity with the Desktop version of the editor, the Android port has a " "certain amount of caveats you should be aware of." msgstr "" #: ../../docs/tutorials/editor/index.rst:59 msgid "Web editor" msgstr "Thư viện tài nguyên" #: ../../docs/tutorials/editor/index.rst:61 msgid "" "Godot offers an HTML5 version of the editor running entirely in your " "browser. No download is required to use it, but it has a certain amount of " "caveats you should be aware of." msgstr "" #: ../../docs/tutorials/editor/index.rst:72 msgid "Advanced features" msgstr "Chụp" #: ../../docs/tutorials/editor/index.rst:74 msgid "" "The articles below focus on advanced features useful for experienced " "developers, such as calling Godot from the command line and using an " "external text editor like Visual Studio Code or Emacs." msgstr "" #: ../../docs/tutorials/editor/index.rst:87 #: ../../docs/tutorials/editor/managing_editor_features.rst:6 msgid "Managing editor features" msgstr "Chụp" #: ../../docs/tutorials/editor/index.rst:89 msgid "" "Godot allows you to remove features from the editor. This may be useful if " "you're an educator trying to ease students into the editor slowly, or if " "you're working on a project that's only 2D or only 3D and don't want to see " "what you don't need." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:4 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.rst:113 msgid "Using the Project Manager" msgstr "Project manager (Quản lý dự án)" #: ../../docs/tutorials/editor/project_manager.rst:6 #, fuzzy msgid "" "When you launch Godot, the first window you see is the Project Manager. It " "lets you create, remove, import, or play game projects:" msgstr "" "Khi bạn khởi chạy Godot, cửa sổ đầu tiên bạn sẽ thấy là Project Manager. Nó " "cho phép bạn tạo, xóa, import hoặc chơi các dự án trò chơi." #: ../../docs/tutorials/editor/project_manager.rst:11 msgid "" "To change the editors language click on the **Settings** Button in the top " "right corner:" msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:16 msgid "" "In Project Manager Settings, you can change the interface **language** from " "the language dropdown menu, which is the system default language by default." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:19 msgid "" "You can also change the **theme** of the editor, the **display scale** for " "different interface element sizes, and the availability of online " "functionality using **network mode**. If network mode is online, Godot will " "also check and inform you about new versions of Godot." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:23 msgid "" "The **directory naming convention** can also be changed to replace spaces " "according to the chosen format when creating folders automatically." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:31 msgid "Creating and importing projects" msgstr "Tạo một dự án mới" #: ../../docs/tutorials/editor/project_manager.rst:33 msgid "To create a new project:" msgstr "Tạo một dự án mới" #: ../../docs/tutorials/editor/project_manager.rst:35 #, fuzzy msgid "Click the **Create** button on the top-left of the window." msgstr "Nhấn nút \"Search Help\" nằm góc trên bên phải của màn hình Script." #: ../../docs/tutorials/editor/project_manager.rst:36 msgid "" "Give the project a name, then open the file browser using the **Browse** " "button, and choose an empty folder on your computer to save the files. " "Alternatively, you can enable **Create Folder** option to automatically " "create a new sub-folder with the project name, following the directory " "naming convention set in the settings. An empty folder will show a green " "tick on the right." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:41 msgid "Select one of the renderers (this can also be changed later)." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:42 msgid "" "Click the **Create & Edit** button to create the project folder and open it " "in the editor." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:46 msgid "" "You can optionally choose a version control system. Currently, only `git " "`__ is supported and it needs the Godot Git Plugin to " "be installed, either manually or using the :ref:`Asset Library " "`. To learn more about the Godot Git Plugin, see its " "`wiki `__." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:51 msgid "Using the file browser" msgstr "Thư viện tài nguyên" #: ../../docs/tutorials/editor/project_manager.rst:53 msgid "" "From the **Create New Project** window, click the **Browse** button to open " "Godot's file browser. You can pick a location or type the folder's path in " "the **Path** field, after choosing a drive." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:57 msgid "" "Left of the path field on the top row contains arrows to navigate backward " "and forward through the last visited locations. The up arrow navigates to " "parent folder. On the right side of the path field, there are buttons to " "refresh the current folder's contents, favorite/unfavorite the current " "folder, and show/hide hidden folders." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:63 msgid "" "Next, the buttons to switch the display type of the folders and files " "between grid view and list view are seen." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:66 msgid "The last button on the right will create a new folder." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:68 msgid "" "Favorited folders will be displayed on the left side under the **Favorites** " "section. You can sort the favorites using the up and down buttons in this " "section. Last chosen folders will be listed under the **Recent** list." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:75 msgid "Opening and importing projects" msgstr "Tạo một dự án mới" #: ../../docs/tutorials/editor/project_manager.rst:77 msgid "" "The next time you open the Project Manager, you'll see your new project in " "the list. Double click on it to open it in the editor." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:82 msgid "" "You can similarly import existing projects using the **Import** button. " "Locate the folder that contains the project or the **project.godot** file to " "import and edit it." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:88 msgid "" "Alternatively, it is possible to choose a zip file to be automatically " "extracted by Godot." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:90 msgid "When the folder path is correct, you'll see a green checkmark." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:97 msgid "Downloading demos and templates" msgstr "Di chuyển player" #: ../../docs/tutorials/editor/project_manager.rst:99 msgid "" "From the **Asset Library** tab you can download open source project " "templates and demos from the :ref:`Asset Library ` to help you get started faster." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:103 msgid "" "The first time you open this tab you'll notice that it's asking you to go " "online. For privacy reasons the project manager, and Godot editor, can't " "access the internet by default. To enable accessing the internet click the " "**Go Online** button. This will also allow project manager to notify you " "about updates. If you wish to turn this off in the future go into project " "manager settings and change **Network Mode** to \"Offline\"" msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:109 msgid "" "Now that Godot is connected to the internet you can download a demo or " "template, to do this:" msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:112 msgid "Click on its title." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:113 msgid "On the page that opens, click the download button." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:114 msgid "" "Once it finished downloading, click install and choose where you want to " "save the project." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:120 #, fuzzy msgid "Managing projects with tags" msgstr "Kiểm tra" #: ../../docs/tutorials/editor/project_manager.rst:122 msgid "" "For users with a lot of projects on one PC it can be a lot to keep track of. " "To aid in this Godot allows you to create project tags. To add a tag to a " "project click on the project in the project manager, then click on the " "**Manage Tags** button" msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:128 msgid "" "This will open up the manage project tags window. To add a tag click the " "plus button." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:132 msgid "" "Type out the tag name, and click **OK**. Your project will now have a tag " "added to it. These tags can be used for any other project in your project " "manager." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:135 msgid "" "To show projects with a specific tag only, you can click on the tags or " "write ``tag:`` and type the tag you would like to search for in the filter " "bar. To limit the results using multiple tags, you can click on another tag " "or add ``tag:`` after a space and type another tag in the filter bar." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:140 msgid "" "In addition, tags will stay with projects. So if you tag your project, send " "it to another machine, and import it into the project manager you will see " "the tags you created." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:144 msgid "" "To remove a tag from your project manager it must be removed from all the " "projects it's used by. Once that's done close the project manager, open it " "up again, and the tag should be gone." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:149 #, fuzzy msgid "Recovery Mode" msgstr "Chế độ Di chuyển" #: ../../docs/tutorials/editor/project_manager.rst:151 msgid "" "If a project is immediately crashing on startup, or crashing frequently " "during editing it can be opened in recovery mode, to attempt to make it more " "stable while looking for the source of the crashing to fix it." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:155 msgid "" "Usually a project should open in recovery mode automatically when you re-" "open it after a crash. If it doesn't you can manually open recovery mode by " "selecting the project in the project manager, to do that select the project " "from your list of projects, click the dropdown button next to the edit node, " "and select ``Edit in recovery mode``." msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:163 msgid "While in recovery mode the following are disabled:" msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:165 #, fuzzy msgid "Tool scripts" msgstr "Công cụ" #: ../../docs/tutorials/editor/project_manager.rst:166 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.1.rst:176 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.3.rst:210 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.4.rst:152 #: ../../docs/tutorials/migrating/upgrading_to_godot_4.5.rst:175 #: ../../docs/tutorials/plugins/editor/index.rst:4 msgid "Editor plugins" msgstr "" #: ../../docs/tutorials/editor/project_manager.rst:167 #, fuzzy msgid "GDExtension addons" msgstr "Phát triển" #: ../../docs/tutorials/editor/project_manager.rst:168 #, fuzzy msgid "Automatic scene restoring" msgstr "Kết nối signal trong mã" #: ../../docs/tutorials/editor/project_manager.rst:169 #, fuzzy msgid "Running the project" msgstr "Tổ chức dự án" #: ../../docs/tutorials/editor/project_manager.rst:171 msgid "" "It is recommended that you backup your project before editing it in recovery " "mode." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:4 #, fuzzy msgid "Inspector Dock" msgstr "Android" #: ../../docs/tutorials/editor/inspector_dock.rst:6 msgid "" "The Inspector dock lists all properties of an object, resource, or node. It " "will update the list of the properties as you select a different node from " "the Scene Tree dock, or if you use **Open** command from the FileSystem's " "context menu." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:12 msgid "" "This page explains how the Inspector dock works in-depth. You will learn how " "to edit properties, fold and unfold areas, use the search bar, and more." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:16 #: ../../docs/tutorials/editor/script_editor.rst:47 #: ../../docs/tutorials/platform/android/android_in_app_purchases.rst:10 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0001.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0002.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0003.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0101.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0102.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0103.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0104.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0105.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0106.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0107.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0108.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0109.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0110.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0111.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0201.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0202.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0203.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0301.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0302.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0303.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0401.rst:8 #: ../../docs/tutorials/scripting/c_sharp/diagnostics/GD0402.rst:8 #: ../../docs/tutorials/scripting/debug/objectdb_profiler.rst:33 msgid "Usage" msgstr "Sử dụng" #: ../../docs/tutorials/editor/inspector_dock.rst:18 msgid "" "If the inspector dock is visible, clicking on a node in the scene tree will " "automatically display its properties. If it is not visible, you can show it " "by navigating to **Editor > Editor Docks > Inspector**." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:23 msgid "At the top of the dock are the file and navigation buttons." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:27 msgid "From left to right:" msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:29 msgid "" "Opens a new window to select and create a resource in the memory and edit it." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:30 msgid "Opens a resource from the FileSystem to edit." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:31 msgid "Saves the currently edited resource to disk." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:32 msgid "Provides options to:" msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:34 msgid "**Edit Resource from Clipboard** by pasting the copied resource." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:35 msgid "**Copy Resource** to clipboard." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:36 msgid "**Show in FileSystem** if the resource is already saved." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:37 msgid "" "**Make Resource Built-In** to work in a built-in resource, not the one from " "the disk." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:39 msgid "" "The \"<\" and \">\" arrows let you navigate through your edited object " "history." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:40 msgid "" "The button next to them opens the history list for a quicker navigation. If " "you created multiple resources in the memory, you will also see them here." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:43 msgid "" "Below, you can find the selected node's icon, its name, and the quick button " "to open its documentation on the right side. Clicking on the node's name " "itself will list the sub-resources of this node if there are any." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:47 msgid "" "Then comes the search bar. Type anything in it to filter displayed " "properties. Delete the text to clear the search. This search is case " "insensitive and also searches letter by letter as you type. For instance, if " "you type ``vsb``, one of the results you see will be Visibility property as " "this property contains all of these letters." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:53 msgid "" "Before discussing the tool button next to the filter bar, it is worth " "mentioning what you actually see below it and how it is structured." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:58 msgid "" "Properties are grouped inside their respective *classes* as *sections*. You " "can expand each section to view the related properties." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:61 msgid "" "You can also open the documentation of each class by right-clicking on a " "class and selecting **Open Documentation**. Similarly, you can right click " "on a property and copy or paste its value, copy the property path, favorite " "it to be shown on the top of the inspector, or open its documentation page." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:67 msgid "" "If you hover your mouse over a property, you will see the description of " "what it does as well as how it can be called inside the script." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:70 msgid "" "You can directly change the values by clicking, typing, or selecting from " "the menu. If the property is a number or a slider, you can keep your left " "mouse button pressed and drag to change the values." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:76 msgid "" "If a node's property is a sub-resource, you can click on the down arrow to " "pick a resource type, or load one using the **Quick Load** or **Load** " "options. Alternatively, a supported resource can be dragged from the " "FileSystem. Once you start dragging, the compatible property will be " "highlighted. Simply drop it on the appropriate property's value." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:82 msgid "" "After loading a sub-resource, you can click on it to see its properties or " "adjust them." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:86 msgid "" "The values with different values than their original values will have a " "revert icon (|undo|). Clicking on this icon reverts the value to its " "original state. If the values are linked with each other, they will have a " "chain icon and changing one will change others as well. You can unchain them " "by clicking on this icon." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:84 msgid "undo" msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:91 msgid "" "If you are changing a property a lot, you may consider favoriting it by " "right-clicking and choosing **Favorite Property**. This will show it at the " "top of the inspector for all objects of this class." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:95 msgid "" "Now that we have a better understanding of the terms, we can proceed with " "the tool menu. If you click the tool menu icon next to the filter bar, a " "drop-down menu will offer various view and edit options." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:101 msgid "**Expand All**: Expands all sections showing all available properties." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:102 msgid "" "**Collapse All**: Collapses all properties showing only classes and the " "sections." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:103 msgid "" "**Expand Non-Default**: Only expands the sections where the original value " "is different than the current value (the properties with a revert icon (|" "undo|))." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:105 msgid "" "**Property Name Style**: This section determines how the properties' text is " "displayed in the inspector. ``Raw`` uses the property's own naming, " "``Capitalized`` uses title case by changing the initial letters of each word " "to uppercase and removing underscores, ``Localized`` displays the " "translation of the properties if you are using the Editor in a language " "other than English." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:110 msgid "" "**Copy Properties**: Copies all properties of the current node with their " "current values." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:111 msgid "" "**Paste Properties**: Pastes the copied properties from the clipboard. " "Useful to apply the common properties of one node to another." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:113 msgid "" "**Make Sub-Resources Unique**: By default, a duplicated node shares the sub-" "resources of the original node. Changing one parameter of the sub-resource " "in one node, affects the other one. Clicking this option makes each sub-" "resource used in this node unique, separated from other nodes." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:119 msgid "" "If a node has exported variables in its attached script, you will also see " "these in the inspector. The first image in this section has one for the " "Player node: `Action Suffix`. See :ref:`doc_gdscript_exports` for more on " "this topic." msgstr "" #: ../../docs/tutorials/editor/inspector_dock.rst:123 #, fuzzy msgid "Refer to :ref:`doc_customizing_editor` for dock customization options." msgstr "Xem: ref:`doc_instancing` để tìm hiểu thêm về cách sử dụng instance." #: ../../docs/tutorials/editor/project_settings.rst:4 msgid "Project Settings" msgstr "Kiểm tra" #: ../../docs/tutorials/editor/project_settings.rst:6 msgid "" "There are dozens of settings you can change to control a project's " "execution, including physics, rendering, and windowing settings. These " "settings can be changed from the **Project Settings** window, from code, or " "by manually editing the ``project.godot`` file. You can see a full list of " "settings in the :ref:`ProjectSettings ` class." msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:12 msgid "" "Internally, Godot stores the settings for a project in a ``project.godot`` " "file, a plain text file in INI format. While this is human-readable and " "version control friendly, it's not the most convenient to edit. For that " "reason, the **Project Settings** window is available to edit these settings. " "To open the Project Settings, select **Project > Project Settings** from the " "main menu." msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:21 #, fuzzy msgid "The Project Settings window" msgstr "Trình biên tập" #: ../../docs/tutorials/editor/project_settings.rst:23 msgid "" "The **Project Settings** window is mainly used to change settings in the " "**General** tab. Additionally, there are tabs for the :ref:`Input Map " "`, :ref:`Localization " "`, :ref:`Globals " "`, :ref:`Plugins " "`, and **Import Defaults**. Usage " "of these other tabs is documented elsewhere." msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:32 #, fuzzy msgid "Changing project settings" msgstr "Kiểm tra" #: ../../docs/tutorials/editor/project_settings.rst:34 msgid "" "The **General** tab of the project settings window works much like the " "inspector. It displays a list of project settings which you can change, just " "like inspector properties. There is a list of categories on the left, which " "you can use to select related groups of settings. You can also search for a " "specific setting with the **Filter Settings** field." msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:40 msgid "" "Each setting has a default value. Settings can be reset to their default " "values by clicking the circular arrow **Reset** button next to each property." msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:44 #, fuzzy msgid "Changing project settings from code" msgstr "Kiểm tra" #: ../../docs/tutorials/editor/project_settings.rst:46 msgid "" "You can use :ref:`set_setting() ` " "to change a setting's value from code:" msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:60 msgid "" "However, many project settings are only read once when the game starts. " "After that, changing the setting with ``set_setting()`` will have no effect. " "Instead, most settings have a corresponding property or method on a runtime " "class like :ref:`Engine ` or :ref:`DisplayServer " "`:" msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:76 msgid "" "In general, project settings are duplicated at runtime in the :ref:`Engine " "`, :ref:`PhysicsServer2D " "`, :ref:`PhysicsServer3D " "`, :ref:`RenderingServer " "`, :ref:`Viewport `, or :ref:`Window " "` classes. In the :ref:`ProjectSettings " "` class reference, settings links to their equivalent " "runtime property or method." msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:85 #, fuzzy msgid "Reading project settings" msgstr "Kiểm tra" #: ../../docs/tutorials/editor/project_settings.rst:87 msgid "" "You can read project settings with :ref:`get_setting() " "` " "or :ref:`get_setting_with_override() " "`:" msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:102 msgid "" "Since many project settings are only read once at startup, the value in the " "project settings may no longer be accurate. In these cases, it's better to " "read the value from the runtime equivalent property or method:" msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:118 msgid "Manually editing project.godot" msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:120 msgid "" "You can open the ``project.godot`` file using a text editor and manually " "change project settings. Note that if the ``project.godot`` file does not " "have a stored value for a particular setting, it is implicitly the default " "value of that setting. This means that if you are manually editing the file, " "you may have to write in both the setting name *and* the value." msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:126 msgid "" "In general, it is recommended to use the Project Settings window rather than " "manually edit ``project.godot``." msgstr "" #: ../../docs/tutorials/editor/project_settings.rst:130 #, fuzzy msgid "Advanced project settings" msgstr "Kiểm tra" #: ../../docs/tutorials/editor/project_settings.rst:135 #, fuzzy msgid "The advanced project settings" msgstr "Kiểm tra" #: ../../docs/tutorials/editor/project_settings.rst:137 msgid "" "By default, only some project settings are shown. To see all the project " "settings, enable the **Advanced Settings** toggle." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:4 #, fuzzy msgid "Script Editor" msgstr "Trình soạn tập lệnh" #: ../../docs/tutorials/editor/script_editor.rst:11 msgid "" "Godot Engine's script editor is a powerful and fully-integrated text editor " "that not only streamlines the process of writing and debugging code written " "in GDScript but also allows for working with plain text files, providing " "developers with a seamless environment for scripting game logic and " "behaviors. It can highlight your code, automatically indent it, perform " "syntax checks, and much more. You can also create breakpoints to debug your " "project without switching to another window. The text editor also serves as " "an offline class reference viewer, which can be accessed in several ways as " "described in " "the :ref:`doc_intro_to_the_editor_interface_integrated_class_reference`." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:28 #, fuzzy msgid "Features" msgstr "**Các tính năng:**" #: ../../docs/tutorials/editor/script_editor.rst:30 msgid "Some of the key features of the text editor are listed below:" msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:32 msgid "Fully-integrated code editor for GDScript." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:33 #, fuzzy msgid "Syntax highlighting support for GDScript and JSON files." msgstr "Syntax highlight được cung cấp trên GitHub." #: ../../docs/tutorials/editor/script_editor.rst:34 msgid "Syntax checking for GDScript and JSON files." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:35 msgid "Bookmark and breakpoint support." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:36 #, fuzzy msgid "Automatic indentation." msgstr "Tạo các node" #: ../../docs/tutorials/editor/script_editor.rst:37 #, fuzzy msgid "Code folding." msgstr "Kiểm tra" #: ../../docs/tutorials/editor/script_editor.rst:38 msgid "Customizable theme." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:39 msgid "Multiple carets, which can be enabled using :kbd:`Alt + Left Click`." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:40 msgid "Auto-completion of variables, functions, constants, etc." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:41 msgid "" "Inline refactoring of symbols by selecting them and using :kbd:`Ctrl + D`." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:42 msgid "Mass find and replace across project files." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:49 msgid "" "If you are using GDScript in your project, the built-in text editor in Godot " "provides everything you need, serving as a one-stop location to fully " "utilize the Godot Engine. Nearly all parameters that can be adjusted via the " "user interface can also be modified directly through code." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:54 msgid "" "If you would like to use an external text editor or prefer to use C# in your " "project, see :ref:`doc_external_editor` " "and :ref:`doc_c_sharp_setup_external_editor`." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:58 msgid "" "Similar to many parts of the Godot's interface, the text editor can also be " "customized by changing its settings to your liking. You can access these " "settings by opening **Editor > Editor Settings** and going to the **Text " "Editor** group." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:65 msgid "" "You can open the Script Editor using the **Script** button in the workspace " "selector, located at the top center of Godot's interface. Alternatively, you " "can use the **Open Script** button next to a node in the Scene Tree dock, or " "double-click on a ``.gd`` file or a recognized text file in the FileSystem " "dock to open it directly in the Script Editor." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:73 msgid "" "Once it is open, you will see the text editor menus at the top, below the " "scene switcher. Next to the menus, you'll find buttons to open the online " "documentation or search within the built-in class reference. To the right of " "these buttons are two navigation arrows that allow you to navigate through " "your viewing history. Finally, you can use the float button to separate the " "text editor from Godot's window, which is useful if you are working with " "multiple monitors." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:81 msgid "" "Underneath the menus on the left, you will see the script panel. In the " "center, adjacent to the script panel, is the coding area. Beneath the coding " "area is the status bar, which displays the error and warning count in the " "code. Clicking on the error or warning icons will show the list of errors " "with the line numbers. Clicking on one will jump to that line. You can also " "choose to ignore warnings by opening the list and clicking ``Ignore``. The " "status bar also lets you change the zoom level of the code by clicking the " "percentage value. You can also use :kbd:`Ctrl + Mouse Wheel` (:kbd:`Cmd + " "Mouse Wheel` on Mac) to achieve the same effect. The status bar also shows " "the current position of the caret in terms of line and column, and whether " "the indentation is done using tabs, or spaces." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:94 msgid "" "Many of the actions performed in the text editor can also be executed using " "shortcuts. The actions show their corresponding shortcuts next to them. For " "a complete shortcut list, see the :ref:`text editor shortcuts " "`." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:98 msgid "" "In the next sections, we will go through different aspects of the text " "editor. You can also select a section below to jump to a specific topic:" msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:109 #, fuzzy msgid "Script Panel" msgstr "Hiện/Ẩn bảng tập lệnh" #: ../../docs/tutorials/editor/script_editor.rst:118 msgid "" "Below the menus, on the left panel, you will see a list of opened files and " "documentation pages. Depending on the file type, this list will have an icon " "next to the file name. For example, the |script| icon means that it is a " "GDScript. the |scriptcsharp| means it is a C# script. The |documentation| " "means that this is a built-in class reference. Finally, the |toolscript| " "means it is a currently running script (See :ref:`tool annotation " "` for more on this). Hovering a file will " "show a tooltip with its relative location in the project folder." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:111 #, fuzzy msgid "script" msgstr "GDScript" #: ../../docs/tutorials/editor/script_editor.rst:112 msgid "scriptcsharp" msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:113 #, fuzzy msgid "documentation" msgstr "Tài liệu ngoại tuyến" #: ../../docs/tutorials/editor/script_editor.rst:114 #, fuzzy msgid "toolscript" msgstr "Hoàn tất script" #: ../../docs/tutorials/editor/script_editor.rst:126 msgid "" "On the status bar, clicking the left arrow hides the script panel, clicking " "on the right arrow shows it." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:129 msgid "" "If you did not change any settings, the file names may also have a different " "coloring. This helps you identify the recently edited files by highlighting " "them. This behavior can be changed in the **Editor > Editor Settings** by " "adjusting the **Script Temperature** properties in the **Text Editor** " "section." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:134 msgid "" "The filter bar above the file names introduces a handy case-insensitive " "search to find a specific file. Even if you just type the letters of a file " "name into the bar, files containing these letters in order will also appear. " "Assume that there is a file named ``button.gd`` in the list. If you type " "``btn`` into the filter bar, this file will appear in the results. To reset " "the filter, clear the filter bar." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:140 msgid "" "An asterisk (*) next to a file name indicates that the file has unsaved " "changes." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:142 msgid "" "If you just enter \"*\" in the filter bar, you can display all unsaved files." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:144 msgid "" "You can drag a file to change the ordering. Middle-clicking on a file closes " "it. Right-clicking on a file provides several options to save or close " "files, or to copy the relative path of the file. On this menu:" msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:148 msgid "" "You can also use **Move Up** and **Move Down** to change the order of the " "file, or use **Sort** to sort all files alphabetically. **Toggle Scripts " "Panel** hides the panel, which can be displayed again using the right arrow " "on the status bar. **Close Docs** closes all opened in-class reference " "documents leaving only script files open. **Show in FileSystem** finds and " "highlights the file in the FileSystem dock." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:155 msgid "" "Below the file list, you'll see the name of the currently open file. The " "button next to this switches the ordering of the methods defined in this " "file between alphabetical and as they appear. Under this is the outline of " "the file. If this is a script file, it will contain the list of defined " "methods. If, however, a class reference page is open, this area will show " "the table of contents of this document. Clicking on an item in this list " "will jump to the respective function or section in the file. Similarly, the " "**Filter Methods** bar lets you search for a specific function or section " "within the selected document with the same behavior as filtering scripts." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:168 msgid "Menus" msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:170 msgid "" "The text editor's menus lie below the scene switcher and allow you to access " "a variety of tools and options, such as file management, search and replace, " "debugging controls, and code formatting features." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:174 msgid "" "An asterisk (*) next to an action means that this operation is also " "available in the context menu, which can be opened by right-clicking in the " "code editor." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:179 #, fuzzy msgid "The **File** menu provides the following options:" msgstr "Cảnh Mob sẽ sử dụng các node sau:" #: ../../docs/tutorials/editor/script_editor.rst:183 msgid "" "**New Script...**: Opens the new script dialog to create and add the script " "to the project. If creation is successful, it will directly open it in the " "text editor. Depending on the version of Godot (with C# support or not), you " "can choose ``.gd`` or ``.cs`` as the extension." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:187 msgid "" "**New Text File...**: Opens the file dialog to create a plain text file with " "one of the recognized formats. Godot can also highlight ``json`` files." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:189 msgid "" "**Open...**: Opens the file dialog to let you browse inside your computer " "and choose any recognized text file to open it." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:191 msgid "" "**Reopen Closed Script**: Reopens the last closed scripts. You can use this " "option multiple times to reopen other closed scripts if you closed more than " "one." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:193 msgid "" "**Open Recent**: Provides a list of last opened scripts. You can also clear " "the list using the provided option at the bottom of the list." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:195 msgid "**Save**: Saves the currently selected script." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:196 msgid "" "**Save As...**: Opens the file dialog to save the currently open script with " "a different name." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:198 msgid "" "**Save All**: Saves all unsaved open scripts in the text editor. Scripts " "with unsaved changes will have an asterisk (*) next to their names in the " "script list." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:200 msgid "" "**Soft Reload Tool Script**: If the selected script is a :ref:`tool " "`, reloads the script to execute it again." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:202 msgid "" "**Copy Script Path**: Copies the currently selected script's relative path " "in the project using the ``res://`` prefix." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:204 msgid "" "**Show in FileSystem**: Finds and highlights the selected file in the " "FileSystem dock." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:206 msgid "" "**History Previous**: Changes the active script to the one that was " "previously opened. This is useful when you have multiple scripts open and " "want to quickly navigate back to the last script you were editing. If you " "also changed the caret position more than 10 lines, you will first move it " "to its previous location in the same file." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:210 msgid "" "**History Next**: After using `History Previous` to go back to an earlier " "script, this feature allows you to move forward through the script history, " "switching to scripts that were previously accessed. Similar to above, if you " "also changed the caret position more than 10 lines, you will first move it " "to its next location in the same file." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:215 msgid "" "**Theme**: Provides options to import an existing theme, save, or reload it. " "Changing theme settings is performed via `Editor Settings`." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:217 msgid "**Close**: Closes the active script." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:218 msgid "" "**Close All**: Closes all open scripts and prompts to save if there are " "unsaved changes." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:219 msgid "**Close Other Tabs**: Closes all open scripts except the selected one." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:220 msgid "" "**Close Docs**: Closes the class reference documentation pages, leaving only " "the scripts." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:222 msgid "" "**Run**: If the script extends :ref:`EditorScript ` and " "intended to be executed without running the project, this option runs the " "script. See :ref:`doc_running_code_in_the_editor_editorscript` for more." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:225 msgid "" "**Toggle Scripts Panel**: Shows or hides the script panel located on the " "left side of the text editor, allowing you to expand the available coding " "area. More on the `Scripts Panel` is explained :ref:`above " "`." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:229 msgid "The **Edit** menu provides several options for line operations:" msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:233 msgid "" "**Undo***: Allows you to reverse the most recent action or series of " "actions, restoring document or code to its previous state before the changes " "were made." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:235 msgid "" "**Redo***: Allows you to reapply an action that was previously undone, " "effectively redoing the last action that was reversed by the Undo function." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:237 msgid "**Cut***: Cuts the selection to the clipboard." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:238 msgid "**Copy***: Copies the selection to the clipboard." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:239 msgid "**Paste***: Pastes the content of the clipboard if it contains text." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:240 #, fuzzy msgid "**Select All***: Selects the all code in the text editor." msgstr "Thư viện tài nguyên" #: ../../docs/tutorials/editor/script_editor.rst:241 msgid "" "**Duplicate Selection**: Copies the selection and appends it next to the " "selection." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:242 msgid "" "**Duplicate Lines**: Duplicates the current line and adds it as a new line " "below the current line." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:244 msgid "" "**Evaluate Selection***: Computes the values of the selected text if it " "contains `only` a mathematical expression, such as ``83 * 3`` or " "``pow(2,3)``." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:246 msgid "" "**Toggle Word Wrap**: Disables the horizontal scrollbar by wrapping the long " "lines to the next line. Note that this is just a visual change and no new " "linebreaks are added." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:248 msgid "" "**Line**: Provides a set of line operations. Depending on the opened file, " "the options might also be directly in the Edit menu, instead of a submenu." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:251 msgid "" "**Move Up**: Moves the current line or the selected line(s) one line up." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:252 msgid "" "**Move Down**: Moves the current line or the selected line(s) one line down." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:253 msgid "" "**Indent***: Indents the text from the caret or the selected line(s), " "following the indentation setting." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:255 msgid "" "**Unindent***: Unindents the text from the caret or the selected line(s), " "following the indentation setting." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:257 msgid "**Delete Line**: Deletes the current line or the selected line(s)." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:258 msgid "" "**Toggle Comment***: Comments and uncomments the current line or the " "selected line(s). You can perform the same action by selecting line(s) and " "choosing the same action after right-clicking on the selected text." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:262 msgid "" "**Folding**: Provides a set of folding options for the selected text. " "Depending on the opened file, the options might also be directly in the Edit " "menu, instead of a submenu." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:265 msgid "" "**Fold/Unfold Line***: If the code in the current line has a code block or " "code region beneath it, it hides this block by collapsing the lines. You can " "then unfold it using this option again, using the \">\" arrow next to the " "line number in the coding area, or clicking on the ellipsis \"...\" icon at " "the end of the folded line." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:269 msgid "" "**Fold All Lines**: Folds all code blocks or code regions in the open " "document." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:270 msgid "" "**Unfold All Lines**: Unfolds all code blocks and code regions in the open " "document." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:271 msgid "" "**Create Code Region***: Wraps the selected text in a foldable code region " "to improve the readability of larger scripts. " "See :ref:`doc_gdscript_builtin_types` for more." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:274 msgid "" "**Completion Query**: Suggests from built-in or user created symbols to auto-" "complete the partially written code. :kbd:`Up` and :kbd:`Down` arrows " "navigate up and down, pressing :kbd:`Enter` or :kbd:`Tab` accepts and adds " "the highlighted symbol to the code. :kbd:`Tab` will also replace existing " "text to the right of the caret." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:277 msgid "" "**Trim Trailing Whitespaces**: Removes extra spacing at the end of each line " "in the file." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:278 msgid "" "**Trim Final Newlines**: Removes the extra new lines at the end of the file." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:279 msgid "" "**Indentation**: Provides options for the indentation of the open file. " "Depending on the opened file, the options might also be directly in the Edit " "menu, instead of a submenu." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:283 msgid "" "**Convert Indent to Spaces**: Converts all indentation in the file to spaces." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:284 msgid "" "**Convert Indent to Tabs**: Converts all indentation in the file to tabs." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:285 msgid "" "**Auto Indent**: Converts the indentation of the selected lines (or the " "entire file) following the indentation setting." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:288 msgid "" "**Convert Case**: Changes the case of the selected text to `Upper Case*`, " "`Lower Case*`, or capitalizes each initial letter of the words." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:290 msgid "**Syntax Highlighter**: Allows you to choose the syntax highlighter." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:292 msgid "**Plain Text**: Disables highlighting." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:293 msgid "**Standard**: Default highlighting for C# scripts." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:294 msgid "**JSON**: Syntax highlighting for JSON files." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:295 msgid "**GDScript**: Syntax highlighting for GDScript files." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:297 #, fuzzy msgid "The **Search** menu provides the following options:" msgstr "Cảnh Mob sẽ sử dụng các node sau:" #: ../../docs/tutorials/editor/script_editor.rst:301 msgid "" "**Find...**: Opens the quick-find bar under the status bar to search for " "text in the open file. You can navigate to the next match and previous match " "using the up and down arrows, respectively. Checking **Match Case** makes " "the search case-sensitive. Checking **Whole Words** means that the text must " "not have any letters or numbers next to it, only symbols and whitespace." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:303 msgid "**Find Next**: Similar to the down arrow, shows the next occurrence." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:304 msgid "" "**Find Previous**: Similar to the up arrow, shows the previous occurrence." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:307 msgid "" "**Replace...**: Opens the find and replace bar under the status bar to find " "text and replace it in the open file. You can choose to replace them one at " "a time or all at once. Additionally, you can limit the replacement to the " "selected text by checking the **Selection Only** checkbox in the find and " "replace bar. You can also use :kbd:`Ctrl + D` to additionally select the " "next instance of the currently selected text, allowing you to perform an in-" "line replacement on multiple occurrences." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:311 msgid "" "**Find in Files...**: Opens a window to search for text within the files in " "the project folder. Selecting \"Find...\" starts with the chosen folder, and " "includes the file extensions checked in the filters. The results are shown " "in the bottom panel with the number of matches and total number of files " "found, in the **Search Results** tab. Clicking on a result opens the file " "and jumps to the respective line." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:316 msgid "" "**Replace in Files...**: Opens a window to search and replace text with " "different text within the found files in the project folder. After clicking " "**Replace...**, you can select in which files to replace using the **Search " "Results** tab in the bottom panel by (un)checking them and using **Replace " "All** button." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:323 msgid "Note that \"Replace in Files\" operation cannot be undone!" msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:325 msgid "" "Both the **Find in Files** and **Replace in Files** windows share the " "**Search...** and **Replace...** buttons. The only difference in the latter " "window is an additional text field that automatically fills in the search " "results panel when the **Replace...** button is clicked. The replacement " "operation is only executed if you click the **Replace All** button in this " "bottom panel, allowing you to also edit the word to replace later within " "this panel." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:334 msgid "" "**Contextual Help***: Opens the list of built-in class reference similar to " "pressing :kbd:`F1` on a symbol, or choosing **Lookup Symbol** from the " "context menu." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:337 msgid "" "The **Go To** menu lets you navigate within the code at ease with these " "options:" msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:341 msgid "" "**Go to Function...**: Opens the function list to jump to. You can achieve " "the same result by typing in the filter methods bar in the script panel." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:343 msgid "**Go to Line...**: Jumps to the entered line number in the code editor." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:344 msgid "" "**Bookmarks**: Contains actions for the bookmark functionality, which you " "can use to find your way through your code easier, such as an incomplete " "section. Bookmarked lines will have a blue bookmark symbol left of the line " "number." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:348 msgid "" "**Toggle Bookmark***: Adds or removes the bookmark on the line where the " "caret is. You can also right click on a line to achieve this." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:350 msgid "**Remove All Bookmarks**: Removes all bookmarks in the open document." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:351 msgid "" "**Go to Next Bookmark**: Jumps to the next bookmark in the open document." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:352 msgid "" "**Go to Previous Bookmark**: Jumps to the previous bookmark in the open " "document." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:353 msgid "" "**Bookmarks** menu will also contain the list of bookmarked lines, including " "their line number and displaying the partial content in that line." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:356 msgid "" "**Breakpoints**: Breakpoints are helpful while debugging your code. Similar " "to **Bookmarks** menu, this menu lets you add or remove breakpoints, " "navigate between them and directly jump to a specific breakpoint. An easy " "way to add a breakpoint is hovering over the blank area left of a line " "number. It will show a faded red circle. Clicking it will add a breakpoint " "and the circle will stay there. Clicking on a circle removes the breakpoint." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:362 msgid "" "**Debug** menu offers actions which can be used while debugging. " "See :ref:`doc_debugger_tools_and_options` for more." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:368 #, fuzzy msgid "Coding area" msgstr "Di chuyển player" #: ../../docs/tutorials/editor/script_editor.rst:370 msgid "" "This section will only cover the basics of the coding area in terms of the " "user interface. To learn more about scripting in Godot, refer to " "the :ref:`doc_gdscript` or :ref:`Scripting ` " "documentation." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:376 msgid "" "The coding area is where you will type your scripts if you are using the " "built-in text editor. It offers highlighting and auto-completion features to " "help you while you code." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:379 msgid "" "The coding area shows line numbers on the left side. Below the navigation " "arrows on the right side, there is a clickable minimap that provides an " "overview of the entire script, allowing you to scroll through it." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:383 msgid "" "If a line of code is long enough (more than 80 characters, by default), the " "text editor will display a vertical line that can be used as a soft " "guideline. For a hard guideline, this value is set to 100 characters, by " "default. Both values can be changed, or the display of the line can be " "toggled in the \"Appearance\" settings of the text editor." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:392 msgid "" "In the script, to the left of function definitions, you might see additional " "icons. The |override| icon indicates that this function is an :ref:`override " "` of an existing function. Clicking it opens the " "documentation of the original function. The |receiver| icon means that it is " "a receiving method of a signal. Clicking it shows where the signal is coming " "from. A |foldable| icon to the left of the line denotes a foldable block. " "You can click to collapse or expand it. Alternatively, the ellipsis (...) " "icon can also be clicked to expand a folded block." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:388 msgid "override" msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:389 msgid "receiver" msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:390 msgid "foldable" msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:400 msgid "" "The example below summarizes the paragraph above. Lines 52, 56, and 58 are " "foldable blocks, line 57 is a code region with the name \"New Code Region,\" " "which you can also fold, and line 62 is a folded block. Line 53 is a " "bookmark, which can quickly be jumped to using the **Go To > Bookmarks** " "menu. Line 55 is a breakpoint that can be used in :ref:`debugging " "`." msgstr "" #: ../../docs/tutorials/editor/script_editor.rst:408 msgid "" "Many of the colors of the text editor such as highlighting colors, or even " "breakpoint or bookmark icon colors can be customized. You can experiment " "them by opening the text editor settings navigating to **Editor > Editor " "Settings > Text Editor** section." msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:-1 msgid "cheatsheet, cheat sheet, shortcut" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:9 msgid "Default editor shortcuts" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:11 msgid "" "Many Godot editor functions can be executed with keyboard shortcuts. This " "page lists functions which have associated shortcuts by default, but many " "others are available for customization in editor settings as well. To change " "keys associated with these and other actions navigate to **Editor > Editor " "Settings > Shortcuts**." msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:16 msgid "" "While some actions are universal, a lot of shortcuts are specific to " "individual tools. For this reason it is possible for some key combinations " "to be assigned to more than one function. The correct action will be " "performed depending on the context." msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:23 msgid "" "While Windows and Linux builds of the editor share most of the default " "settings, some shortcuts may differ for macOS version. This is done for " "better integration of the editor into macOS ecosystem. Users fluent with " "standard shortcuts on that OS should find Godot Editor's default key mapping " "intuitive." msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:29 #, fuzzy msgid "General editor actions" msgstr "Trình biên tập" #: ../../docs/tutorials/editor/default_key_mapping.rst:32 #: ../../docs/tutorials/editor/default_key_mapping.rst:102 #: ../../docs/tutorials/editor/default_key_mapping.rst:123 #: ../../docs/tutorials/editor/default_key_mapping.rst:178 #: ../../docs/tutorials/editor/default_key_mapping.rst:255 #: ../../docs/tutorials/editor/default_key_mapping.rst:344 #: ../../docs/tutorials/editor/default_key_mapping.rst:391 #: ../../docs/tutorials/editor/default_key_mapping.rst:402 #: ../../docs/tutorials/editor/default_key_mapping.rst:415 #: ../../docs/tutorials/editor/default_key_mapping.rst:446 #: ../../docs/tutorials/editor/default_key_mapping.rst:459 #: ../../docs/tutorials/editor/default_key_mapping.rst:482 #: ../../docs/tutorials/editor/default_key_mapping.rst:499 #: ../../docs/tutorials/editor/default_key_mapping.rst:538 #: ../../docs/tutorials/editor/default_key_mapping.rst:565 msgid "Action name" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:32 #: ../../docs/tutorials/editor/default_key_mapping.rst:102 #: ../../docs/tutorials/editor/default_key_mapping.rst:123 #: ../../docs/tutorials/editor/default_key_mapping.rst:178 #: ../../docs/tutorials/editor/default_key_mapping.rst:255 #: ../../docs/tutorials/editor/default_key_mapping.rst:344 #: ../../docs/tutorials/editor/default_key_mapping.rst:391 #: ../../docs/tutorials/editor/default_key_mapping.rst:402 #: ../../docs/tutorials/editor/default_key_mapping.rst:415 #: ../../docs/tutorials/editor/default_key_mapping.rst:446 #: ../../docs/tutorials/editor/default_key_mapping.rst:459 #: ../../docs/tutorials/editor/default_key_mapping.rst:482 #: ../../docs/tutorials/editor/default_key_mapping.rst:499 #: ../../docs/tutorials/editor/default_key_mapping.rst:538 #: ../../docs/tutorials/editor/default_key_mapping.rst:565 msgid "Windows, Linux" msgstr "Windows" #: ../../docs/tutorials/editor/default_key_mapping.rst:32 #: ../../docs/tutorials/editor/default_key_mapping.rst:102 #: ../../docs/tutorials/editor/default_key_mapping.rst:123 #: ../../docs/tutorials/editor/default_key_mapping.rst:178 #: ../../docs/tutorials/editor/default_key_mapping.rst:255 #: ../../docs/tutorials/editor/default_key_mapping.rst:344 #: ../../docs/tutorials/editor/default_key_mapping.rst:391 #: ../../docs/tutorials/editor/default_key_mapping.rst:402 #: ../../docs/tutorials/editor/default_key_mapping.rst:415 #: ../../docs/tutorials/editor/default_key_mapping.rst:446 #: ../../docs/tutorials/editor/default_key_mapping.rst:459 #: ../../docs/tutorials/editor/default_key_mapping.rst:482 #: ../../docs/tutorials/editor/default_key_mapping.rst:499 #: ../../docs/tutorials/editor/default_key_mapping.rst:538 #: ../../docs/tutorials/editor/default_key_mapping.rst:565 msgid "Editor setting" msgstr "Trình biên tập" #: ../../docs/tutorials/editor/default_key_mapping.rst:34 #, fuzzy msgid "Open 2D Workspace" msgstr "Mở trình chỉnh sửa 2D" #: ../../docs/tutorials/editor/default_key_mapping.rst:34 msgid ":kbd:`Ctrl + F1`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:34 msgid ":kbd:`Cmd + Ctrl + 1`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:34 msgid "``editor/editor_2d``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:36 #, fuzzy msgid "Open 3D Workspace" msgstr "Mở trình chỉnh sửa 3D" #: ../../docs/tutorials/editor/default_key_mapping.rst:36 #: ../../docs/tutorials/editor/default_key_mapping.rst:463 msgid ":kbd:`Ctrl + F2`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:36 msgid ":kbd:`Cmd + Ctrl + 2`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:36 msgid "``editor/editor_3d``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:38 msgid "Open Script Editor" msgstr "Mở trình soạn tập lệnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:38 msgid ":kbd:`Ctrl + F3`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:38 msgid ":kbd:`Cmd + Ctrl + 3`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:38 msgid "``editor/editor_script``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:40 msgid "Search Help" msgstr "Tìm trợ giúp" #: ../../docs/tutorials/editor/default_key_mapping.rst:40 msgid ":kbd:`F1`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:40 msgid ":kbd:`Opt + Space`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:40 msgid "``editor/editor_help``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:42 msgid "Distraction Free Mode" msgstr "Chế độ tập trung" #: ../../docs/tutorials/editor/default_key_mapping.rst:42 msgid ":kbd:`Ctrl + Shift + F11`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:42 #: ../../docs/tutorials/editor/default_key_mapping.rst:486 msgid ":kbd:`Cmd + Shift + D`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:42 msgid "``editor/distraction_free_mode``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:44 #, fuzzy msgid "Next Scene Tab" msgstr "Cửa sổ tiếp theo" #: ../../docs/tutorials/editor/default_key_mapping.rst:44 msgid ":kbd:`Ctrl + Tab`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:44 msgid "``editor/next_tab``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:46 #, fuzzy msgid "Previous Scene Tab" msgstr "Cửa sổ trước" #: ../../docs/tutorials/editor/default_key_mapping.rst:46 msgid ":kbd:`Ctrl + Shift + Tab`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:46 msgid "``editor/prev_tab``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:48 msgid "Filter Files" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:48 msgid ":kbd:`Ctrl + Alt + P`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:48 msgid ":kbd:`Opt + Cmd + P`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:48 msgid "``editor/filter_files``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:50 msgid "Open Scene" msgstr "Mở Cảnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:50 msgid ":kbd:`Ctrl + O`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:50 msgid ":kbd:`Cmd + O`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:50 msgid "``editor/open_scene``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:52 msgid "Close Scene" msgstr "Đóng Cảnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:52 msgid ":kbd:`Ctrl + Shift + W`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:52 #: ../../docs/tutorials/editor/default_key_mapping.rst:374 msgid ":kbd:`Cmd + W`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:52 msgid "``editor/close_scene``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:54 msgid "Reopen Closed Scene" msgstr "Mở lại Cảnh đã đóng" #: ../../docs/tutorials/editor/default_key_mapping.rst:54 #: ../../docs/tutorials/editor/default_key_mapping.rst:362 msgid ":kbd:`Ctrl + Shift + T`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:54 #: ../../docs/tutorials/editor/default_key_mapping.rst:362 msgid ":kbd:`Cmd + Shift + T`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:54 msgid "``editor/reopen_closed_scene``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:56 msgid "Save Scene" msgstr "Lưu Cảnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:56 #: ../../docs/tutorials/editor/default_key_mapping.rst:571 msgid ":kbd:`Ctrl + S`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:56 #: ../../docs/tutorials/editor/default_key_mapping.rst:571 msgid ":kbd:`Cmd + S`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:56 msgid "``editor/save_scene``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:58 msgid "Save Scene As" msgstr "Scene (còn gọi là cảnh)" #: ../../docs/tutorials/editor/default_key_mapping.rst:58 msgid ":kbd:`Ctrl + Shift + S`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:58 msgid ":kbd:`Cmd + Shift + S`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:58 msgid "``editor/save_scene_as``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:60 msgid "Save All Scenes" msgstr "Lưu hết các Cảnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:60 #: ../../docs/tutorials/editor/default_key_mapping.rst:366 msgid ":kbd:`Ctrl + Shift + Alt + S`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:60 #: ../../docs/tutorials/editor/default_key_mapping.rst:366 msgid ":kbd:`Cmd + Shift + Opt + S`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:60 msgid "``editor/save_all_scenes``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:62 msgid "Quick Open" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:62 msgid ":kbd:`Shift + Alt + O`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:62 msgid ":kbd:`Cmd + Ctrl + O`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:62 msgid "``editor/quick_open``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:64 msgid "Quick Open Scene" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:64 msgid ":kbd:`Ctrl + Shift + O`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:64 msgid ":kbd:`Cmd + Shift + O`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:64 msgid "``editor/quick_open_scene``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:66 msgid "Quick Open Script" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:66 msgid ":kbd:`Ctrl + Alt + O`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:66 msgid ":kbd:`Opt + Cmd + O`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:66 msgid "``editor/quick_open_script``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:68 #: ../../docs/tutorials/editor/default_key_mapping.rst:277 msgid "Undo" msgstr "Hoàn tác" #: ../../docs/tutorials/editor/default_key_mapping.rst:68 #: ../../docs/tutorials/editor/default_key_mapping.rst:277 msgid ":kbd:`Ctrl + Z`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:68 #: ../../docs/tutorials/editor/default_key_mapping.rst:277 msgid ":kbd:`Cmd + Z`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:68 msgid "``editor/undo``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:70 #: ../../docs/tutorials/editor/default_key_mapping.rst:279 msgid "Redo" msgstr "Làm lại" #: ../../docs/tutorials/editor/default_key_mapping.rst:70 msgid ":kbd:`Ctrl + Shift + Z`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:70 msgid ":kbd:`Cmd + Shift + Z`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:70 msgid "``editor/redo``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:72 msgid "Quit" msgstr "Thoát" #: ../../docs/tutorials/editor/default_key_mapping.rst:72 msgid ":kbd:`Ctrl + Q`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:72 msgid ":kbd:`Cmd + Q`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:72 msgid "``editor/file_quit``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:74 msgid "Quit to Project List" msgstr "Thoát khỏi Danh sách Dự án" #: ../../docs/tutorials/editor/default_key_mapping.rst:74 msgid ":kbd:`Ctrl + Shift + Q`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:74 msgid ":kbd:`Shift + Opt + Q`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:74 msgid "``editor/quit_to_project_list``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:76 msgid "Take Screenshot" msgstr "Chụp màn hình" #: ../../docs/tutorials/editor/default_key_mapping.rst:76 msgid ":kbd:`Ctrl + F12`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:76 msgid ":kbd:`Cmd + F12`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:76 msgid "``editor/take_screenshot``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:78 msgid "Toggle Fullscreen" msgstr "Chế độ Toàn màn hình" #: ../../docs/tutorials/editor/default_key_mapping.rst:78 msgid ":kbd:`Shift + F11`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:78 msgid ":kbd:`Cmd + Ctrl + F`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:78 msgid "``editor/fullscreen_mode``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:80 msgid "Play" msgstr "Chạy" #: ../../docs/tutorials/editor/default_key_mapping.rst:80 #: ../../docs/tutorials/editor/default_key_mapping.rst:423 msgid ":kbd:`F5`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:80 #: ../../docs/tutorials/editor/default_key_mapping.rst:321 msgid ":kbd:`Cmd + B`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:80 msgid "``editor/play``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:82 msgid "Pause Scene" msgstr "Tạm dừng Cảnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:82 msgid ":kbd:`F7`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:82 msgid ":kbd:`Cmd + Ctrl + Y`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:82 msgid "``editor/pause_scene``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:84 msgid "Stop" msgstr "Dừng" #: ../../docs/tutorials/editor/default_key_mapping.rst:84 msgid ":kbd:`F8`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:84 #: ../../docs/tutorials/editor/default_key_mapping.rst:333 msgid ":kbd:`Cmd + .`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:84 msgid "``editor/stop``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:86 msgid "Play Scene" msgstr "Chạy Cảnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:86 msgid ":kbd:`F6`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:86 #: ../../docs/tutorials/editor/default_key_mapping.rst:575 msgid ":kbd:`Cmd + R`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:86 msgid "``editor/play_scene``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:88 msgid "Play Custom Scene" msgstr "Chạy Cảnh Tuỳ Chọn" #: ../../docs/tutorials/editor/default_key_mapping.rst:88 msgid ":kbd:`Ctrl + Shift + F5`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:88 #: ../../docs/tutorials/editor/default_key_mapping.rst:275 #: ../../docs/tutorials/editor/default_key_mapping.rst:368 msgid ":kbd:`Cmd + Shift + R`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:88 msgid "``editor/play_custom_scene``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:90 msgid "Expand Bottom Panel" msgstr "Mở rộng bảng điều khiển dưới" #: ../../docs/tutorials/editor/default_key_mapping.rst:90 msgid ":kbd:`Shift + F12`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:90 msgid "``editor/bottom_panel_expand``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:92 #, fuzzy msgid "Command Palette" msgstr "Sử dụng dòng lệnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:92 #: ../../docs/tutorials/editor/default_key_mapping.rst:161 msgid ":kbd:`Ctrl + Shift + P`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:92 #: ../../docs/tutorials/editor/default_key_mapping.rst:161 msgid ":kbd:`Cmd + Shift + P`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:92 msgid "``editor/command_palette``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:96 #, fuzzy msgid "Bottom panels" msgstr "Mở rộng bảng điều khiển dưới" #: ../../docs/tutorials/editor/default_key_mapping.rst:98 msgid "" "Only bottom panels that are always available have a default shortcut " "assigned. Others must be manually bound in the Editor Settings if desired." msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:104 #, fuzzy msgid "Toggle Last Opened Panel" msgstr "Hiện/Ẩn bảng tập lệnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:104 msgid ":kbd:`Ctrl + J`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:104 msgid "``editor/toggle_last_opened_bottom_panel``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:106 #, fuzzy msgid "Toggle Animation Bottom Panel" msgstr "Mở rộng bảng điều khiển dưới" #: ../../docs/tutorials/editor/default_key_mapping.rst:106 msgid ":kbd:`Alt + N`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:106 msgid "``bottom_panels/toggle_animation_bottom_panel``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:108 #, fuzzy msgid "Toggle Audio Bottom Panel" msgstr "Hiện/Ẩn bảng tập lệnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:108 msgid ":kbd:`Alt + A`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:108 msgid "``bottom_panels/toggle_audio_bottom_panel``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:110 #, fuzzy msgid "Toggle Debugger Bottom Panel" msgstr "Hiện/Ẩn bảng tập lệnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:110 msgid ":kbd:`Alt + D`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:110 msgid "``bottom_panels/toggle_debugger_bottom_panel``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:112 #, fuzzy msgid "Toggle FileSystem Bottom Panel" msgstr "Hiện/Ẩn bảng tập lệnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:112 #: ../../docs/tutorials/editor/default_key_mapping.rst:289 #: ../../docs/tutorials/editor/default_key_mapping.rst:427 msgid ":kbd:`Alt + F`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:112 msgid "``bottom_panels/toggle_filesystem_bottom_panel``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:114 #, fuzzy msgid "Toggle Output Bottom Panel" msgstr "Hiện/Ẩn bảng tập lệnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:114 msgid ":kbd:`Alt + O`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:114 msgid "``bottom_panels/toggle_output_bottom_panel``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:116 #, fuzzy msgid "Toggle Shader Editor Bottom Panel" msgstr "Hiện/Ẩn bảng tập lệnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:116 msgid ":kbd:`Alt + S`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:116 msgid "``bottom_panels/toggle_shader_editor_bottom_panel``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:120 msgid "2D / CanvasItem editor" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:125 #: ../../docs/tutorials/editor/default_key_mapping.rst:380 msgid "Zoom In" msgstr "Phóng to" #: ../../docs/tutorials/editor/default_key_mapping.rst:125 #: ../../docs/tutorials/editor/default_key_mapping.rst:380 msgid ":kbd:`Ctrl + =`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:125 #: ../../docs/tutorials/editor/default_key_mapping.rst:380 msgid ":kbd:`Cmd + =`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:125 msgid "``canvas_item_editor/zoom_plus``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:127 #: ../../docs/tutorials/editor/default_key_mapping.rst:382 msgid "Zoom Out" msgstr "Thu nhỏ" #: ../../docs/tutorials/editor/default_key_mapping.rst:127 #: ../../docs/tutorials/editor/default_key_mapping.rst:382 msgid ":kbd:`Ctrl + -`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:127 #: ../../docs/tutorials/editor/default_key_mapping.rst:382 msgid ":kbd:`Cmd + -`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:127 msgid "``canvas_item_editor/zoom_minus``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:129 msgid "Zoom Reset" msgstr "Đặt lại Thu phóng" #: ../../docs/tutorials/editor/default_key_mapping.rst:129 #: ../../docs/tutorials/editor/default_key_mapping.rst:384 msgid ":kbd:`Ctrl + 0`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:129 #: ../../docs/tutorials/editor/default_key_mapping.rst:384 msgid ":kbd:`Cmd + 0`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:129 msgid "``canvas_item_editor/zoom_reset``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:131 msgid "Pan View" msgstr "Di chuyển tầm nhìn" #: ../../docs/tutorials/editor/default_key_mapping.rst:131 msgid ":kbd:`Space`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:131 msgid "``canvas_item_editor/pan_view``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:133 #: ../../docs/tutorials/editor/default_key_mapping.rst:198 msgid "Select Mode" msgstr "Chế độ chọn" #: ../../docs/tutorials/editor/default_key_mapping.rst:133 #: ../../docs/tutorials/editor/default_key_mapping.rst:192 #: ../../docs/tutorials/editor/default_key_mapping.rst:198 msgid ":kbd:`Q`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:133 msgid "``canvas_item_editor/select_mode``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:135 #: ../../docs/tutorials/editor/default_key_mapping.rst:200 msgid "Move Mode" msgstr "Chế độ Di chuyển" #: ../../docs/tutorials/editor/default_key_mapping.rst:135 #: ../../docs/tutorials/editor/default_key_mapping.rst:186 #: ../../docs/tutorials/editor/default_key_mapping.rst:200 msgid ":kbd:`W`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:135 msgid "``canvas_item_editor/move_mode``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:137 #: ../../docs/tutorials/editor/default_key_mapping.rst:202 msgid "Rotate Mode" msgstr "Chế độ Xoay" #: ../../docs/tutorials/editor/default_key_mapping.rst:137 #: ../../docs/tutorials/editor/default_key_mapping.rst:190 #: ../../docs/tutorials/editor/default_key_mapping.rst:202 #: ../../docs/tutorials/editor/default_key_mapping.rst:523 msgid ":kbd:`E`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:137 msgid "``canvas_item_editor/rotate_mode``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:139 #: ../../docs/tutorials/editor/default_key_mapping.rst:204 msgid "Scale Mode" msgstr "Chế độ căn Tỉ lệ" #: ../../docs/tutorials/editor/default_key_mapping.rst:139 #: ../../docs/tutorials/editor/default_key_mapping.rst:188 #: ../../docs/tutorials/editor/default_key_mapping.rst:501 msgid ":kbd:`S`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:139 msgid "``canvas_item_editor/scale_mode``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:141 msgid "Ruler Mode" msgstr "Chế độ thước" #: ../../docs/tutorials/editor/default_key_mapping.rst:141 #: ../../docs/tutorials/editor/default_key_mapping.rst:204 #: ../../docs/tutorials/editor/default_key_mapping.rst:517 msgid ":kbd:`R`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:141 msgid "``canvas_item_editor/ruler_mode``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:143 msgid "Use Smart Snap" msgstr "Sử dụng Dính thông minh" #: ../../docs/tutorials/editor/default_key_mapping.rst:143 msgid ":kbd:`Shift + S`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:143 msgid "``canvas_item_editor/use_smart_snap``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:145 msgid "Use Grid Snap" msgstr "Sử dụng Dính lưới" #: ../../docs/tutorials/editor/default_key_mapping.rst:145 msgid ":kbd:`Shift + G`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:145 msgid "``canvas_item_editor/use_grid_snap``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:147 msgid "Multiply grid step by 2" msgstr "Gấp đôi bước lưới" #: ../../docs/tutorials/editor/default_key_mapping.rst:147 msgid ":kbd:`Num *`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:147 msgid "``canvas_item_editor/multiply_grid_step``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:149 msgid "Divide grid step by 2" msgstr "Chia đôi bước lưới" #: ../../docs/tutorials/editor/default_key_mapping.rst:149 msgid ":kbd:`Num /`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:149 msgid "``canvas_item_editor/divide_grid_step``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:151 msgid "Always Show Grid" msgstr "Luôn hiện lưới" #: ../../docs/tutorials/editor/default_key_mapping.rst:151 msgid ":kbd:`G`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:151 msgid "``canvas_item_editor/show_grid``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:153 msgid "Show Helpers" msgstr "Hiển thị trợ giúp" #: ../../docs/tutorials/editor/default_key_mapping.rst:153 msgid ":kbd:`H`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:153 msgid "``canvas_item_editor/show_helpers``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:155 msgid "Show Guides" msgstr "Hiện đường căn" #: ../../docs/tutorials/editor/default_key_mapping.rst:155 #: ../../docs/tutorials/editor/default_key_mapping.rst:208 msgid ":kbd:`Y`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:155 msgid "``canvas_item_editor/show_guides``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:157 msgid "Center Selection" msgstr "Căn giữa phần được chọn" #: ../../docs/tutorials/editor/default_key_mapping.rst:157 #: ../../docs/tutorials/editor/default_key_mapping.rst:230 msgid ":kbd:`F`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:157 msgid "``canvas_item_editor/center_selection``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:159 msgid "Frame Selection" msgstr "Lựa chọn khung hình" #: ../../docs/tutorials/editor/default_key_mapping.rst:159 #: ../../docs/tutorials/editor/default_key_mapping.rst:180 msgid ":kbd:`Shift + F`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:159 msgid "``canvas_item_editor/frame_selection``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:161 msgid "Preview Canvas Scale" msgstr "Xem trước tỉ lệ bức vẽ" #: ../../docs/tutorials/editor/default_key_mapping.rst:161 msgid "``canvas_item_editor/preview_canvas_scale``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:163 msgid "Insert Key" msgstr "Chèn khoá" #: ../../docs/tutorials/editor/default_key_mapping.rst:163 msgid ":kbd:`Ins`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:163 msgid "``canvas_item_editor/anim_insert_key``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:165 msgid "Insert Key (Existing Tracks)" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:165 msgid ":kbd:`Ctrl + Ins`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:165 msgid ":kbd:`Cmd + Ins`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:165 msgid "``canvas_item_editor/anim_insert_key_existing_tracks``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:167 msgid "Make Custom Bones from Nodes" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:167 #: ../../docs/tutorials/editor/default_key_mapping.rst:323 msgid ":kbd:`Ctrl + Shift + B`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:167 #: ../../docs/tutorials/editor/default_key_mapping.rst:323 #: ../../docs/tutorials/editor/default_key_mapping.rst:329 msgid ":kbd:`Cmd + Shift + B`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:167 msgid "``canvas_item_editor/skeleton_make_bones``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:169 msgid "Clear Pose" msgstr "Xoá sạch tư thế" #: ../../docs/tutorials/editor/default_key_mapping.rst:169 msgid ":kbd:`Shift + K`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:169 msgid "``canvas_item_editor/anim_clear_pose``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:175 msgid "3D / Spatial editor" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:180 msgid "Toggle Freelook" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:180 msgid "``spatial_editor/freelook_toggle``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:182 msgid "Freelook Left" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:182 msgid ":kbd:`A`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:182 msgid "``spatial_editor/freelook_left``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:184 msgid "Freelook Right" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:184 #: ../../docs/tutorials/editor/default_key_mapping.rst:513 msgid ":kbd:`D`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:184 msgid "``spatial_editor/freelook_right``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:186 msgid "Freelook Forward" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:186 msgid "``spatial_editor/freelook_forward``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:188 msgid "Freelook Backwards" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:188 msgid "``spatial_editor/freelook_backwards``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:190 msgid "Freelook Up" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:190 msgid "``spatial_editor/freelook_up``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:192 msgid "Freelook Down" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:192 msgid "``spatial_editor/freelook_down``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:194 msgid "Freelook Speed Modifier" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:194 msgid ":kbd:`Shift`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:194 msgid "``spatial_editor/freelook_speed_modifier``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:196 msgid "Freelook Slow Modifier" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:196 msgid ":kbd:`Alt`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:196 msgid ":kbd:`Opt`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:196 msgid "``spatial_editor/freelook_slow_modifier``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:198 msgid "``spatial_editor/tool_select``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:200 msgid "``spatial_editor/tool_move``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:202 msgid "``spatial_editor/tool_rotate``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:204 msgid "``spatial_editor/tool_scale``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:206 msgid "Use Local Space" msgstr "Sử dụng Không gian Cục bộ" #: ../../docs/tutorials/editor/default_key_mapping.rst:206 msgid ":kbd:`T`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:206 msgid "``spatial_editor/local_coords``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:208 msgid "Use Snap" msgstr "Sử dụng Dính" #: ../../docs/tutorials/editor/default_key_mapping.rst:208 msgid "``spatial_editor/snap``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:210 msgid "Snap Object to Floor" msgstr "Dính Vật lên Sàn" #: ../../docs/tutorials/editor/default_key_mapping.rst:210 #: ../../docs/tutorials/editor/default_key_mapping.rst:540 msgid ":kbd:`PgDown`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:210 msgid "``spatial_editor/snap_to_floor``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:212 msgid "Top View" msgstr "Góc nhìn đỉnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:212 msgid ":kbd:`Num 7`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:212 msgid "``spatial_editor/top_view``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:214 msgid "Bottom View" msgstr "Góc nhìn đáy" #: ../../docs/tutorials/editor/default_key_mapping.rst:214 msgid ":kbd:`Alt + Num 7`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:214 msgid ":kbd:`Opt + Num 7`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:214 msgid "``spatial_editor/bottom_view``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:216 msgid "Front View" msgstr "Góc nhìn trực diện" #: ../../docs/tutorials/editor/default_key_mapping.rst:216 msgid ":kbd:`Num 1`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:216 msgid "``spatial_editor/front_view``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:218 msgid "Rear View" msgstr "Góc nhìn lưng" #: ../../docs/tutorials/editor/default_key_mapping.rst:218 msgid ":kbd:`Alt + Num 1`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:218 msgid ":kbd:`Opt + Num 1`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:218 msgid "``spatial_editor/rear_view``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:220 msgid "Right View" msgstr "Góc nhìn phải" #: ../../docs/tutorials/editor/default_key_mapping.rst:220 msgid ":kbd:`Num 3`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:220 msgid "``spatial_editor/right_view``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:222 msgid "Left View" msgstr "Góc nhìn trái" #: ../../docs/tutorials/editor/default_key_mapping.rst:222 msgid ":kbd:`Alt + Num 3`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:222 msgid ":kbd:`Opt + Num 3`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:222 msgid "``spatial_editor/left_view``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:224 msgid "Switch Perspective/Orthogonal View" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:224 msgid ":kbd:`Num 5`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:224 msgid "``spatial_editor/switch_perspective_orthogonal``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:226 msgid "Insert Animation Key" msgstr "Chèn khóa Hoạt ảnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:226 msgid ":kbd:`K`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:226 msgid "``spatial_editor/insert_anim_key``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:228 msgid "Focus Origin" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:228 msgid ":kbd:`O`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:228 msgid "``spatial_editor/focus_origin``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:230 msgid "Focus Selection" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:230 msgid "``spatial_editor/focus_selection``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:232 msgid "Align Transform with View" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:232 msgid ":kbd:`Ctrl + Alt + M`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:232 msgid ":kbd:`Opt + Cmd + M`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:232 msgid "``spatial_editor/align_transform_with_view``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:234 msgid "Align Rotation with View" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:234 #: ../../docs/tutorials/editor/default_key_mapping.rst:325 msgid ":kbd:`Ctrl + Alt + F`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:234 #: ../../docs/tutorials/editor/default_key_mapping.rst:273 msgid ":kbd:`Opt + Cmd + F`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:234 msgid "``spatial_editor/align_rotation_with_view``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:236 msgid "1 Viewport" msgstr "1 Cổng xem" #: ../../docs/tutorials/editor/default_key_mapping.rst:236 msgid ":kbd:`Ctrl + 1`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:236 msgid ":kbd:`Cmd + 1`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:236 msgid "``spatial_editor/1_viewport``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:238 msgid "2 Viewports" msgstr "2 Cổng xem" #: ../../docs/tutorials/editor/default_key_mapping.rst:238 msgid ":kbd:`Ctrl + 2`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:238 msgid ":kbd:`Cmd + 2`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:238 msgid "``spatial_editor/2_viewports``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:240 msgid "2 Viewports (Alt)" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:240 msgid ":kbd:`Ctrl + Alt + 2`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:240 msgid ":kbd:`Opt + Cmd + 2`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:240 msgid "``spatial_editor/2_viewports_alt``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:242 msgid "3 Viewports" msgstr "3 Cổng xem" #: ../../docs/tutorials/editor/default_key_mapping.rst:242 msgid ":kbd:`Ctrl + 3`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:242 msgid ":kbd:`Cmd + 3`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:242 msgid "``spatial_editor/3_viewports``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:244 msgid "3 Viewports (Alt)" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:244 msgid ":kbd:`Ctrl + Alt + 3`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:244 msgid ":kbd:`Opt + Cmd + 3`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:244 msgid "``spatial_editor/3_viewports_alt``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:246 msgid "4 Viewports" msgstr "4 Cổng xem" #: ../../docs/tutorials/editor/default_key_mapping.rst:246 msgid ":kbd:`Ctrl + 4`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:246 msgid ":kbd:`Cmd + 4`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:246 msgid "``spatial_editor/4_viewports``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:252 #, fuzzy msgid "Text editor" msgstr "Trình soạn thảo" #: ../../docs/tutorials/editor/default_key_mapping.rst:257 msgid "Cut" msgstr "Cắt" #: ../../docs/tutorials/editor/default_key_mapping.rst:257 #: ../../docs/tutorials/editor/default_key_mapping.rst:503 msgid ":kbd:`Ctrl + X`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:257 #: ../../docs/tutorials/editor/default_key_mapping.rst:503 msgid ":kbd:`Cmd + X`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:257 msgid "``script_text_editor/cut``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:259 msgid "Copy" msgstr "Sao chép" #: ../../docs/tutorials/editor/default_key_mapping.rst:259 #: ../../docs/tutorials/editor/default_key_mapping.rst:393 #: ../../docs/tutorials/editor/default_key_mapping.rst:448 #: ../../docs/tutorials/editor/default_key_mapping.rst:505 msgid ":kbd:`Ctrl + C`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:259 #: ../../docs/tutorials/editor/default_key_mapping.rst:393 #: ../../docs/tutorials/editor/default_key_mapping.rst:448 #: ../../docs/tutorials/editor/default_key_mapping.rst:505 msgid ":kbd:`Cmd + C`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:259 msgid "``script_text_editor/copy``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:261 msgid "Paste" msgstr "Dán" #: ../../docs/tutorials/editor/default_key_mapping.rst:261 #: ../../docs/tutorials/editor/default_key_mapping.rst:507 msgid ":kbd:`Ctrl + V`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:261 #: ../../docs/tutorials/editor/default_key_mapping.rst:507 msgid ":kbd:`Cmd + V`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:261 msgid "``script_text_editor/paste``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:263 msgid "Select All" msgstr "Chọn Toàn Bộ" #: ../../docs/tutorials/editor/default_key_mapping.rst:263 #: ../../docs/tutorials/editor/default_key_mapping.rst:461 msgid ":kbd:`Ctrl + A`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:263 #: ../../docs/tutorials/editor/default_key_mapping.rst:461 msgid ":kbd:`Cmd + A`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:263 msgid "``script_text_editor/select_all``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:265 #: ../../docs/tutorials/editor/default_key_mapping.rst:346 msgid "Find" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:265 #: ../../docs/tutorials/editor/default_key_mapping.rst:346 msgid ":kbd:`Ctrl + F`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:265 #: ../../docs/tutorials/editor/default_key_mapping.rst:346 msgid ":kbd:`Cmd + F`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:265 msgid "``script_text_editor/find``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:267 #: ../../docs/tutorials/editor/default_key_mapping.rst:348 msgid "Find Next" msgstr "Tìm tiếp" #: ../../docs/tutorials/editor/default_key_mapping.rst:267 #: ../../docs/tutorials/editor/default_key_mapping.rst:348 msgid ":kbd:`F3`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:267 msgid ":kbd:`Cmd + G`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:267 msgid "``script_text_editor/find_next``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:269 #: ../../docs/tutorials/editor/default_key_mapping.rst:350 msgid "Find Previous" msgstr "Tìm trước đó" #: ../../docs/tutorials/editor/default_key_mapping.rst:269 #: ../../docs/tutorials/editor/default_key_mapping.rst:350 msgid ":kbd:`Shift + F3`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:269 #: ../../docs/tutorials/editor/default_key_mapping.rst:435 msgid ":kbd:`Cmd + Shift + G`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:269 msgid "``script_text_editor/find_previous``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:271 #: ../../docs/tutorials/editor/default_key_mapping.rst:352 msgid "Find in Files" msgstr "Tìm trong các Tệp tin" #: ../../docs/tutorials/editor/default_key_mapping.rst:271 #: ../../docs/tutorials/editor/default_key_mapping.rst:352 msgid ":kbd:`Ctrl + Shift + F`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:271 #: ../../docs/tutorials/editor/default_key_mapping.rst:352 msgid ":kbd:`Cmd + Shift + F`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:271 msgid "``script_text_editor/find_in_files``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:273 msgid "Replace" msgstr "Thay thế" #: ../../docs/tutorials/editor/default_key_mapping.rst:273 #: ../../docs/tutorials/editor/default_key_mapping.rst:575 msgid ":kbd:`Ctrl + R`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:273 msgid "``script_text_editor/replace``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:275 msgid "Replace in Files" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:275 #: ../../docs/tutorials/editor/default_key_mapping.rst:368 msgid ":kbd:`Ctrl + Shift + R`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:275 msgid "``script_text_editor/replace_in_files``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:277 msgid "``script_text_editor/undo``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:279 msgid ":kbd:`Ctrl + Y`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:279 msgid ":kbd:`Cmd + Y`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:279 msgid "``script_text_editor/redo``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:281 #: ../../docs/tutorials/editor/default_key_mapping.rst:354 #: ../../docs/tutorials/editor/default_key_mapping.rst:473 msgid "Move Up" msgstr "Nâng nút lên" #: ../../docs/tutorials/editor/default_key_mapping.rst:281 #: ../../docs/tutorials/editor/default_key_mapping.rst:421 msgid ":kbd:`Alt + Up Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:281 #: ../../docs/tutorials/editor/default_key_mapping.rst:421 msgid ":kbd:`Opt + Up Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:281 msgid "``script_text_editor/move_up``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:283 #: ../../docs/tutorials/editor/default_key_mapping.rst:356 #: ../../docs/tutorials/editor/default_key_mapping.rst:475 msgid "Move Down" msgstr "Hạ nút xuống" #: ../../docs/tutorials/editor/default_key_mapping.rst:283 msgid ":kbd:`Alt + Down Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:283 msgid ":kbd:`Opt + Down Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:283 msgid "``script_text_editor/move_down``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:285 msgid "Delete Line" msgstr "Xóa dòng" #: ../../docs/tutorials/editor/default_key_mapping.rst:285 #: ../../docs/tutorials/editor/default_key_mapping.rst:395 msgid ":kbd:`Ctrl + Shift + K`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:285 #: ../../docs/tutorials/editor/default_key_mapping.rst:395 msgid ":kbd:`Cmd + Shift + K`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:285 msgid "``script_text_editor/delete_line``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:287 msgid "Toggle Comment" msgstr "Bật/tắt chú thích" #: ../../docs/tutorials/editor/default_key_mapping.rst:287 msgid ":kbd:`Ctrl + K`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:287 msgid ":kbd:`Cmd + K`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:287 msgid "``script_text_editor/toggle_comment``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:289 msgid "Fold/Unfold Line" msgstr "Cuộn/Trải dòng" #: ../../docs/tutorials/editor/default_key_mapping.rst:289 msgid ":kbd:`Ctrl + Cmd + F`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:289 msgid "``script_text_editor/toggle_fold_line``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:291 #, fuzzy msgid "Duplicate Lines" msgstr "Nhân đôi" #: ../../docs/tutorials/editor/default_key_mapping.rst:291 msgid ":kbd:`Ctrl + Alt + Down Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:291 msgid ":kbd:`Cmd + Shift + Down Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:291 msgid "``script_text_editor/duplicate_lines``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:293 #: ../../docs/tutorials/editor/default_key_mapping.rst:484 msgid "Duplicate Selection" msgstr "Nhân đôi lựa chọn" #: ../../docs/tutorials/editor/default_key_mapping.rst:293 #: ../../docs/tutorials/editor/default_key_mapping.rst:486 msgid ":kbd:`Ctrl + Shift + D`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:293 msgid ":kbd:`Cmd + Shift + C`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:293 msgid "``script_text_editor/duplicate_selection``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:295 #, fuzzy msgid "Select Down" msgstr "Cắt lựa chọn" #: ../../docs/tutorials/editor/default_key_mapping.rst:295 msgid ":kbd:`Ctrl + Shift + Down Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:295 #: ../../docs/tutorials/editor/default_key_mapping.rst:356 msgid ":kbd:`Shift + Opt + Down Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:295 msgid "``common/ui_text_caret_add_below``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:297 #, fuzzy msgid "Select Up" msgstr "Chọn" #: ../../docs/tutorials/editor/default_key_mapping.rst:297 msgid ":kbd:`Ctrl + Shift + Up Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:297 #: ../../docs/tutorials/editor/default_key_mapping.rst:354 msgid ":kbd:`Shift + Opt + Up Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:297 msgid "``common/ui_text_caret_add_above``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:299 msgid "Select Next Occurrence" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:299 #: ../../docs/tutorials/editor/default_key_mapping.rst:450 #: ../../docs/tutorials/editor/default_key_mapping.rst:471 #: ../../docs/tutorials/editor/default_key_mapping.rst:484 msgid ":kbd:`Ctrl + D`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:299 #: ../../docs/tutorials/editor/default_key_mapping.rst:450 #: ../../docs/tutorials/editor/default_key_mapping.rst:471 #: ../../docs/tutorials/editor/default_key_mapping.rst:484 msgid ":kbd:`Cmd + D`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:299 msgid "``common/ui_text_add_selection_for_next_occurrence``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:301 msgid "Complete Symbol" msgstr "Hoàn thiện kí hiệu" #: ../../docs/tutorials/editor/default_key_mapping.rst:301 msgid ":kbd:`Ctrl + Space`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:301 msgid "``script_text_editor/complete_symbol``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:303 msgid "Evaluate Selection" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:303 msgid ":kbd:`Ctrl + Shift + E`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:303 msgid ":kbd:`Cmd + Shift + E`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:303 msgid "``script_text_editor/evaluate_selection``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:305 msgid "Trim Trailing Whitespace" msgstr "Xóa khoảng trắng cuối dòng" #: ../../docs/tutorials/editor/default_key_mapping.rst:305 msgid ":kbd:`Ctrl + Alt + T`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:305 msgid ":kbd:`Opt + Cmd + T`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:305 msgid "``script_text_editor/trim_trailing_whitespace``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:307 msgid "Uppercase" msgstr "Chữ hoa" #: ../../docs/tutorials/editor/default_key_mapping.rst:307 msgid ":kbd:`Shift + F4`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:307 msgid "``script_text_editor/convert_to_uppercase``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:309 msgid "Lowercase" msgstr "Chữ thường" #: ../../docs/tutorials/editor/default_key_mapping.rst:309 msgid ":kbd:`Shift + F5`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:309 msgid "``script_text_editor/convert_to_lowercase``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:311 msgid "Capitalize" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:311 msgid ":kbd:`Shift + F6`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:311 msgid "``script_text_editor/capitalize``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:313 msgid "Convert Indent to Spaces" msgstr "Chuyển thụt lề thành Dấu cách" #: ../../docs/tutorials/editor/default_key_mapping.rst:313 msgid ":kbd:`Ctrl + Shift + Y`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:313 msgid ":kbd:`Cmd + Shift + Y`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:313 msgid "``script_text_editor/convert_indent_to_spaces``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:315 msgid "Convert Indent to Tabs" msgstr "Chuyển thụt lề thành Tab" #: ../../docs/tutorials/editor/default_key_mapping.rst:315 msgid ":kbd:`Ctrl + Shift + I`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:315 msgid ":kbd:`Cmd + Shift + I`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:315 msgid "``script_text_editor/convert_indent_to_tabs``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:317 msgid "Auto Indent" msgstr "Thụt lề Tự động" #: ../../docs/tutorials/editor/default_key_mapping.rst:317 #: ../../docs/tutorials/editor/default_key_mapping.rst:569 msgid ":kbd:`Ctrl + I`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:317 #: ../../docs/tutorials/editor/default_key_mapping.rst:569 msgid ":kbd:`Cmd + I`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:317 msgid "``script_text_editor/auto_indent``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:319 msgid "Toggle Bookmark" msgstr "Bật tắt Dấu trang" #: ../../docs/tutorials/editor/default_key_mapping.rst:319 msgid ":kbd:`Ctrl + Alt + B`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:319 msgid ":kbd:`Opt + Cmd + B`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:319 msgid "``script_text_editor/toggle_bookmark``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:321 msgid "Go to Next Bookmark" msgstr "Đến Dấu trang tiếp theo" #: ../../docs/tutorials/editor/default_key_mapping.rst:321 msgid ":kbd:`Ctrl + B`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:321 msgid "``script_text_editor/goto_next_bookmark``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:323 msgid "Go to Previous Bookmark" msgstr "Đến Dấu trang trước đó" #: ../../docs/tutorials/editor/default_key_mapping.rst:323 msgid "``script_text_editor/goto_previous_bookmark``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:325 msgid "Go to Function" msgstr "Đi tới hàm" #: ../../docs/tutorials/editor/default_key_mapping.rst:325 msgid ":kbd:`Ctrl + Cmd + J`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:325 msgid "``script_text_editor/goto_function``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:327 msgid "Go to Line" msgstr "Đến Dòng" #: ../../docs/tutorials/editor/default_key_mapping.rst:327 #: ../../docs/tutorials/editor/default_key_mapping.rst:435 msgid ":kbd:`Ctrl + L`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:327 msgid ":kbd:`Cmd + L`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:327 msgid "``script_text_editor/goto_line``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:329 msgid "Toggle Breakpoint" msgstr "Tạo điểm dừng" #: ../../docs/tutorials/editor/default_key_mapping.rst:329 msgid ":kbd:`F9`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:329 msgid "``script_text_editor/toggle_breakpoint``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:331 msgid "Remove All Breakpoints" msgstr "Xóa hết mọi điểm dừng" #: ../../docs/tutorials/editor/default_key_mapping.rst:331 msgid ":kbd:`Ctrl + Shift + F9`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:331 msgid ":kbd:`Cmd + Shift + F9`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:331 msgid "``script_text_editor/remove_all_breakpoints``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:333 msgid "Go to Next Breakpoint" msgstr "Đến điểm dừng tiếp theo" #: ../../docs/tutorials/editor/default_key_mapping.rst:333 msgid ":kbd:`Ctrl + .`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:333 msgid "``script_text_editor/goto_next_breakpoint``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:335 msgid "Go to Previous Breakpoint" msgstr "Đến điểm dừng trước đó" #: ../../docs/tutorials/editor/default_key_mapping.rst:335 msgid ":kbd:`Ctrl + ,`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:335 msgid ":kbd:`Cmd + ,`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:335 msgid "``script_text_editor/goto_previous_breakpoint``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:337 msgid "Contextual Help" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:337 msgid ":kbd:`Alt + F1`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:337 msgid ":kbd:`Opt + Shift + Space`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:337 msgid "``script_text_editor/contextual_help``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:341 #, fuzzy msgid "Script editor" msgstr "Trình soạn tập lệnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:346 msgid "``script_editor/find``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:348 msgid "``script_editor/find_next``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:350 msgid "``script_editor/find_previous``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:352 msgid "``script_editor/find_in_files``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:354 msgid ":kbd:`Shift + Alt + Up Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:354 msgid "``script_editor/window_move_up``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:356 msgid ":kbd:`Shift + Alt + Down Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:356 msgid "``script_editor/window_move_down``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:358 msgid "Next Script" msgstr "GDScript" #: ../../docs/tutorials/editor/default_key_mapping.rst:358 msgid ":kbd:`Ctrl + Shift + .`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:358 msgid ":kbd:`Cmd + Shift + .`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:358 msgid "``script_editor/next_script``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:360 msgid "Previous Script" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:360 msgid ":kbd:`Ctrl + Shift + ,`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:360 msgid ":kbd:`Cmd + Shift + ,`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:360 msgid "``script_editor/prev_script``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:362 msgid "Reopen Closed Script" msgstr "Mở lại tệp lệnh đã đóng" #: ../../docs/tutorials/editor/default_key_mapping.rst:362 msgid "``script_editor/reopen_closed_script``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:364 msgid "Save" msgstr "Lưu" #: ../../docs/tutorials/editor/default_key_mapping.rst:364 msgid ":kbd:`Ctrl + Alt + S`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:364 msgid ":kbd:`Opt + Cmd + S`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:364 msgid "``script_editor/save``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:366 msgid "Save All" msgstr "Lưu tất cả" #: ../../docs/tutorials/editor/default_key_mapping.rst:366 msgid "``script_editor/save_all``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:368 msgid "Soft Reload Script" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:368 msgid "``script_editor/reload_script_soft``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:370 msgid "History Previous" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:370 #: ../../docs/tutorials/editor/default_key_mapping.rst:417 msgid ":kbd:`Alt + Left Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:370 #: ../../docs/tutorials/editor/default_key_mapping.rst:417 msgid ":kbd:`Opt + Left Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:370 msgid "``script_editor/history_previous``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:372 msgid "History Next" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:372 #: ../../docs/tutorials/editor/default_key_mapping.rst:419 msgid ":kbd:`Alt + Right Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:372 #: ../../docs/tutorials/editor/default_key_mapping.rst:419 msgid ":kbd:`Opt + Right Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:372 msgid "``script_editor/history_next``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:374 msgid "Close" msgstr "Đóng" #: ../../docs/tutorials/editor/default_key_mapping.rst:374 msgid ":kbd:`Ctrl + W`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:374 msgid "``script_editor/close_file``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:376 #: ../../docs/engine_details/development/compiling/compiling_for_ios.rst:86 msgid "Run" msgstr "Chạy" #: ../../docs/tutorials/editor/default_key_mapping.rst:376 msgid ":kbd:`Ctrl + Shift + X`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:376 msgid ":kbd:`Cmd + Shift + X`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:376 msgid "``script_editor/run_file``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:378 msgid "Toggle Scripts Panel" msgstr "Hiện/Ẩn bảng tập lệnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:378 msgid ":kbd:`Ctrl + \\\\`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:378 msgid ":kbd:`Cmd + \\\\`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:378 msgid "``script_editor/toggle_scripts_panel``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:380 msgid "``script_editor/zoom_in``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:382 msgid "``script_editor/zoom_out``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:384 msgid "Reset Zoom" msgstr "Đặt lại độ phóng" #: ../../docs/tutorials/editor/default_key_mapping.rst:384 msgid "``script_editor/reset_zoom``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:388 #, fuzzy msgid "Editor output" msgstr "Editor (trình biên tập)" #: ../../docs/tutorials/editor/default_key_mapping.rst:393 #: ../../docs/tutorials/editor/default_key_mapping.rst:505 msgid "Copy Selection" msgstr "Sao chép lựa chọn" #: ../../docs/tutorials/editor/default_key_mapping.rst:393 msgid "``editor/copy_output``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:395 msgid "Clear Output" msgstr "Xoá đầu ra" #: ../../docs/tutorials/editor/default_key_mapping.rst:395 msgid "``editor/clear_output``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:399 msgid "Debugger" msgstr "Trình gỡ lỗi" #: ../../docs/tutorials/editor/default_key_mapping.rst:404 msgid "Step Into" msgstr "Bước vào" #: ../../docs/tutorials/editor/default_key_mapping.rst:404 msgid ":kbd:`F11`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:404 msgid "``debugger/step_into``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:406 msgid "Step Over" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:406 msgid ":kbd:`F10`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:406 msgid "``debugger/step_over``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:408 msgid "Continue" msgstr "Tiếp tục" #: ../../docs/tutorials/editor/default_key_mapping.rst:408 msgid ":kbd:`F12`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:408 msgid "``debugger/continue``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:412 #, fuzzy msgid "File dialog" msgstr "Hộp thoại tệp" #: ../../docs/tutorials/editor/default_key_mapping.rst:417 msgid "Go Back" msgstr "Trở lại" #: ../../docs/tutorials/editor/default_key_mapping.rst:417 msgid "``file_dialog/go_back``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:419 msgid "Go Forward" msgstr "Tiến tới" #: ../../docs/tutorials/editor/default_key_mapping.rst:419 msgid "``file_dialog/go_forward``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:421 msgid "Go Up" msgstr "Đi Lên" #: ../../docs/tutorials/editor/default_key_mapping.rst:421 msgid "``file_dialog/go_up``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:423 msgid "Refresh" msgstr "Làm mới" #: ../../docs/tutorials/editor/default_key_mapping.rst:423 msgid "``file_dialog/refresh``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:425 msgid "Toggle Hidden Files" msgstr "Bật tắt File ẩn" #: ../../docs/tutorials/editor/default_key_mapping.rst:425 msgid ":kbd:`Ctrl + H`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:425 msgid ":kbd:`Cmd + H`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:425 msgid "``file_dialog/toggle_hidden_files``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:427 msgid "Toggle Favorite" msgstr "Bật tắt Ưa thích" #: ../../docs/tutorials/editor/default_key_mapping.rst:427 msgid ":kbd:`Opt + F`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:427 msgid "``file_dialog/toggle_favorite``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:429 msgid "Toggle Mode" msgstr "Bật tắt Chức năng" #: ../../docs/tutorials/editor/default_key_mapping.rst:429 msgid ":kbd:`Alt + V`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:429 msgid ":kbd:`Opt + V`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:429 msgid "``file_dialog/toggle_mode``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:431 msgid "Create Folder" msgstr "Tạo thư mục" #: ../../docs/tutorials/editor/default_key_mapping.rst:431 #: ../../docs/tutorials/editor/default_key_mapping.rst:567 msgid ":kbd:`Ctrl + N`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:431 #: ../../docs/tutorials/editor/default_key_mapping.rst:567 msgid ":kbd:`Cmd + N`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:431 msgid "``file_dialog/create_folder``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:433 #: ../../docs/tutorials/editor/default_key_mapping.rst:452 #: ../../docs/tutorials/editor/default_key_mapping.rst:467 msgid "Delete" msgstr "Xóa" #: ../../docs/tutorials/editor/default_key_mapping.rst:433 #: ../../docs/tutorials/editor/default_key_mapping.rst:452 #: ../../docs/tutorials/editor/default_key_mapping.rst:467 #: ../../docs/tutorials/editor/default_key_mapping.rst:488 #: ../../docs/tutorials/editor/default_key_mapping.rst:509 msgid ":kbd:`Del`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:433 #: ../../docs/tutorials/editor/default_key_mapping.rst:452 #: ../../docs/tutorials/editor/default_key_mapping.rst:467 #: ../../docs/tutorials/editor/default_key_mapping.rst:488 #: ../../docs/tutorials/editor/default_key_mapping.rst:509 #: ../../docs/tutorials/editor/default_key_mapping.rst:579 msgid ":kbd:`Cmd + BkSp`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:433 msgid "``file_dialog/delete``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:435 msgid "Focus Path" msgstr "Đường dẫn Tập trung" #: ../../docs/tutorials/editor/default_key_mapping.rst:435 msgid "``file_dialog/focus_path``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:437 msgid "Move Favorite Up" msgstr "Di chuyển mục Ưa thích lên" #: ../../docs/tutorials/editor/default_key_mapping.rst:437 #: ../../docs/tutorials/editor/default_key_mapping.rst:473 msgid ":kbd:`Ctrl + Up Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:437 #: ../../docs/tutorials/editor/default_key_mapping.rst:473 msgid ":kbd:`Cmd + Up Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:437 msgid "``file_dialog/move_favorite_up``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:439 msgid "Move Favorite Down" msgstr "Di chuyển mục Ưa thích xuống" #: ../../docs/tutorials/editor/default_key_mapping.rst:439 #: ../../docs/tutorials/editor/default_key_mapping.rst:475 msgid ":kbd:`Ctrl + Down Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:439 #: ../../docs/tutorials/editor/default_key_mapping.rst:475 msgid ":kbd:`Cmd + Down Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:439 msgid "``file_dialog/move_favorite_down``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:443 #, fuzzy msgid "FileSystem dock" msgstr "Khung Hệ thống tập tin" #: ../../docs/tutorials/editor/default_key_mapping.rst:448 msgid "Copy Path" msgstr "Sao chép đường dẫn" #: ../../docs/tutorials/editor/default_key_mapping.rst:448 msgid "``filesystem_dock/copy_path``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:450 #: ../../docs/tutorials/editor/default_key_mapping.rst:471 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_collections.rst:130 #: ../../docs/tutorials/scripting/c_sharp/c_sharp_collections.rst:219 msgid "Duplicate" msgstr "Nhân đôi" #: ../../docs/tutorials/editor/default_key_mapping.rst:450 msgid "``filesystem_dock/duplicate``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:452 msgid "``filesystem_dock/delete``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:456 #, fuzzy msgid "Scene tree dock" msgstr "Trình chỉnh sửa scene với cấu trúc dạng cây." #: ../../docs/tutorials/editor/default_key_mapping.rst:461 msgid "Add Child Node" msgstr "Thêm nút con" #: ../../docs/tutorials/editor/default_key_mapping.rst:461 msgid "``scene_tree/add_child_node``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:463 msgid "Batch Rename" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:463 msgid ":kbd:`Cmd + F2`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:463 msgid "``scene_tree/batch_rename``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:465 msgid "Copy Node Path" msgstr "Sao chép đường dẫn nút" #: ../../docs/tutorials/editor/default_key_mapping.rst:465 msgid ":kbd:`Ctrl + Shift + C`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:465 msgid ":kbd:`Cmd + Shift + C`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:465 msgid "``scene_tree/copy_node_path``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:467 msgid "``scene_tree/delete``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:469 msgid "Force Delete" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:469 msgid ":kbd:`Shift + Del`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:469 msgid "``scene_tree/delete_no_confirm``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:471 msgid "``scene_tree/duplicate``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:473 msgid "``scene_tree/move_up``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:475 msgid "``scene_tree/move_down``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:479 #, fuzzy msgid "Animation track editor" msgstr "Cây Hoạt ảnh" #: ../../docs/tutorials/editor/default_key_mapping.rst:484 msgid "``animation_editor/duplicate_selection``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:486 msgid "Duplicate Transposed" msgstr "Chuyển đổi trùng lặp" #: ../../docs/tutorials/editor/default_key_mapping.rst:486 msgid "``animation_editor/duplicate_selection_transposed``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:488 #: ../../docs/tutorials/editor/default_key_mapping.rst:509 msgid "Delete Selection" msgstr "Xoá lựa chọn" #: ../../docs/tutorials/editor/default_key_mapping.rst:488 msgid "``animation_editor/delete_selection``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:490 msgid "Go to Next Step" msgstr "Đến Bước tiếp theo" #: ../../docs/tutorials/editor/default_key_mapping.rst:490 msgid ":kbd:`Ctrl + Right Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:490 msgid ":kbd:`Cmd + Right Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:490 msgid "``animation_editor/goto_next_step``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:492 msgid "Go to Previous Step" msgstr "Đến Bước trước đó" #: ../../docs/tutorials/editor/default_key_mapping.rst:492 msgid ":kbd:`Ctrl + Left Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:492 msgid ":kbd:`Cmd + Left Arrow`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:492 msgid "``animation_editor/goto_prev_step``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:496 #, fuzzy msgid "TileMap editor" msgstr "Editor (trình biên tập)" #: ../../docs/tutorials/editor/default_key_mapping.rst:501 msgid "Select" msgstr "Chọn" #: ../../docs/tutorials/editor/default_key_mapping.rst:501 msgid "``tiles_editor/selection_tool``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:503 msgid "Cut Selection" msgstr "Cắt lựa chọn" #: ../../docs/tutorials/editor/default_key_mapping.rst:503 msgid "``tiles_editor/cut``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:505 msgid "``tiles_editor/copy``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:507 #, fuzzy msgid "Paste Selection" msgstr "Xóa Lựa chọn" #: ../../docs/tutorials/editor/default_key_mapping.rst:507 msgid "``tiles_editor/paste``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:509 msgid "``tiles_editor/delete``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:511 msgid "Cancel" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:511 msgid ":kbd:`Esc`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:511 msgid "``tiles_editor/cancel``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:513 #: ../../docs/tutorials/2d/using_tilemaps.rst:224 msgid "Paint" msgstr "Tô ô" #: ../../docs/tutorials/editor/default_key_mapping.rst:513 msgid "``tiles_editor/paint_tool``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:515 #: ../../docs/tutorials/2d/using_tilemaps.rst:253 msgid "Line" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:515 msgid ":kbd:`L`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:515 msgid "``tiles_editor/line_tool``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:517 msgid "Rect" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:517 msgid "``tiles_editor/rect_tool``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:519 msgid "Bucket" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:519 msgid ":kbd:`B`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:519 msgid "``tiles_editor/bucket_tool``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:521 #: ../../docs/tutorials/2d/using_tilemaps.rst:316 msgid "Picker" msgstr "Màu" #: ../../docs/tutorials/editor/default_key_mapping.rst:521 msgid ":kbd:`P`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:521 msgid "``tiles_editor/picker``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:523 #: ../../docs/tutorials/2d/using_tilemaps.rst:328 msgid "Eraser" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:523 msgid "``tiles_editor/eraser``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:525 msgid "Flip Horizontally" msgstr "Lật Ngang" #: ../../docs/tutorials/editor/default_key_mapping.rst:525 msgid ":kbd:`C`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:525 msgid "``tiles_editor/flip_tile_horizontal``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:527 msgid "Flip Vertically" msgstr "Lật Dọc" #: ../../docs/tutorials/editor/default_key_mapping.rst:527 msgid ":kbd:`V`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:527 msgid "``tiles_editor/flip_tile_vertical``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:529 msgid "Rotate Left" msgstr "Xoay Trái" #: ../../docs/tutorials/editor/default_key_mapping.rst:529 msgid ":kbd:`Z`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:529 msgid "``tiles_editor/rotate_tile_left``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:531 msgid "Rotate Right" msgstr "Xoay Phải" #: ../../docs/tutorials/editor/default_key_mapping.rst:531 msgid ":kbd:`X`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:531 msgid "``tiles_editor/rotate_tile_right``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:535 #, fuzzy msgid "TileSet Editor" msgstr "Editor (trình biên tập)" #: ../../docs/tutorials/editor/default_key_mapping.rst:540 msgid "Next Coordinate" msgstr "Tọa độ tiếp theo" #: ../../docs/tutorials/editor/default_key_mapping.rst:540 msgid "``tileset_editor/next_shape``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:542 msgid "Previous Coordinate" msgstr "Tọa độ trước" #: ../../docs/tutorials/editor/default_key_mapping.rst:542 msgid ":kbd:`PgUp`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:542 msgid "``tileset_editor/previous_shape``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:544 msgid "Region Mode" msgstr "Tạo các node" #: ../../docs/tutorials/editor/default_key_mapping.rst:544 msgid ":kbd:`1`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:544 msgid "``tileset_editor/editmode_region``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:546 msgid "Collision Mode" msgstr "Chế độ va chạm" #: ../../docs/tutorials/editor/default_key_mapping.rst:546 msgid ":kbd:`2`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:546 msgid "``tileset_editor/editmode_collision``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:548 msgid "Occlusion Mode" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:548 msgid ":kbd:`3`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:548 msgid "``tileset_editor/editmode_occlusion``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:550 msgid "Navigation Mode" msgstr "Chế độ di chuyển" #: ../../docs/tutorials/editor/default_key_mapping.rst:550 msgid ":kbd:`4`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:550 msgid "``tileset_editor/editmode_navigation``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:552 msgid "Bitmask Mode" msgstr "Chế độ Bitmask" #: ../../docs/tutorials/editor/default_key_mapping.rst:552 msgid ":kbd:`5`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:552 msgid "``tileset_editor/editmode_bitmask``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:554 msgid "Priority Mode" msgstr "Chế độ Ưu tiên" #: ../../docs/tutorials/editor/default_key_mapping.rst:554 msgid ":kbd:`6`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:554 msgid "``tileset_editor/editmode_priority``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:556 msgid "Icon Mode" msgstr "Chế độ biểu tượng" #: ../../docs/tutorials/editor/default_key_mapping.rst:556 msgid ":kbd:`7`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:556 msgid "``tileset_editor/editmode_icon``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:558 msgid "Z Index Mode" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:558 msgid ":kbd:`8`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:558 msgid "``tileset_editor/editmode_z_index``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:562 #, fuzzy msgid "Project manager" msgstr "Project Manager" #: ../../docs/tutorials/editor/default_key_mapping.rst:567 #, fuzzy msgid "New Project" msgstr "Tạo một dự án mới" #: ../../docs/tutorials/editor/default_key_mapping.rst:567 msgid "``project_manager/new_project``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:569 #, fuzzy msgid "Import Project" msgstr "Tạo một dự án mới" #: ../../docs/tutorials/editor/default_key_mapping.rst:569 msgid "``project_manager/import_project``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:571 msgid "Scan for Projects" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:571 msgid "``project_manager/scan_projects``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:573 #, fuzzy msgid "Edit Project" msgstr "Giới Thiệu" #: ../../docs/tutorials/editor/default_key_mapping.rst:573 msgid ":kbd:`Ctrl + E`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:573 msgid ":kbd:`Cmd + E`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:573 msgid "``project_manager/edit_project``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:575 #, fuzzy msgid "Run Project" msgstr "Giới Thiệu" #: ../../docs/tutorials/editor/default_key_mapping.rst:575 msgid "``project_manager/run_project``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:577 #, fuzzy msgid "Rename Project" msgstr "Tạo một dự án mới" #: ../../docs/tutorials/editor/default_key_mapping.rst:577 msgid ":kbd:`F2`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:577 msgid ":kbd:`Enter`" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:577 msgid "``project_manager/rename_project``" msgstr "" #: ../../docs/tutorials/editor/default_key_mapping.rst:579 #, fuzzy msgid "Remove Project" msgstr "Tạo một dự án mới" #: ../../docs/tutorials/editor/default_key_mapping.rst:579 #, fuzzy msgid ":kbd:`Delete`" msgstr "Xóa" #: ../../docs/tutorials/editor/default_key_mapping.rst:579 msgid "``project_manager/remove_project``" msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:4 msgid "Customizing the interface" msgstr "Tạo một dự án mới" #: ../../docs/tutorials/editor/customizing_editor.rst:6 msgid "" "Godot's interface lives in a single window by default. Since Godot 4.0, you " "can split several elements to separate windows to better make use of multi-" "monitor setups." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:13 msgid "Moving and resizing docks" msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:15 msgid "" "Click and drag on the edge of any dock or panel to resize it horizontally or " "vertically:" msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:18 #: ../../docs/tutorials/editor/customizing_editor.rst:22 msgid "Resizing a dock in the editor" msgstr "Kết nối signal trong mã" #: ../../docs/tutorials/editor/customizing_editor.rst:24 msgid "" "Click the \"3 vertical dots\" icon at the top of any dock to change its " "location, or split it to a separate window by choosing **Make Floating** in " "the submenu that appears:" msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:27 #: ../../docs/tutorials/editor/customizing_editor.rst:31 msgid "Moving a dock in the editor" msgstr "Kết nối signal trong mã" #: ../../docs/tutorials/editor/customizing_editor.rst:33 msgid "" "To move a floating dock back to the editor window, close the dock window " "using the **×** button in the top-right corner of the window (or in the top-" "left corner on macOS). Alternatively, you can press :kbd:`Alt + F4` while " "the split window is focused." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:45 msgid "Splitting the script or shader editor to its own window" msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:49 msgid "" "This feature is only available on platforms that support spawning multiple " "windows: Windows, macOS and Linux." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:52 msgid "" "This feature is also not available if **Single Window Mode** is enabled in " "the Editor Settings." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:55 msgid "" "Since Godot 4.1, you can split the script or shader editor to its own window." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:57 msgid "" "To split the script editor to its own window, click the corresponding button " "in the top-right corner of the script editor:" msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:60 #: ../../docs/tutorials/editor/customizing_editor.rst:64 msgid "Splitting the script editor to its own window" msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:66 msgid "" "To split the shader editor to its own window, click the corresponding button " "in the top-right corner of the script editor:" msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:69 #: ../../docs/tutorials/editor/customizing_editor.rst:73 msgid "Splitting the shader editor to its own window" msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:75 msgid "" "To go back to the previous state (with the script/shader editor embedded in " "the editor window), close the split window using the **×** button in the top-" "right corner of the window (or in the top-left corner on macOS). " "Alternatively, you can press :kbd:`Alt + F4` while the split window is " "focused." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:81 msgid "Customizing editor layouts" msgstr "Tạo một dự án mới" #: ../../docs/tutorials/editor/customizing_editor.rst:83 msgid "" "You may want to save and load a dock configuration depending on the kind of " "task you're working on. For instance, when working on animating a character, " "it may be more convenient to have docks laid out in a different fashion " "compared to when you're designing a level." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:88 msgid "" "For this purpose, Godot provides a way to save and restore editor layouts. " "Before saving a layout, make changes to the docks you'd like to save. The " "following changes are persisted to the saved layout:" msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:92 msgid "Moving a dock." msgstr "Tiến tới" #: ../../docs/tutorials/editor/customizing_editor.rst:93 msgid "Resizing a dock." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:94 msgid "Making a dock floating." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:95 msgid "Changing a floating dock's position or size." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:96 msgid "" "FileSystem dock properties: split mode, display mode, sorting order, file " "list display mode, selected paths and unfolded paths." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:101 msgid "" "Splitting the script or shader editor to its own window is *not* persisted " "as part of a layout." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:104 msgid "" "After making changes, open the **Editor** menu at the top of the editor then " "choose **Editor Layouts > Save**. Enter a name for the layout, then click " "**Save**. If you've already saved an editor layout, you can choose to " "override an existing layout using the list." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:109 msgid "" "After making changes, open the **Editor** menu at the top of the editor then " "choose **Editor Layouts**. In the dropdown list, you will see a list of " "saved editor layouts, plus **Default** which is a hardcoded editor layout " "that can't be removed. The default layout matches a fresh Godot installation " "with no changes made to the docks' positions and sizes, and no floating " "docks." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:115 msgid "" "You can remove a layout using the **Delete** option in the **Editor " "Layouts** dropdown." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:120 msgid "" "If you name the saved layout ``Default`` (case-sensitive), the default " "editor layout will be overwritten. Note that the ``Default`` does not appear " "in the list of layouts to overwrite until you overwrite it once, but you can " "still write its name manually." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:125 msgid "" "You can go back to the standard default layout by removing the ``Default`` " "layout after overriding it. (This option does not appear if you haven't " "overridden the default layout yet.)" msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:129 msgid "" "Editor layouts are saved to a file named ``editor_layouts.cfg`` in the " "configuration path of the :ref:`doc_data_paths_editor_data_paths`." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:133 msgid "Customizing editor settings" msgstr "Trình biên tập" #: ../../docs/tutorials/editor/customizing_editor.rst:135 msgid "" "In the **Editor** menu at the top of the editor, you can find an **Editor " "Settings** option. This opens a window similar to the Project Settings, but " "with settings used by the editor. These settings are shared across all " "projects and are not saved in the project files." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:140 #: ../../docs/tutorials/editor/customizing_editor.rst:144 msgid "The Editor Settings window" msgstr "Trình biên tập" #: ../../docs/tutorials/editor/customizing_editor.rst:146 msgid "Some commonly changed settings are:" msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:148 msgid "" "**Interface > Editor > Editor Language:** Controls the language the editor " "displays in. To make English tutorials easier to follow, you may want to " "change this to English so that menu names are identical to names referred to " "by tutorials. The language can also be changed in the top-right corner of " "the project manager." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:153 msgid "" "**Interface > Editor > Display Scale:** Controls how large UI elements " "display on screen. The default **Auto** setting finds a suitable value based " "on your display's DPI and resolution. Due to engine limitations, it only " "takes the display-provided scaling factor on macOS, not on Windows or Linux." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:157 msgid "" "**Interface > Editor > Single Window Mode:** If enabled, this forces the " "editor to use a single window. This disables certain features such as " "splitting the script/shaders editor to their own window. Single-window mode " "can be more stable, especially on Linux when using Wayland." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:161 msgid "" "**Interface > Theme > Preset:** The editor theme preset to use. The " "**Light** theme preset may be easier to read if you're outdoors or in a room " "with sunlight. The **Black (OLED)** preset can reduce power consumption on " "OLED displays, which are increasingly common in laptops and phones/tablets." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:165 msgid "" "**FileSystem > Directories > Autoscan Project Path:** This can be set to a " "folder path that will be automatically scanned for projects in the project " "manager every time it starts." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:168 msgid "" "**FileSystem > Directories > Default Project Path:** Controls the default " "location where new projects are created in the project manager." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:170 msgid "" "**Editors > 3D > Emulate Numpad:** This allows using the top row 0-9 keys in " "the 3D editor as their equivalent numpad keys. It's recommended to enable " "this option if you don't have a number pad on your keyboard." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:173 msgid "" "**Editors > 3D > Emulate 3 Button Mouse:** This allows using the pan, zoom " "and orbit modifiers in the 3D editor even when not holding down any mouse " "button. It's recommended to enable this option if you're using a trackpad." msgstr "" #: ../../docs/tutorials/editor/customizing_editor.rst:177 msgid "" "See the :ref:`class_EditorSettings` class reference for a complete " "description of most editor settings. You can also hover an editor setting's " "name with the mouse in the Editor Settings to show its description." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:4 #, fuzzy msgid "Using the XR editor" msgstr "Thư viện tài nguyên" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:6 msgid "" "In 2024, we introduced the `Godot XR editor `__, a version of the Godot " "editor **designed to run natively on XR devices**, enabling the creation, " "development and export of 2D, 3D, and **XR** apps and games directly on " "device." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:10 msgid "" "The app can be downloaded from the `Meta Horizon Store `__, or from the `Godot " "download page `__." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:15 msgid "" "The XR editor is in early access, while we continue to refine the " "experience. See :ref:`doc_using_the_xr_editor_limitations` below." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:18 msgid "XR devices support" msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:20 msgid "" "For now, the Godot XR editor is only available for the following `Meta Quest " "`__ devices running **Meta Horizon OS v69 or " "higher**:" msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:23 msgid "Meta Quest 3" msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:24 msgid "Meta Quest 3s" msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:25 msgid "Meta Quest Pro" msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:29 msgid "" "We are working to add support for more XR devices, including PCVR devices." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:32 #: ../../docs/tutorials/editor/using_the_android_editor.rst:26 msgid "Runtime Permissions" msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:34 #: ../../docs/tutorials/editor/using_the_android_editor.rst:28 msgid "" "`All files access permission `__: Enables the editor to create, " "import, and read project files from any file locations on the device. " "Without this permission, the editor is still functional, but has limited " "access to the device's files and directories." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:37 #: ../../docs/tutorials/editor/using_the_android_editor.rst:31 msgid "" "`REQUEST_INSTALL_PACKAGES `__: Enables the editor to " "install exported project APKs." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:38 #: ../../docs/tutorials/editor/using_the_android_editor.rst:32 msgid "" "`RECORD_AUDIO `__: Requested when the `audio/driver/" "enable_input `__ project setting is enabled." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:39 msgid "" "`USE_SCENE `__: Required to enable and access the scene APIs when " "running an XR project." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:42 #: ../../docs/tutorials/editor/using_the_android_editor.rst:35 msgid "Tips & Tricks" msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:44 #: ../../docs/tutorials/editor/using_the_android_editor.rst:37 #, fuzzy msgid "**Input**" msgstr "Input" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:46 msgid "" "For the best experience and high level of productivity, connecting a " "bluetooth keyboard & mouse is recommended to interact with the XR editor. " "The XR editor supports all of the `usual shortcuts and key mappings `__." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:48 msgid "" "When interacting with tracked controllers or tracked hands, you can toggle " "on the `interface/touchscreen/enable_long_press_as_right_click `__ editor setting to enable right-click by long press." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:50 msgid "" "When interacting with tracked controllers or tracked hands, you can increase " "the size of the scrollbar using the `interface/touchscreen/" "increase_scrollbar_touch_area `__ editor setting." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:53 #: ../../docs/tutorials/editor/using_the_android_editor.rst:44 #, fuzzy msgid "**Multi-tasking**" msgstr "Đa tuyến" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:55 msgid "" "`Theater View `__ can be used to fullscreen " "the *Editor window*." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:56 msgid "" "Enable `Seamless Multitasking `__, available in the Quest *Experimental " "Settings*, to enable the ability to quickly transition between a running XR " "project and the *Editor window*." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:58 msgid "" "When developing a non-XR project, the Godot editor app icon will provide the " "ability to switch between the *Editor window* and the *Play window* when the " "latter is active, using Quest's *App menu* feature." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:59 msgid "" "When developing and running an XR project, you can bring back the *Editor " "window* by:" msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:61 msgid "Pressing on the *Meta* button to invoke the menu bar" msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:62 msgid "" "Clicking on the Godot editor app icon to summon the *App menu*, and select " "the *Editor window* tile." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:64 #: ../../docs/tutorials/editor/using_the_android_editor.rst:52 #, fuzzy msgid "**Projects sync**" msgstr "Thuộc tính" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:66 #: ../../docs/tutorials/editor/using_the_android_editor.rst:54 msgid "" "Syncing projects via Git can be done by downloading an Android Git client. " "We recommend the `Termux terminal `__, an Android " "terminal emulator which provides access to common terminal utilities such " "Git and SSH." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:69 #: ../../docs/tutorials/editor/using_the_android_editor.rst:57 msgid "" "**Note:** To use Git with the Termux terminal, you'll need to grant *WRITE* " "permission to the terminal. This can be done by `running the following " "command `__ from within " "the terminal: ``termux-setup-storage``" msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:72 #: ../../docs/tutorials/editor/using_the_android_editor.rst:60 #, fuzzy msgid "**Plugins**" msgstr "**Các Plugin:**" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:74 #: ../../docs/tutorials/editor/using_the_android_editor.rst:62 msgid "" "GDExtension plugins work as expected, but require the plugin developer to " "provide native Android binaries." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:79 #: ../../docs/tutorials/editor/using_the_android_editor.rst:67 msgid "Limitations & known issues" msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:81 msgid "Here are the known limitations and issues of the XR editor:" msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:83 msgid "" "No Meta Quest 2 support due to the limited amount of memory on the device. " "However advanced users can grab the XR editor APK from the `download page " "`__ and sideload it onto their " "device if they desire to do so." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:86 #: ../../docs/tutorials/editor/using_the_android_editor.rst:71 msgid "No gradle build support." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:87 msgid "" "No support for Android plugins as they require gradle build support. " "GDExtension plugins are supported." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:88 #: ../../docs/tutorials/editor/using_the_android_editor.rst:73 #: ../../docs/tutorials/editor/using_the_web_editor.rst:53 msgid "No C#/Mono support." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:89 #: ../../docs/tutorials/editor/using_the_android_editor.rst:74 #: ../../docs/tutorials/editor/using_the_web_editor.rst:69 msgid "No support for external script editors." msgstr "" #: ../../docs/tutorials/editor/using_the_xr_editor.rst:90 msgid "" "While available, the *Vulkan Forward+* renderer is not recommended due to " "severe performance issues." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:4 msgid "Using the Android editor" msgstr "Thư viện tài nguyên" #: ../../docs/tutorials/editor/using_the_android_editor.rst:6 msgid "" "In 2023, we added an `Android port of the editor `__ that can be used " "to create, develop, and export 2D and 3D projects on Android devices." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:9 msgid "" "The app can be downloaded from the `Godot download page `__ or from the `Google Play Store " "`__." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:14 msgid "" "The Android editor is in early access, while we continue to refine the " "experience. See :ref:`doc_using_the_android_editor_limitations` below." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:17 msgid "Android devices support" msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:19 msgid "" "The Android editor requires devices running Android 5 Lollipop or higher, " "with at least OpenGL 3 support. This includes (not exhaustive):" msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:21 msgid "Android tablets, foldables and large phones" msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:22 msgid "Android-powered netbooks" msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:23 msgid "Chromebooks supporting Android apps" msgstr "Android" #: ../../docs/tutorials/editor/using_the_android_editor.rst:39 msgid "" "For the best experience and high level of productivity, connecting a " "bluetooth keyboard & mouse is recommended to interact with the Android " "editor. The Android editor supports all of the `usual shortcuts and key " "mappings `__." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:41 msgid "" "When interacting with keyboard & mouse, you can decrease the size of the " "scrollbar using the `interface/touchscreen/increase_scrollbar_touch_area " "`__ editor setting." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:42 msgid "" "For 2D projects, the `block coding plugin `__ can provide a block-based visual alternative to " "composing scripts when lacking a connected hardware keyboard." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:46 msgid "" "On smaller devices, enabling and using picture-in-picture (PiP) mode " "provides the ability to easily transition between the *Editor* and the *Play " "window*." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:48 msgid "" "PiP can be enabled via the `run/window_placement/play_window_pip_mode " "`__ editor setting." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:49 msgid "" "The `run/window_placement/android_window `__ editor setting can be used to specify " "whether the *Play* window should always launch in PiP mode." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:50 msgid "**Note:** In PiP mode, the *Play* window does not have input access." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:69 msgid "Here are the known limitations and issues of the Android editor:" msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:72 msgid "" "No support for Android plugins as they require gradle build support. " "GDExtensions plugins are supported." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:75 msgid "" "While available, the Forward+ renderer is not recommended due to severe " "performance issues." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:76 msgid "UX not optimized for Android phones form-factor." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:77 msgid "" "`Android Go devices `__ lacks the *All files access* permission required for device " "read/write access. As a workaround, when using an Android Go device, it's " "recommended to create new projects only in the Android *Documents* or " "*Downloads* directories." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:80 msgid "" "The editor doesn't properly resume when *Don't keep activities* is enabled " "in the *Developer Options*." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:81 msgid "" "There is a `bug `__ with " "the Samsung keyboard that causes random input to be inserted when writing " "scripts. It's recommended to use the `Google keyboard (Gboard) `__ instead." msgstr "" #: ../../docs/tutorials/editor/using_the_android_editor.rst:86 msgid "" "See the `list of open issues on GitHub related to the Android editor " "`__ " "for a list of known bugs." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:6 msgid "Using the Web editor" msgstr "Thư viện tài nguyên" #: ../../docs/tutorials/editor/using_the_web_editor.rst:8 msgid "" "There is a `Web editor `__ you can use to " "work on new or existing projects." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:13 msgid "" "The web editor is in a preliminary stage. While its feature set may be " "sufficient for educational purposes, it is currently **not recommended for " "production work**. See :ref:`doc_using_the_web_editor_limitations` below." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:18 msgid "Browser support" msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:20 msgid "" "The Web editor requires support for WebAssembly's SharedArrayBuffer. This is " "in turn required to support threading in the browser. The following desktop " "browsers support WebAssembly threading and can therefore run the web editor:" msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:24 msgid "Chrome 68 or later" msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:25 msgid "Firefox 79 or later" msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:26 msgid "Edge 79 or later" msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:31 msgid "" "Opera and Safari are not supported yet. Safari may work in the future once " "proper threading support is added." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:34 msgid "**Mobile browsers are currently not supported.**" msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:36 msgid "" "The web editor only supports the Compatibility rendering method, as there is " "no stable way to run Vulkan applications on the web yet." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:41 msgid "" "If you use Linux, due to `poor Firefox WebGL performance `__, it's recommended to use a " "Chromium-based browser instead of Firefox." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:48 #: ../../docs/tutorials/editor/using_engine_compilation_configuration_editor.rst:89 #: ../../docs/tutorials/3d/3d_text.rst:55 #: ../../docs/tutorials/3d/3d_text.rst:106 #: ../../docs/tutorials/3d/3d_text.rst:147 #: ../../docs/tutorials/3d/using_decals.rst:251 #: ../../docs/tutorials/3d/particles/subemitters.rst:67 #: ../../docs/tutorials/3d/global_illumination/reflection_probes.rst:178 #: ../../docs/tutorials/assets_pipeline/exporting_3d_scenes.rst:24 #: ../../docs/tutorials/export/exporting_for_web.rst:221 #: ../../docs/tutorials/performance/general_optimization.rst:78 #: ../../docs/tutorials/physics/large_world_coordinates.rst:222 #: ../../docs/tutorials/xr/xr_full_screen_effects.rst:67 msgid "Limitations" msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:50 msgid "" "Due to limitations on the Godot or Web platform side, the following features " "are currently missing:" msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:54 msgid "No GDExtension support." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:55 msgid "" "No debugging support. This means GDScript debugging/profiling, live scene " "editing, the Remote Scene tree dock and other features that rely on the " "debugger protocol will not work." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:58 msgid "" "No project exporting. As a workaround, you can download the project source " "using **Project > Tools > Download Project Source** and export it using a " "`native version of the Godot editor `__." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:61 msgid "The editor won't warn you when closing the tab with unsaved changes." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:62 msgid "" "No lightmap baking support. You can still use existing lightmaps if they " "were baked with a native version of the Godot editor (e.g. by importing an " "existing project)." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:66 msgid "" "The following features are unlikely to be supported due to inherent " "limitations of the Web platform:" msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:70 msgid "No support for Android one-click deploy." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:74 msgid "" "See the `list of open issues on GitHub related to the web editor `__ for " "a list of known bugs." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:79 msgid "Importing a project" msgstr "Tạo một dự án mới" #: ../../docs/tutorials/editor/using_the_web_editor.rst:81 msgid "To import an existing project, the current process is as follows:" msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:83 msgid "" "Specify a ZIP file to preload on the HTML5 filesystem using the **Preload " "project ZIP** input." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:85 msgid "" "Run the editor by clicking **Start Godot editor**. The Godot Project Manager " "should appear after 10-20 seconds. On slower machines or connections, " "loading may take up to a minute." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:88 msgid "" "In the dialog that appears at the middle of the window, specify a name for " "the folder to create then click the **Create Folder** button (it doesn't " "have to match the ZIP archive's name)." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:91 msgid "Click **Install & Edit** and the project will open in the editor." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:95 msgid "" "It's important to place the project folder somewhere in ``/home/web_user/``. " "If your project folder is placed outside ``/home/web_user/``, you will lose " "your project when closing the editor!" msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:99 msgid "" "When you follow the steps described above, the project folder will always be " "located in ``/home/web_user/projects``, keeping it safe." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:103 msgid "Editing and running a project" msgstr "Tạo một dự án mới" #: ../../docs/tutorials/editor/using_the_web_editor.rst:105 msgid "" "Unlike the native version of Godot, the web editor is constrained to a " "single window. Therefore, it cannot open a new window when running the " "project. Instead, when you run the project by clicking the Run button or " "pressing :kbd:`F5`, it will appear to \"replace\" the editor window." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:110 msgid "" "The web editor offers an alternative way to deal with the editor and game " "windows (which are now \"tabs\"). You can switch between the **Editor** and " "**Game** tabs using the buttons on the top. You can also close the running " "game or editor by clicking the **×** button next to those tabs." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:116 msgid "Where are my project files?" msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:118 msgid "" "Due to browser security limitations, the editor will save the project files " "to the browser's IndexedDB storage. This storage isn't accessible as a " "regular folder on your machine, but is abstracted away in a database." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:125 msgid "" "You can download the project files as a ZIP archive by using **Project > " "Tools > Download Project Source**. This can be used to export the project " "using a `native Godot editor `__, since " "exporting from the web editor isn't supported yet." msgstr "" #: ../../docs/tutorials/editor/using_the_web_editor.rst:130 msgid "" "In the future, it may be possible to use the `HTML5 FileSystem API `__ to store the project " "files on the user's filesystem as the native editor would do. However, this " "isn't implemented yet." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:4 msgid "Command line tutorial" msgstr "" #: ../../docs/tutorials/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 almost no external libraries, " "initialization times are pretty fast, making it suitable for this workflow." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:16 msgid "" "On Windows and Linux, you can run a Godot binary in a terminal by specifying " "its relative or absolute path." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:19 msgid "" "On macOS, the process is different due to Godot being contained within a " "``.app`` bundle (which is a *folder*, not a file). To run a Godot binary " "from a terminal on macOS, you have to ``cd`` to the folder where the Godot " "application bundle is located, then run ``Godot.app/Contents/MacOS/Godot`` " "followed by any command line arguments. If you've renamed the application " "bundle from ``Godot`` to another name, make sure to edit this command line " "accordingly." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:28 msgid "Command line reference" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:34 msgid "**Legend**" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:36 msgid "" "|release| Available in editor builds, debug export templates and release " "export templates." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:30 msgid "release" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:37 msgid "|debug| Available in editor builds and debug export templates only." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:31 msgid "debug" msgstr "Gỡ lỗi" #: ../../docs/tutorials/editor/command_line_tutorial.rst:38 msgid "|editor| Only available in editor builds." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:32 msgid "editor" msgstr "Trình chỉnh sửa" #: ../../docs/tutorials/editor/command_line_tutorial.rst:40 msgid "" "Note that unknown command line arguments have no effect whatsoever. The " "engine will **not** warn you when using a command line argument that doesn't " "exist with a given build type." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:44 msgid "**General options**" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:47 #: ../../docs/tutorials/editor/command_line_tutorial.rst:63 #: ../../docs/tutorials/editor/command_line_tutorial.rst:133 #: ../../docs/tutorials/editor/command_line_tutorial.rst:162 #: ../../docs/tutorials/editor/command_line_tutorial.rst:232 #: ../../docs/engine_details/development/configuring_an_ide/qt_creator.rst:59 msgid "Command" msgstr "Command" #: ../../docs/tutorials/editor/command_line_tutorial.rst:47 #: ../../docs/tutorials/editor/command_line_tutorial.rst:63 #: ../../docs/tutorials/editor/command_line_tutorial.rst:133 #: ../../docs/tutorials/editor/command_line_tutorial.rst:162 #: ../../docs/tutorials/editor/command_line_tutorial.rst:232 #: ../../docs/tutorials/export/exporting_for_macos.rst:102 #: ../../docs/tutorials/export/exporting_for_macos.rst:122 #: ../../docs/tutorials/export/exporting_for_macos.rst:155 #: ../../docs/tutorials/export/exporting_for_macos.rst:198 #: ../../docs/tutorials/io/binary_serialization_api.rst:122 #: ../../docs/tutorials/io/binary_serialization_api.rst:133 #: ../../docs/tutorials/io/binary_serialization_api.rst:142 #: ../../docs/tutorials/io/binary_serialization_api.rst:153 #: ../../docs/tutorials/io/binary_serialization_api.rst:162 #: ../../docs/tutorials/io/binary_serialization_api.rst:171 #: ../../docs/tutorials/io/binary_serialization_api.rst:184 #: ../../docs/tutorials/io/binary_serialization_api.rst:195 #: ../../docs/tutorials/io/binary_serialization_api.rst:210 #: ../../docs/tutorials/io/binary_serialization_api.rst:223 #: ../../docs/tutorials/io/binary_serialization_api.rst:242 #: ../../docs/tutorials/io/binary_serialization_api.rst:257 #: ../../docs/tutorials/io/binary_serialization_api.rst:272 #: ../../docs/tutorials/io/binary_serialization_api.rst:291 #: ../../docs/tutorials/io/binary_serialization_api.rst:316 #: ../../docs/tutorials/io/binary_serialization_api.rst:347 #: ../../docs/tutorials/io/binary_serialization_api.rst:362 #: ../../docs/tutorials/io/binary_serialization_api.rst:371 #: ../../docs/tutorials/io/binary_serialization_api.rst:382 #: ../../docs/tutorials/io/binary_serialization_api.rst:392 #: ../../docs/tutorials/io/binary_serialization_api.rst:414 #: ../../docs/tutorials/io/binary_serialization_api.rst:423 #: ../../docs/tutorials/io/binary_serialization_api.rst:432 #: ../../docs/tutorials/io/binary_serialization_api.rst:444 #: ../../docs/tutorials/io/binary_serialization_api.rst:468 #: ../../docs/tutorials/io/binary_serialization_api.rst:480 #: ../../docs/tutorials/io/binary_serialization_api.rst:492 #: ../../docs/tutorials/io/binary_serialization_api.rst:505 #: ../../docs/tutorials/io/binary_serialization_api.rst:516 #: ../../docs/tutorials/io/binary_serialization_api.rst:527 #: ../../docs/tutorials/io/binary_serialization_api.rst:538 #: ../../docs/tutorials/io/binary_serialization_api.rst:549 #: ../../docs/tutorials/io/binary_serialization_api.rst:557 #: ../../docs/tutorials/io/binary_serialization_api.rst:570 #: ../../docs/tutorials/io/binary_serialization_api.rst:583 #: ../../docs/tutorials/io/binary_serialization_api.rst:598 #: ../../docs/tutorials/inputs/inputevent.rst:163 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:248 #: ../../docs/tutorials/scripting/gdscript/gdscript_basics.rst:147 #: ../../docs/tutorials/scripting/gdscript/gdscript_documentation_comments.rst:35 #: ../../docs/tutorials/scripting/gdscript/gdscript_documentation_comments.rst:94 #: ../../docs/tutorials/scripting/gdextension/gdextension_file.rst:18 #: ../../docs/tutorials/scripting/gdextension/gdextension_file.rst:89 #: ../../docs/tutorials/scripting/gdextension/gdextension_file.rst:112 #: ../../docs/tutorials/scripting/gdextension/gdextension_file.rst:125 #: ../../docs/tutorials/scripting/how_to_read_the_godot_api.rst:34 #: ../../docs/tutorials/scripting/creating_script_templates.rst:202 #: ../../docs/tutorials/shaders/shader_reference/shading_language.rst:25 #: ../../docs/tutorials/shaders/shader_reference/shading_language.rst:818 #: ../../docs/tutorials/shaders/shader_reference/shading_language.rst:876 #: ../../docs/tutorials/shaders/shader_reference/spatial_shader.rst:17 #: ../../docs/tutorials/shaders/shader_reference/spatial_shader.rst:128 #: ../../docs/tutorials/shaders/shader_reference/spatial_shader.rst:168 #: ../../docs/tutorials/shaders/shader_reference/spatial_shader.rst:236 #: ../../docs/tutorials/shaders/shader_reference/spatial_shader.rst:359 #: ../../docs/tutorials/shaders/shader_reference/spatial_shader.rst:549 #: ../../docs/tutorials/shaders/shader_reference/canvas_item_shader.rst:17 #: ../../docs/tutorials/shaders/shader_reference/canvas_item_shader.rst:58 #: ../../docs/tutorials/shaders/shader_reference/canvas_item_shader.rst:108 #: ../../docs/tutorials/shaders/shader_reference/canvas_item_shader.rst:218 #: ../../docs/tutorials/shaders/shader_reference/canvas_item_shader.rst:299 #: ../../docs/tutorials/shaders/shader_reference/canvas_item_shader.rst:359 #: ../../docs/tutorials/shaders/shader_reference/particle_shader.rst:34 #: ../../docs/tutorials/shaders/shader_reference/particle_shader.rst:58 #: ../../docs/tutorials/shaders/shader_reference/particle_shader.rst:84 #: ../../docs/tutorials/shaders/shader_reference/particle_shader.rst:139 #: ../../docs/tutorials/shaders/shader_reference/particle_shader.rst:156 #: ../../docs/tutorials/shaders/shader_reference/particle_shader.rst:186 #: ../../docs/tutorials/shaders/shader_reference/sky_shader.rst:130 #: ../../docs/tutorials/shaders/shader_reference/sky_shader.rst:155 #: ../../docs/tutorials/shaders/shader_reference/sky_shader.rst:200 #: ../../docs/tutorials/shaders/shader_reference/fog_shader.rst:34 #: ../../docs/tutorials/shaders/shader_reference/fog_shader.rst:63 #: ../../docs/tutorials/shaders/visual_shaders.rst:133 #: ../../docs/tutorials/shaders/converting_glsl_to_godot_shaders.rst:91 #: ../../docs/tutorials/shaders/converting_glsl_to_godot_shaders.rst:164 #: ../../docs/tutorials/shaders/converting_glsl_to_godot_shaders.rst:229 #: ../../docs/tutorials/xr/ar_passthrough.rst:42 #: ../../docs/tutorials/xr/xr_action_map.rst:139 #: ../../docs/tutorials/xr/xr_action_map.rst:228 #: ../../docs/tutorials/xr/openxr_render_models.rst:238 #: ../../docs/tutorials/xr/openxr_spatial_entities.rst:37 #: ../../docs/tutorials/xr/openxr_spatial_entities.rst:968 #: ../../docs/tutorials/xr/openxr_spatial_entities.rst:1119 #: ../../docs/tutorials/xr/openxr_spatial_entities.rst:1284 #: ../../docs/tutorials/xr/openxr_spatial_entities.rst:1617 #: ../../docs/engine_details/architecture/unit_testing.rst:297 msgid "Description" msgstr "Mô tả" #: ../../docs/tutorials/editor/command_line_tutorial.rst:49 msgid "``-h``, ``--help``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:49 msgid "|release| Display the list of command line options." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:51 msgid "``--version``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:51 msgid "|release| Display the version string." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:53 msgid "``-v``, ``--verbose``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:53 msgid "|release| Use verbose stdout mode." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:55 msgid "``-q``, ``--quiet``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:55 msgid "" "|release| Quiet mode, silences stdout messages. Errors are still displayed." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:57 msgid "``--no-header``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:57 msgid "" "|release| Do not print engine version and rendering method header on startup." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:60 msgid "**Run options**" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:65 msgid "``--``, ``++``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:65 msgid "" "|release| Separator for user-provided arguments. Following arguments are not " "used by the engine, but can be read from ``OS.get_cmdline_user_args()``." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:67 msgid "``-e``, ``--editor``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:67 msgid "|editor| Start the editor instead of running the scene." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:69 msgid "``-p``, ``--project-manager``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:69 msgid "|editor| Start the Project Manager, even if a project is auto-detected." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:71 #, fuzzy msgid "``--recovery-mode``" msgstr "Chế độ Di chuyển" #: ../../docs/tutorials/editor/command_line_tutorial.rst:71 msgid "" "|editor| \"Start the editor in recovery mode, which disables features that " "can typically cause startup crashes, such as tool scripts, editor plugins, " "GDExtension addons, and others." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:74 msgid "``--debug-server ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:74 msgid "" "|editor| Start the editor debug server (``://[:]``, " "e.g. ``tcp://127.0.0.1:6007``)" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:76 msgid "``--dap-port ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:76 msgid "" "|editor| Use the specified port for the GDScript Debug Adapter Protocol. " "Recommended port range ``[1024, 49151]``." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:78 msgid "``--lsp-port ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:78 msgid "" "|editor| Use the specified port for the GDScript Language Server Protocol. " "Recommended port range ``[1024, 49151]``." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:80 msgid "``--quit``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:80 msgid "|release| Quit after the first iteration." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:82 msgid "``--quit-after``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:82 msgid "" "|release| Quit after the given number of iterations. Set to 0 to disable." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:84 msgid "``-l``, ``--language ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:84 msgid "" "|release| Use a specific locale. ```` follows the format " "``language_Script_COUNTRY_VARIANT`` where language is a 2 or 3-letter " "language code in lowercase and the rest is optional. See :ref:`doc_locales` " "for more details." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:87 msgid "``--path ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:87 msgid "" "|release| Path to a project (```` must contain a 'project.godot' " "file)." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:89 msgid "``--scene ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:89 msgid "|release| Path or UID of a scene in the project that should be started." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:91 msgid "``-u``, ``--upwards``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:91 msgid "|release| Scan folders upwards for 'project.godot' file." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:93 msgid "``--main-pack ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:93 msgid "|release| Path to a pack (.pck) file to load." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:95 msgid "``--render-thread ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:95 msgid "" "|release| Render thread mode ('unsafe', 'safe', 'separate'). " "See :ref:`Thread Model ` for more details." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:98 msgid "``--remote-fs
``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:98 msgid "|release| Remote filesystem (``[:]`` address)." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:100 msgid "``--remote-fs-password ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:100 msgid "|release| Password for remote filesystem." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:102 msgid "``--audio-driver ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:102 msgid "" "|release| Audio driver. Use ``--help`` first to display the list of " "available drivers." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:104 msgid "``--display-driver ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:104 msgid "" "|release| Display driver (and rendering driver). Use ``--help`` first to " "display the list of available drivers." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:106 msgid "``--audio-output-latency`` " msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:106 msgid "" "|release| Override audio output latency in milliseconds (default is 15 ms). " "Lower values make sound playback more reactive but increase CPU usage, and " "may result in audio cracking if the CPU can't keep up" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:109 msgid "``--rendering-method ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:109 msgid "|release| Renderer name. Requires driver support." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:111 msgid "``--rendering-driver ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:111 msgid "" "|release| Rendering driver (depends on display driver). Use ``--help`` first " "to display the list of available drivers." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:113 msgid "``--gpu-index ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:113 msgid "" "|release| Use a specific GPU (run with ``--verbose`` to get available device " "list)." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:115 msgid "``--text-driver ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:115 msgid "|release| Text driver (Fonts, BiDi, shaping)." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:117 msgid "``--tablet-driver ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:117 msgid "|release| Pen tablet input driver." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:119 msgid "``--headless``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:119 msgid "" "|release| Enable headless mode (``--display-driver headless --audio-driver " "Dummy``). Useful for servers and with ``--script``." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:121 msgid "``--log-file``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:121 msgid "" "|release| Write output/error log to the specified path instead of the " "default location defined by the project. path should be absolute or " "relative to the project directory." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:124 msgid "``--write-movie ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:124 msgid "" "|release| Run the engine in a way that a movie is written (usually with .avi " "or .png extension). ``--fixed-fps`` is forced when enabled, but can be used " "to change movie FPS. ``--disable-vsync`` can speed up movie writing but " "makes interaction more difficult. ``--quit-after`` can be used to specify " "the number of frames to write." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:130 msgid "**Display options**" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:135 msgid "``-f``, ``--fullscreen``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:135 msgid "|release| Request fullscreen mode." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:137 msgid "``-m``, ``--maximized``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:137 msgid "|release| Request a maximized window." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:139 msgid "``-w``, ``--windowed``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:139 msgid "|release| Request windowed mode." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:141 msgid "``-t``, ``--always-on-top``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:141 msgid "|release| Request an always-on-top window." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:143 msgid "``--resolution x``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:143 msgid "|release| Request window resolution." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:145 msgid "``--position ,``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:145 msgid "|release| Request window position." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:147 msgid "``--screen ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:147 msgid "|release| Request window screen." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:149 msgid "``--single-window``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:149 msgid "|release| Use a single window (no separate subwindows)." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:151 msgid "``--xr-mode ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:151 msgid "|release| Select XR mode ('default', 'off', 'on')." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:153 msgid "``--wid ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:153 msgid "|release| Request parented to window." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:155 msgid "``--accessibility ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:155 msgid "" "|release| Select accessibility mode ['auto' (when screen reader is running, " "default), 'always', 'disabled']." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:159 msgid "**Debug options**" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:164 msgid "``-d``, ``--debug``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:164 msgid "|release| Debug (local stdout debugger)." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:166 msgid "``-b``, ``--breakpoints``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:166 msgid "" "|release| Breakpoint list as source::line comma-separated pairs, no spaces " "(use ``%20`` instead)." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:168 msgid "``--ignore-error-breaks``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:168 msgid "|release| If debugger is connected, prevents sending error breakpoints." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:170 msgid "``--profiling``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:170 msgid "|release| Enable profiling in the script debugger." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:172 msgid "``--gpu-profile``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:172 msgid "" "|release| Show a GPU profile of the tasks that took the most time during " "frame rendering." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:174 msgid "``--gpu-validation``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:174 msgid "" "|release| Enable graphics API :ref:`validation layers " "` for debugging." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:176 msgid "``--gpu-abort``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:176 msgid "" "|debug| Abort on GPU errors (usually validation layer errors), may help see " "the problem if your system freezes." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:178 msgid "``--generate-spirv-debug-info``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:178 msgid "" "|debug| Generate SPIR-V debug information. This allows source-level shader " "debugging with RenderDoc." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:180 msgid "``--extra-gpu-memory-tracking``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:180 msgid "" "|debug| Enables additional memory tracking (see class reference for " "`RenderingDevice.get_driver_and_device_memory_report()` and linked methods). " "Currently only implemented for Vulkan. Enabling this feature may cause " "crashes on some systems due to buggy drivers or bugs in the Vulkan Loader. " "See https://github.com/godotengine/godot/issues/95967" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:185 msgid "``--accurate-breadcrumbs``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:185 msgid "" "|debug| Force barriers between breadcrumbs. Useful for narrowing down a " "command causing GPU resets. Currently only implemented for Vulkan." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:188 msgid "``--remote-debug ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:188 msgid "" "|release| Remote debug (``://[:]``, e.g. ``tcp://" "127.0.0.1:6007``)." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:190 msgid "``--single-threaded-scene``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:190 msgid "" "|release| Scene tree runs in single-threaded mode. Sub-thread groups are " "disabled and run on the main thread." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:192 msgid "``--debug-collisions``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:192 msgid "|debug| Show collision shapes when running the scene." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:194 msgid "``--debug-paths``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:194 msgid "|debug| Show path lines when running the scene." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:196 msgid "``--debug-navigation``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:196 msgid "|debug| Show navigation polygons when running the scene." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:198 msgid "``--debug-avoidance``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:198 msgid "|debug| Show navigation avoidance debug visuals when running the scene." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:200 msgid "``--debug-stringnames``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:200 msgid "" "|debug| Print all StringName allocations to stdout when the engine quits." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:202 msgid "``--debug-canvas-item-redraw``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:202 msgid "" "|debug| Display a rectangle each time a canvas item requests a redraw " "(useful to troubleshoot low processor mode)." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:205 msgid "``--max-fps ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:205 msgid "" "|release| Set a maximum number of frames per second rendered (can be used to " "limit power usage). A value of 0 results in unlimited framerate." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:208 msgid "``--frame-delay ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:208 msgid "" "|release| Simulate high CPU load (delay each frame by milliseconds). Do " "not use as a FPS limiter; use --max-fps instead." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:211 msgid "``--time-scale ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:211 msgid "" "|release| Force time scale (higher values are faster, 1.0 is normal speed)." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:213 msgid "``--disable-vsync``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:213 msgid "" "|release| Forces disabling of vertical synchronization, even if enabled in " "the project settings. Does not override driver-level V-Sync enforcement." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:216 msgid "``--disable-render-loop``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:216 msgid "" "|release| Disable render loop so rendering only occurs when called " "explicitly from script." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:218 msgid "``--disable-crash-handler``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:218 msgid "|release| Disable crash handler when supported by the platform code." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:220 msgid "``--fixed-fps ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:220 msgid "" "|release| Force a fixed number of frames per second. This setting disables " "real-time synchronization." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:222 msgid "``--delta-smoothing ``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:222 msgid "" "|release| Enable or disable frame delta smoothing ('enable', 'disable')." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:224 msgid "``--print-fps``" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:224 msgid "|release| Print the frames per second to the stdout." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:226 #, fuzzy msgid "``--editor-pseudolocalization``" msgstr ":ref:`doc_editor_and_docs_localization`" #: ../../docs/tutorials/editor/command_line_tutorial.rst:226 msgid "" "|editor| Enable pseudolocalization for the editor and the project manager." msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:229 msgid "**Standalone tools**" msgstr "" #: ../../docs/tutorials/editor/command_line_tutorial.rst:234 msgid "``-s``, ``--script