Membuat Skrip Pertama Anda
Dalam pelajaran ini, Anda akan membuat kode skrip pertama untuk membuat ikon Godot berputar dalam lingkaran menggunakan GDScript. Seperti yang kami sebutkan dalam pendahuluan , kami berasumsi Anda memiliki dasar-dasar pemrograman. Kode C# yang setara telah disertakan di tab lain demi kenyamanan.

Lihat juga
Untuk mempelajari lebih lanjut tentang GDScript, kata kuncinya, dan sintaksisnya, kunjungi referensi GDScript .
Lihat juga
Untuk mempelajari lebih lanjut tentang C#, kunjungi halaman dasar-dasar C# .
Pengaturan proyek
Harap buat proyek baru untuk memulai dengan awal yang bersih. Proyek Anda harus berisi satu gambar: ikon Godot, yang sering kami gunakan untuk membuat prototipe di komunitas.
Kita perlu membuat simpul Sprite2D untuk menampilkannya dalam permainan. Di dock Scene, klik tombol Other Node.

Ketik "Sprite2D" pada bilah pencarian untuk memfilter node dan klik dua kali pada Sprite2D untuk membuat node.
Tab Adegan Anda sekarang seharusnya hanya memiliki simpul Sprite2D.

Node Sprite2D memerlukan tekstur untuk ditampilkan. Di Inspektur di sebelah kanan, Anda dapat melihat bahwa properti Tekstur bertuliskan "[kosong]". Untuk menampilkan ikon Godot, klik dan seret berkas icon.svgdari dok Sistem Berkas ke slot Tekstur.

Catatan
Anda dapat membuat node Sprite2D secara otomatis dengan menyeret dan meletakkan gambar di viewport.
Lalu, klik dan seret ikon di area pandang untuk memusatkannya dalam tampilan permainan.
Membuat skrip baru
Untuk membuat dan melampirkan skrip baru ke node kita, klik kanan pada Sprite2D di dok adegan dan pilih "Lampirkan Skrip".

Jendela Attach Node Script akan muncul. Jendela ini memungkinkan Anda untuk memilih bahasa skrip dan jalur file, di antara opsi lainnya.
Ubah kolom Template dari "Node: Default" menjadi "Object: Empty" untuk memulai dengan file yang bersih. Biarkan opsi lain diatur ke nilai default dan klik tombol Create untuk membuat skrip.

Catatan
Nama skrip C# harus sesuai dengan nama kelasnya. Dalam hal ini, Anda harus memberi nama file MySprite2D.cs.
Ruang kerja Skrip akan muncul dengan sprite_2d.gdfile baru Anda terbuka dan baris kode berikut:
extends Sprite2D
using Godot;using System;
public partial class MySprite2D : Sprite2D
{
}
Setiap file GDScript secara implisit merupakan sebuah kelas. extendsKata kunci mendefinisikan kelas yang diwarisi atau diperluas oleh skrip ini. Dalam hal ini, kelas tersebut adalah Sprite2D, yang berarti skrip kita akan mendapatkan akses ke semua properti dan fungsi dari simpul Sprite2D, termasuk kelas yang diperluasnya, seperti Node2D, CanvasItem, dan Node.
Catatan
Dalam GDScript, jika Anda menghilangkan baris dengan extendskata kunci, kelas Anda secara implisit akan memperluas RefCounted , yang digunakan Godot untuk mengelola memori aplikasi Anda.
Properti yang diwarisi mencakup properti yang dapat Anda lihat di dok Inspektur, seperti milik node kita texture.
Catatan
Secara default, Inspektur menampilkan properti node dalam "Title Case", dengan kata-kata dalam huruf kapital yang dipisahkan oleh spasi. Dalam kode GDScript, properti ini dalam "snake_case", yang merupakan huruf kecil dengan kata-kata yang dipisahkan oleh garis bawah.
Anda dapat mengarahkan kursor ke nama properti mana pun di Inspektur untuk melihat deskripsi dan pengenalnya dalam kode.
Halo, dunia!
Skrip kita saat ini tidak melakukan apa pun. Mari kita cetak teks "Halo, dunia!" ke panel bawah Output untuk memulai.
Tambahkan kode berikut ke skrip Anda:
func _init(): print("Hello, world!")public MySprite2D(){ GD.Print("Hello, world!");}
Mari kita uraikan. funcKata kunci mendefinisikan fungsi baru bernama _init. Ini adalah nama khusus untuk konstruktor kelas kita. Mesin memanggil _init()setiap objek atau simpul saat membuatnya dalam memori, jika Anda mendefinisikan fungsi ini.
Catatan
GDScript adalah bahasa berbasis indentasi. Tab di awal baris yang menyatakan print()diperlukan agar kode dapat berfungsi. Jika Anda menghilangkannya atau tidak membuat indentasi baris dengan benar, editor akan menyorotnya dengan warna merah dan menampilkan pesan kesalahan berikut: "Diharapkan blok yang diindentasi".
Simpan adegan seolah- sprite_2d.tscnolah Anda belum melakukannya, lalu tekan F6( pada macOS) untuk menjalankannya. Lihat panel bawah Output yang mengembang. Seharusnya akan muncul "Halo, dunia!".Cmd + R

