我正在制作一个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的运动力学样本。
答案 0 :(得分:1)
一种简单的处理状态的方法是将enum
与match
一起使用。
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一章。