运动状态执行

时间:2018-10-10 01:19:08

标签: godot gdscript

我正在制作一个RPG,玩家可以使用WASD键在世界范围内自由移动;但是在战斗中,玩家会切换到由鼠标控制的基于战术网格的移动。我想用状态来完成这个任务。但我不知道该怎么做。

这是我的运动机制代码:

export const SubmitButton = withFormState<Button, {formState: FormState} & ButtonProps>(
  ({
    formState: {pristine, invalid},
    disabled = false, children,
    ref,  // <---
    ...props
  }) => {
    return <Button type="submit" color="success" 
            disabled={pristine || invalid || disabled}
            {...props}>
      {children}
    </Button>
  }
)

我正在使用Godot的运动力学样本。

1 个答案:

答案 0 :(得分:1)

一种简单的处理状态的方法是将enummatch一起使用。

enum State { OVER_MOV, TILE_MOV }

export(int) var speed = 250
var velocity
var current_state = OVER_MOV

func handle_over_mov_input():
    velocity = Vector2()
    if Input.is_action_pressed("ui_up"):
        velocity.y -= 1
    elif Input.is_action_pressed("ui_down"):
        velocity.y += 1
    elif Input.is_action_pressed("ui_right"):
        velocity.x += 1
    elif Input.is_action_pressed("ui_left"):
        velocity.x -= 1
    velocity = velocity.normalized() * speed

func handle_tile_mov_input():
    # .. handle tile mov input here
    pass

func _physics_process(delta):
    match current_state:
        OVER_MOV: handle_over_mov_input()
        TILE_MOV: handle_tile_mov_input()
    move_and_collide(velocity*delta)
    if some_state_changing_condition:
        current_state = other_state

如果您想更多地参与状态模式,请参阅GameProgrammingPatterns书中的State一章。