هل تريد تأثير قفز رائع في لعبتك؟ جرب هذه الطريقة - game dev

صفحة محسنة

فيديو توضيحي

السكربت


extends CharacterBody2D

@export var speed = 300.0
@export var acceleration = 1500.0
@export var friction = 1200.0

@export var jump_velocity = -400.0

var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")

@onready var visual_node = $Sprite2D

var initial_scale: Vector2
var was_in_air = false

func _ready():
	initial_scale = visual_node.scale

func _physics_process(delta):
	if not is_on_floor():
		velocity.y += gravity * delta

	if is_on_floor() and was_in_air:
		animate_land()

	was_in_air = not is_on_floor()

	if Input.is_action_just_pressed("ui_accept") and is_on_floor():
		velocity.y = jump_velocity
		animate_jump()

	var input_axis = Input.get_axis("ui_left", "ui_right")
	if input_axis != 0:
		velocity.x = move_toward(velocity.x, input_axis * speed, acceleration * delta)
	else:
		velocity.x = move_toward(velocity.x, 0, friction * delta)

	move_and_slide()

func animate_jump():
	var tween = create_tween()
	var stretch_scale = initial_scale * Vector2(0.8, 1.2)
	
	tween.tween_property(visual_node, "scale", stretch_scale, 0.1).set_trans(Tween.TRANS_SINE)
	tween.tween_property(visual_node, "scale", initial_scale, 0.25).set_trans(Tween.TRANS_BOUNCE)

func animate_land():
	var tween = create_tween()
	var squash_scale = initial_scale * Vector2(1.2, 0.8)

	tween.tween_property(visual_node, "scale", squash_scale, 0.1).set_trans(Tween.TRANS_SINE)
	tween.tween_property(visual_node, "scale", initial_scale, 0.2).set_trans(Tween.TRANS_BOUNCE)

    
Comments