Dan ya, tautan lebih lanjut ke artikel berikutnya akan disediakan.
Kode Dasar
Agar karakter mematuhi fisika, Anda perlu memanggil move_and_slide () dalam metode _process () atau _physics_process ().
Sepanjang kode berikut, saya akan menggunakan pengetikan statis.
extends KinematicBody2D
# gdscript , python
var velocity: Vector2 = Vector2.ZERO # .
#
#
func _physics_process(_delta: float) -> void:
#
self.velocity = self.move_and_slide(self.velocity, Vector2(0, -1))
# .
# - , .
# .
Kode ini akan cukup untuk membuat objek KinematicBody2D bergerak tergantung pada tabrakan dengan objek lain, tetapi tidak mungkin untuk mengontrol objek ini, terutama di platformer objek ini masih tidak dapat jatuh. Agar objek mulai jatuh, Anda perlu menambah nilai self.velocity.y dengan nilai positif. Faktanya adalah bahwa Godot Engine menghitung kedua koordinat dari sudut kiri atas ke kanan bawah dalam mode 2D. Agar benda jatuh, Anda perlu menambahkan sesuatu pada percepatannya. Saya biasanya menggunakan konstanta GRAVITASI, yang diberikan di awal program. Selanjutnya, kode akan disajikan dengan perubahan agar objek jatuh.
extends KinematicBody2D
const GRAVITY: int = 40
# 40 ,
var velocity: Vector2 = Vector2.ZERO #
func _physics_process(_delta: float) -> void:
#
#
self.velocity.y += GRAVITY
# _delta , self.move_and collide
self.velocity = self.move_and_slide(self.velocity, Vector2(0, -1))
# , . .
Kontrol perpindahan harus diterapkan dalam metode terpisah, agar tidak mempersulit 1 metode terlalu banyak. Selain itu, tidak ada yang dapat menahan pengulangan kode yang sama dalam satu artikel sebanyak 33 kali.
Bergerak
Baru-baru ini saya belajar cara menarik untuk mengontrol karakter, yang menjadi alternatif dari metode pertama yang saya kuasai. Selanjutnya, saya akan menunjukkan kedua metode tersebut:
- Pertama, cara baru untukku
func move_character() -> void: var direction: float = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left") # # (+ x, 0 1) (- x, 0 1). # = 0, < 0 , # , . self.velocity.x = direction * MOVE_SPEED # . # const MOVE_SPEED = # const GRAVITY
- Cara kedua
func move_character() -> void: # var direction: float = 0 if Input.is_action_pressed("ui_left"): direction = -1 elif Input.is_action_pressed("ui_right"): direction = 1 else: direction = 0 self.velocity.x = direction * MOVE_SPEED # const MOVE_SPEED = # # const GRAVITY
Melambung
Lompatan itu direalisasikan hampir semudah dan tidak ambigu seperti metode gerakan pertama. Untuk melakukan ini, Anda perlu membuat konstanta gaya lompat, sebagai kecepatan gerakan di awal, dan menetapkan nilai yang lebih besar dari nilai gravitasi. Mari langsung ke kode program:
func jump() -> void:
if self.is_on_floor(): # , .
# ,
if Input.is_action_pressed("ui_jump"): #
# ui_jump .
# "ui_up"
self.velocity.y -= JUMP_POWER
# const JUMP_POWER...
Tetap hanya untuk menggambar peta, menambahkan tabrakan dan hal-hal lain yang tidak terkait langsung dengan kode utama dan untuk karakter permainan itu akan mungkin untuk akhirnya mengatur jalan melalui lokasi, tetapi tentang ini masih lain kali, karena sejauh ini saya belum menemukan cara menjelaskan fragmen kode lain dengan lebih benar , dan ini berada di luar cakupan pesan.