Und ja, weitere Links zu nachfolgenden Artikeln werden bereitgestellt.
Basiscode
Damit der Charakter der Physik gehorcht, müssen Sie move_and_slide () in der Methode _process () oder _physics_process () aufrufen.
Im folgenden Code werde ich statische Typisierung verwenden.
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))
# .
# - , .
# .
Dieser Code reicht aus, um jedes KinematicBody2D-Objekt in Abhängigkeit von Kollisionen mit anderen Objekten zu bewegen. Es ist jedoch unmöglich, dieses Objekt zu steuern, insbesondere bei Plattformspielern kann dieses Objekt immer noch nicht herunterfallen. Damit das Objekt zu fallen beginnt, müssen Sie den Wert von self.velocity.y um einen positiven Wert erhöhen. Tatsache ist, dass Godot Engine im 2D-Modus beide Koordinaten von der oberen linken Ecke zur unteren rechten berechnet. Damit das Objekt fallen kann, müssen Sie der Beschleunigung etwas hinzufügen. Normalerweise verwende ich die GRAVITY-Konstante, die zu Beginn des Programms angegeben wird. Als nächstes wird der Code mit Änderungen angezeigt, damit das Objekt fallen kann.
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))
# , . .
Die Bewegungssteuerung sollte in einer separaten Methode implementiert werden, um eine Methode nicht zu kompliziert zu machen. Darüber hinaus kann niemand der Wiederholung desselben Codes in einem Artikel 33 Mal standhalten.
Ziehen um
Ich habe kürzlich einen interessanten Weg gelernt, einen Charakter zu kontrollieren, der eine Alternative zu der ersten Methode war, die ich beherrschte. Als nächstes werde ich beide Methoden zeigen:
- Der erste, neue Weg für mich
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- Zweiter Weg
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
Prallen
Der Sprung ist fast so einfach und eindeutig zu realisieren wie die erste Bewegungsmethode. Dazu müssen Sie eine Sprungkraftkonstante als Bewegungsgeschwindigkeit zu Beginn erstellen und einen Wert einstellen, der größer als der Wert der Schwerkraft ist. Gehen wir direkt zum Programmcode:
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...
Es bleibt nur eine Karte zu zeichnen, Kollisionen und andere Dinge hinzuzufügen, die nicht direkt mit dem Hauptcode zusammenhängen, und für den Spielcharakter wird es möglich sein, endlich einen Lauf durch die Orte zu arrangieren, aber dies noch ein anderes Mal, weil ich bisher nicht herausgefunden habe, wie andere Codefragmente korrekter erklärt werden können , und dies geht über den Rahmen der Nachricht hinaus.