Hapus _init()fungsi tersebut, sehingga yang tersisa hanya baris .extends Sprite2D
Berbalik arah
Saatnya membuat simpul kita bergerak dan berputar. Untuk melakukannya, kita akan menambahkan dua variabel anggota ke skrip kita: kecepatan gerakan dalam piksel per detik dan kecepatan sudut dalam radian per detik. Tambahkan yang berikut setelah baris tersebut.extends Sprite2D
var speed = 400var angular_speed = PIprivate int _speed = 400;private float _angularSpeed = Mathf.Pi;
Variabel anggota terletak di dekat bagian atas skrip, setelah baris "extends", tetapi sebelum fungsi. Setiap instans node dengan skrip ini yang dilampirkan padanya akan memiliki salinan properti speed dan miliknya sendiri angular_speed.
Catatan
Sudut dalam Godot bekerja dalam radian secara default, tetapi Anda memiliki fungsi dan properti bawaan yang tersedia jika Anda lebih suka menghitung sudut dalam derajat.
Untuk memindahkan ikon, kita perlu memperbarui posisi dan rotasinya setiap frame dalam loop permainan. Kita dapat menggunakan _process()fungsi virtual dari Nodekelas tersebut. Jika Anda mendefinisikannya di kelas mana pun yang memperluas kelas Node, seperti Sprite2D, Godot akan memanggil fungsi tersebut setiap frame dan meneruskannya dengan argumen bernama delta, waktu yang telah berlalu sejak frame terakhir.
Catatan
Game bekerja dengan merender banyak gambar per detik, yang masing-masing disebut frame, dan melakukannya secara berulang. Kami mengukur kecepatan game dalam menghasilkan gambar dalam Frame Per Second (FPS). Sebagian besar game menargetkan 60 FPS, meskipun Anda mungkin menemukan angka seperti 30 FPS pada perangkat seluler yang lebih lambat atau 90 hingga 240 untuk game realitas virtual.
Pengembang mesin dan gim berusaha sebaik mungkin untuk memperbarui dunia gim dan merender gambar pada interval waktu yang konstan, tetapi selalu ada sedikit variasi dalam waktu render bingkai. Itulah sebabnya mesin memberi kita nilai waktu delta ini, yang membuat gerakan kita tidak bergantung pada kecepatan bingkai.
Di bagian bawah skrip, definisikan fungsinya:
func _process(delta): rotation += angular_speed * deltapublic override void _Process(double delta){ Rotation += _angularSpeed * (float)delta;}
Kata funckunci mendefinisikan fungsi baru. Setelah itu, kita harus menulis nama fungsi dan argumen yang dibutuhkan dalam tanda kurung. Titik dua mengakhiri definisi, dan blok menjorok yang mengikutinya adalah konten atau instruksi fungsi.
Catatan
Perhatikan bagaimana _process(), seperti _init(), dimulai dengan garis bawah di awal. Berdasarkan konvensi, fungsi virtual Godot, yaitu fungsi bawaan yang dapat Anda timpa untuk berkomunikasi dengan mesin, dimulai dengan garis bawah.
Baris di dalam fungsi, , menambah rotasi sprite kita setiap frame. Di sini, adalah properti yang diwarisi dari kelas , yang diperluas. Properti ini mengontrol rotasi node kita dan bekerja dengan radian.rotation += angular_speed * deltarotationNode2DSprite2D
Tip
Di editor kode, Anda dapat menekan Ctrl-klik (Cmd-klik pada MacOS) pada properti atau fungsi bawaan apa pun seperti position, rotation, atau _processuntuk membuka dokumentasi terkait di tab baru.
Jalankan adegan untuk melihat ikon Godot berputar di tempatnya.

