【发布时间】:2022-01-20 06:43:05
【问题描述】:
我正在用破折号机制在 godot 中制作 2d 平台游戏。我已经尝试过自己实现它。我已经为破折号(有效)设置了一个冷却计时器,使它在空中(有效)和动画(无效)时不能破折号。我的代码有以下问题:
- 玩家“传送”而不是平稳快速地冲刺
- 冲刺动画几乎不可见(仅在一帧可见)
- 出于某种原因,如果您处于空闲状态(未按任何按钮)然后按下短跑按钮,它会比您正在跑步(按住其中一个箭头键)并按下短跑按钮更能推动您。
这是我的代码。它有很多代码可能不会导致问题,但我留下它以防万一。我把#important放在我认为重要的所有代码部分的前面
extends KinematicBody2D
var vel = Vector2(0,0)
var fallswitch=0
var can_jump
var can_dash=true
const GRAVITY = 30
const SPEED = 250
const JUMPFORCE = -1000
const DASHSPEED = 1000
func _physics_process(delta):
#important
if Input.is_action_pressed("dash") and is_on_floor() and can_dash==true:
$Sprites.play("dash")
if $Sprites.flip_h==false:
vel.x = DASHSPEED
else:
vel.x = -DASHSPEED
can_dash=false
$dashcooldown.start()
elif Input.is_action_pressed("right"):
vel.x = SPEED
$Sprites.flip_h=false
$Sprites.play("run")
elif Input.is_action_pressed("left"):
vel.x = -SPEED
$Sprites.flip_h=true
$Sprites.play("run")
else:
pass
$Sprites.play("idle")
if not is_on_floor():
if vel.y < 200 and vel.y > 0:
$Sprites.play("fall.t")
elif vel.y > 200:
$Sprites.play("fall")
else:
$Sprites.play("air")
if is_on_floor():
can_jump=true
elif can_jump==true and $CoyoteTimer.is_stopped() :
$CoyoteTimer. start()
if Input.is_action_just_pressed("jump") && can_jump==true:
vel.y = JUMPFORCE
vel.y+=GRAVITY
vel=move_and_slide(vel,Vector2.UP)
vel.x = lerp(vel.x,0,0.1)
func _on_CoyoteTimer_timeout():
can_jump=false
#important
func _on_dashcooldown_timeout():
can_dash=true
提前感谢:)
【问题讨论】:
标签: godot