Ĉi tio estas maŝine tradukita teksto kiu povas enhavi erarojn!
De kie venas ĉi tiu informo?
Multo el ĉi tio estas nur rekontado de la oficiala dokumentacio de Godot. Sub vi trovos kelkajn utilajn ligilojn al la oficiala dokumentacio (kiun mi plej bone rekomendas super ĉi tiu ĉe Piggy, sed se vi preferas ĉi tiun, nur uzu ĝin!)
Utilefontoj:
Kio pri grafikaĵoj, ĉu mi devas krei ilin mem?
Ne! Vi povas trovi multajn liberajn resursojn ĉi tie:
Pli gravaj ligiloj:
Aliaj ludmotoroj?
Se vi preferas, vi povas uzi aliajn ludmotorojn. Ekzemploj de aliaj ludmotoroj estas:
Ekzistas multaj aliaj ankaŭ, serĉu se vi volas provi ion alian!
Kio estas Godot?
Godot (Prononciĝas Guh-doh), estas ‘Ludomotoro’. Por diri ĝin simple, ĝi estas programo kiu permesas al vi krei ludojn (aŭ ordinarajn programojn se vi volas). Godot povas fari preskaŭ ĉion kion aliaj ludomotoroj povas fari, kaj 2D kaj 3D.
Ekzemploj de ludoj kreitaj en Godot: Godot Showcase
Ne nur Indie-ludoj estis kreitaj en Godot, Sonic Colors Ultimate estas kreita per Godot! 🦔🦔🦔
Kiel akiri Godot?
Vi povas aŭ elŝuti Godot de:
- La oficiala paĝo: Godot Official Page.
- Aŭ ĉe Steam: Godot Steam.
Simple elŝutu kaj instalu (aŭ ruligu ĉe Steam).
Ekzakurigi projekton!
Kiam vi komencas Godot, aperas ĉi tiu fenestro:
Ĉi tie oni demandas pri programlingvo, GDScript aŭ C#. GDScript estas tre simila al Python.
Diferencoj inter GDScript kaj Python (sen koloroj):
def hello():
text = "Hello world!"
print(text)
func hello():
var text = "Hello world!"
print(text)
Por variabloj en Python vi nur bezonas skribi la nomon de la variablo. En GDScript vi devas skribi var unue. Por krei funkciojn vi skribas func anstataŭ def.
Scenoj & Nodoj
Unu el la plej gravaj konceptoj ene de Godot estas Scenoj kaj Nodoj. Ni povas komenci per la nodoj. Nodo estas objekto en Godot, kaj ĝi povas reprezenti ĉion. Ĝi povas esti io, kiu reprezentas ludanton, malamikon, butonon en menuo, tekston sur la ekrano, ĉion eblan. Scenoj estas kolekto de nodoj.
Jen ni kreos tre simplan ekzemplon.
Del 1a - Starigu la “player”-scenon
Sur la supro de la Godot-fenestro, premu la butonon “2D” por ŝanĝi la vidon al 2D-vido.
Sur la maldekstra flanko de la fenestro, vi vidas la jenan interfacon:
Premu la butonon “Other Node”, kaj serĉu “CharacterBody2D”, elektu ĝin kaj premu “Create”. Ĉi tio estas nodo uzata por 2D-ludanto. Vi eble vidas avertan triangulon ⚠️ apud la nodo “CharacterBody2D”. Tio estas ĉar ĝi mankas ion, kion ĝi ŝatus havi.
Se vi dekstre klakas la nodon, estas la butono “+ Add Child Node…”. Uzu ĝin kaj aldonu du nodojn, Sprite2D kaj CollisionShape2D. Sprite2D estas uzata por aldoni grafikon al la ludanto, dum la alia estas uzata por kontroli koliziojn. Vi ankaŭ povas doni al ili nomojn se tio faciligas la spuradon de aferoj. Mi donis al mia CharacterBody2D la nomon “Player”. Tiel devus aspekti la sceno nun:
Del 1b - Fiksi ⚠️ je CollisionShape2D
La avertotriangulo en ĉi tiu kazo estas ke CollisionShape2D fakte mankas kolizion. Vi povas fiksi tion per klakado sur la nodo (maldekstre), tiam aperos panelo sur la dekstra flanko. Tie vi ricevos amason da informoj pri la nodo, kiujn vi povas ŝanĝi. Ĝoje ludu kun tio, kio estas tie. Sed la kion ni volas koncentriĝi pri estas “Shape”, metu tion al ekzemple RectangleShape2D. Ne estas tre grave, ni ne uzos la koliziojn ĉi tie.
Del 1c - Aldoni Spriton, grafikon
Se vi klakas sur Sprite2D maldekstre, aperas la kampo dekstre, kie staras “Texture” (Teksturo). Ĉi tie vi povas enmeti bildon por la ludanto. Sufiĉas treni bildon kaj lasi ĝin en la kampon.
Tiel ĝi aspektos post aldono de sprito.
Del 2 - Aldonigi enigan, kontrolon
Sur la supro de la fenestro estas menuo, “Scene - Project - Debug - Editor - Help”. Premu “Project” kaj poste “Project Settings”. Tie aperas menuo kun multaj agordoj. Premu “Input Map”. Tie vi povas agordi klavojn.
- En la “Add New Action” kampo, skribu “left” kaj premu “Add”.
- Poste aldonu “right”, “up” kaj “down”.
- Tiuj estos konataj kiel “Actions”
- Ĉe ĉiu “Action” vi povas aldoni klavojn per premado de la + butono dekstre.
- Tie vi simple povas premi la klavaron, kaj poste premi Add.
- Aldonu klavojn al ĉiuj actions.
Parto 3 - Aldoni skripton por regi la ludanton.
Por povi aldoni ludlogikon, do fari ion kun la ludanto, la fono, aŭ ajnan aferon en la ludo, ni bezonas skripton. Skriptoj estas kodo, kaj povas esti skribitaj en du lingvoj, GDScript aŭ C#, GDScript estas la defaŭlta.
- Premu la “CharacterBody2D” (mi nomis ĝin “Player”) nodon.
- Premu la “Attach Script” butonon (vidu sube)
- Ĉi tie aperas fenestro kie vi povas elekti lingvon (elektu GDScript) kaj vojon (lasu ĝin esti tio kio tie skribas, sed vi povas doni al ĝi nomon), kaj tiam premu plue. Ĉi tie aperas “Script”-fenestro. Ne estas multe tie komence.
extends CharacterBody2D
# Dette er en enkel karakterbevegelse.
# Movas la karakteron.
var speed = 200
func _physics_process(delta):
# Henter input fra spilleren.
# Akiras la eniron de la ludanto.
var direction = Input.get_axis("ui_left", "ui_right")
velocity.x = direction * speed
move_and_slide()
La sola kodo diras nuntempe estas, ke la kodo apartenu al nodo de tipo “CharacterBody2D”, kiu estas nia ludanto.
Ni aldonos funkcion ĉi tie, kiun ni uzos por manipuli la ludanton:
extends CharacterBody2D
func _physics_process(delta: float) -> void:
# Dette er en tom funksjon.
# Ĉi tio estas malplena funkcio.
return
Physics Process?
_physics_process estas funkcio kiu estas ĝisdatigita ĉiun “kadron”, do ĉirkaŭ 60 fojojn en sekundo (defaŭlte). Ekzistas alia funkcio kiu simple nomiĝas _process, kiu estas ĝisdatigita konstante. Se vi volas, ke la ludanto moviĝu je konstanta rapido, vi uzas _physics_process.
Jen tie, kie ni devas aldoni kodon, kiu movigos la ludanton.
Del 4 - Basic input
En parto 2 ni aldonis du eniremajn butonojn, nun ni uzos ilin. Ekzistas enkonstruita objekto nomata Input kiun ni povas uzi por kontroli ĉu la ludanto premis tion, kion ni starigis en la “Input Map”.
Provu aldoni ĉi tiun kodon en la _physics_process kodon:
if Input.is_action_pressed('right'):
velocity.x = 100
# Hvis spilleren trykker på høyre-tasten, sett hastigheten til 100.
# Se deklarasjonen av 'velocity' over.
# Se også 'move_and_slide()' for mer informasjon.
move_and_slide()
Kio estas move_and_slide()?
move_and_slide() estas enkonstruita funkcio en Godot kiu uzas kiam ni volas fakte movi tion, kion ni uzas ĝin por. Sen ĉi tiu, la ludanto ne movos sin.
Warning
La interspaco sur la linioj estas tre grava, ĉi tio estas simila al en Python.
Kio okazas kiam vi komencas la programon per klako sur la lud-butonon en la Godot-fenestro, kaj poste klakas “dekstre”?
Se se ne okazas io nun:
- Ĉu vi memoris agordi ion en la “Input Map”?
- Ĉu vi skribis
rightkaj neRight? T.e., ĉu tio, kion vi skribis en la kodo, estas la sama kiel la nomo en la input map?
Hele koden så langt
extends CharacterBody2D
func _physics_process(delta: float) -> void:
if Input.is_action_pressed('right'):
velocity.x = 100
move_and_slide()
Provu nun aldoni kodon por 'maldekstre', 'supre', 'malsupre'.
Kiel devas esti velocity.x por maldekstre? Kaj kun supre kaj malsupre?
Hele koden nå
extends CharacterBody2D
func _physics_process(delta: float) -> void:
if Input.is_action_pressed('right'):
velocity.x = 100
if Input.is_action_pressed('left'):
velocity.x = -100
if Input.is_action_pressed('down'):
velocity.y = 100
if Input.is_action_pressed('up'):
velocity.y = -100
move_and_slide()
Del 5 - Fikso de la kodo
Vi eble rimarki, ke la ludanto ne haltas kiam vi lasas direkton. Ni povas fiksi tion nun!
Antaŭ ĉiuj if-oj, aldonu linion kiu metas rapidon al 0. Vi povas fari tion skribante velocity = Vector2()
Ĉiuj rapidoj kaj direktoj en Godot estas vektoroj, ĉi tio estas matematika koncepto kiun ni ne esploros nun, sed se vi volas scii pli pri tio, vi povas iri tien: Wikipedia vectors.
Hele koden nå
extends CharacterBody2D
func _physics_process(delta: float) -> void:
velovity = Vector2()
if Input.is_action_pressed('right'):
velocity.x = 100
if Input.is_action_pressed('left'):
velocity.x = -100
if Input.is_action_pressed('down'):
velocity.y = 100
if Input.is_action_pressed('up'):
velocity.y = -100
move_and_slide()
Kiam vi komencas la ludon nun, vi povas movi la ludanton:
Pli poste, vi povas korekti la kodon por ke la rapido ne estu nur nombro, sed povu esti stokita aliloke.
Vi povas ekzemple (antaŭ la funkcio) aldoni konstanton kiu tenas spuron de la rapido.
Hele koden til slutt med const
extends CharacterBody2D
const SPEED = 100
func _physics_process(delta: float) -> void:
velovity = Vector2()
if Input.is_action_pressed('right'):
velocity.x = SPEED
if Input.is_action_pressed('left'):
velocity.x = -SPEED
if Input.is_action_pressed('down'):
velocity.y = SPEED
if Input.is_action_pressed('up'):
velocity.y = -SPEED
move_and_slide()
Parto 6 - Ludu memstare!
Se vi revenas al la unua parto, Utilej Rimedoj, vi povas trovi kion vi povas daŭre ludi kun.
Post tio, vi povas provi krei vian propran ludon. Kion vi kreas estas al vi! Se vi volas krei ion tute novan, faru tion! Se vi volas provi imiti ludon kiu jam ekzistas, faru tion! La plej bona maniero lerni estas provi!