Catatan
Dalam C#, perhatikan bagaimana deltaargumen yang diambil oleh _Process()adalah double. Oleh karena itu, kita perlu mengubahnya menjadi floatsaat kita menerapkannya pada rotasi.
Bergerak maju
Sekarang mari kita pindahkan simpulnya. Tambahkan dua baris berikut di dalam fungsi _process() , pastikan baris baru tersebut memiliki indentasi yang sama dengan baris sebelumnya.rotation += angular_speed * delta
var velocity = Vector2.UP.rotated(rotation) * speed
position += velocity * deltavar velocity = Vector2.Up.Rotated(Rotation) * _speed;
Position += velocity * (float)delta;
Seperti yang telah kita lihat, varkata kunci mendefinisikan variabel baru. Jika Anda meletakkannya di bagian atas skrip, ia mendefinisikan properti kelas. Di dalam fungsi, ia mendefinisikan variabel lokal: variabel tersebut hanya ada dalam cakupan fungsi.
Kami mendefinisikan variabel lokal bernama velocity, vektor 2D yang mewakili arah dan kecepatan. Untuk membuat simpul bergerak maju, kami mulai dari konstanta kelas Vector2 Vector2.UP, vektor yang menunjuk ke atas, dan memutarnya dengan memanggil metode Vector2 rotated(). Ekspresi ini, Vector2.UP.rotated(rotation), adalah vektor yang menunjuk ke depan relatif terhadap ikon kami. Dikalikan dengan speed properti kami, ini memberi kami kecepatan yang dapat kami gunakan untuk menggerakkan simpul ke depan.
Kita menambahkan simpul untuk memindahkannya. Posisi itu sendiri bertipe Vector2 , tipe bawaan di Godot yang merepresentasikan vektor 2D.velocity * deltaposition
Jalankan adegan untuk melihat kepala Godot berputar-putar.

Catatan
Memindahkan simpul seperti itu tidak memperhitungkan benturan dengan dinding atau lantai. Dalam permainan 2D pertama Anda , Anda akan mempelajari pendekatan lain untuk memindahkan objek sambil mendeteksi benturan.
Node kita saat ini bergerak sendiri. Di bagian berikutnya, Mendengarkan masukan pemain , kita akan menggunakan masukan pemain untuk mengendalikannya.
Naskah lengkap
Berikut sprite_2d.gdberkas lengkapnya untuk referensi.
extends Sprite2D
var speed = 400var angular_speed = PI
func _process(delta): rotation += angular_speed * delta
var velocity = Vector2.UP.rotated(rotation) * speed
position += velocity * deltausing Godot;using System;
public partial class MySprite2D : Sprite2D{ private int _speed = 400; private float _angularSpeed = Mathf.Pi;
public override void _Process(double delta) { Rotation += _angularSpeed * (float)delta; var velocity = Vector2.Up.Rotated(Rotation) * _speed;
Position += velocity * (float)delta; }}

Tidak ada komentar:
Posting Komentar