ونعم ، سيتم توفير روابط إضافية للمقالات اللاحقة.
الكود الأساسي
لكي تطيع الشخصية الفيزياء ، تحتاج إلى استدعاء move_and_slide () في طريقة _process () أو _physics_process ().
خلال الكود التالي ، سأستخدم الكتابة الثابتة.
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))
# .
# - , .
# .
سيكون هذا الرمز كافيًا لجعل أي كائن KinematicBody2D يتحرك اعتمادًا على الاصطدامات مع الكائنات الأخرى ، ولكن من المستحيل التحكم في هذا الكائن ، خاصة في منصات المنصات ، لا يزال هذا الكائن لا يمكن أن يسقط. لكي يبدأ الكائن في السقوط ، تحتاج إلى زيادة قيمة self.velocity.y بقيمة موجبة. الحقيقة هي أن Godot Engine يحسب كلا الإحداثيين من الزاوية اليسرى العليا إلى أسفل اليمين في الوضع ثنائي الأبعاد. لكي يسقط الجسم ، عليك إضافة شيء ما إلى التسارع. عادةً ما أستخدم ثابت GRAVITY ، الذي يُعطى في بداية البرنامج. بعد ذلك ، سيتم تقديم الكود مع التغييرات لجعل الكائن يسقط.
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))
# , . .
يجب تنفيذ التحكم في الحركة بطريقة منفصلة ، حتى لا يتم تعقيد طريقة واحدة كثيرًا. علاوة على ذلك ، لا أحد يستطيع تحمل تكرار نفس الرمز في مادة واحدة 33 مرة.
متحرك
لقد تعلمت مؤخرًا طريقة مثيرة للاهتمام للتحكم في الشخصية ، والتي أصبحت بديلاً للطريقة الأولى التي أتقنتها. بعد ذلك ، سأعرض كلا الطريقتين:
- الطريقة الأولى والجديدة بالنسبة لي
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- الطريقة الثانية
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
وثب، ارتداد
يتم تحقيق القفزة تقريبًا بنفس السهولة التي لا لبس فيها مثل الطريقة الأولى للحركة. للقيام بذلك ، تحتاج إلى إنشاء قوة قفزة ثابتة ، مثل سرعة الحركة في البداية ، وتعيين قيمة أكبر من قيمة الجاذبية. دعنا ننتقل مباشرة إلى كود البرنامج:
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...
يبقى فقط رسم خريطة وإضافة تصادمات وأشياء أخرى غير مرتبطة مباشرة بالكود الرئيسي وبالنسبة لشخصية اللعبة سيكون من الممكن أخيرًا ترتيب جولة عبر المواقع ، لكن هذا سيظل وقتًا آخر ، لأنني حتى الآن لم أكتشف كيفية الشرح بشكل أكثر صحة. ، وهذا خارج نطاق الرسالة.