Реализация Государства Движения - PullRequest
0 голосов
/ 10 октября 2018

Я делаю RPG, где игрок может свободно перемещаться по миру с помощью клавиш WASD;но в бою игрок переключается на тактическое движение на основе сетки, управляемое мышью.Я думал использовать состояния для достижения этой цели;но я не знаю, как правильно это сделать.

Вот мой код для моей механики движения:

extends KinematicBody2D

export (int) var speed = 250
var velocity

var states = {movement:[Over_Mov, Tile_Mov]}
var current_state = null

func _ready():
    current_state = Over_Mov

func get_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 _physics_process(delta):
    get_input()
    move_and_collide(velocity*delta)

Я использую образец Годо для механики движения.

1 Ответ

0 голосов
/ 12 октября 2018

Один простой способ обработки состояния - это использование 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.

...