【问题标题】:dash mechanic for 2d platformer godot 3.42d 平台游戏 godot 3.4 的破折号机制
【发布时间】:2022-01-20 06:43:05
【问题描述】:

我正在用破折号机制在 godot 中制作 2d 平台游戏。我已经尝试过自己实现它。我已经为破折号(有效)设置了一个冷却计时器,使它在空中(有效)和动画(无效)时不能破折号。我的代码有以下问题:

  1. 玩家“传送”而不是平稳快速地冲刺
  2. 冲刺动画几乎不可见(仅在一帧可见)
  3. 出于某种原因,如果您处于空闲状态(未按任何按钮)然后按下短跑按钮,它会比您正在跑步(按住其中一个箭头键)并按下短跑按钮更能推动您。

这是我的代码。它有很多代码可能不会导致问题,但我留下它以防万一。我把#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


    【解决方案1】:

    您的代码看起来不错。问题可能来自您的 camera2d。为了实现适当的破折号效果,相机需要具有平滑效果(当玩家移动时,它必须在到达玩家时缓慢停止)。它起到延迟的作用,如果没有延迟,那么相机将在每一刻都迅速跟随玩家,并使冲刺看起来像传送。试试这些相机设置。在camer2d属性部分启用current属性,在limit部分启用smooth属性,在smoothing部分启用平滑并将速度设置为8.8。

    更多提示

    在 _on_dashcooldown_timeout() 时,一定要将玩家 x 向量分量设置回零 短划线只使用一个精灵帧,因为它不需要多张图像,因为它又短又快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      相关资源
      最近更新 更多