Как мне написать код, который управляет прыжками и создает действие двойного прыжка »? - PullRequest
0 голосов
/ 28 февраля 2019
# changed switch statement setup by creating a new variable and using "." operator
# removed extra delta in move_and_slide function
# left off attempting to add gravity to the game
# 2/26/2019
# removed FSM and will replace it with tutorial video code, for sake of completion

extends Node2D

const FLOOR = Vector2(0,-1)
const GRAVITY = 5
const DESCEND = 0.6
var speed = 100
var jump_height = -250
var motion = Vector2()

var jump_count = 0
var currentState = PlayerStates.STATE_RUNNING
var grounded = false

enum PlayerStates {STATE_RUNNING, STATE_JUMPING, STATE_DOUBLE_JUMPING, STATE_GLIDING}

func _ready():
    var currentState = PlayerStates.STATE_RUNNING
    pass

func jump():
    motion.y = jump_height

func glide():
    if motion.y < 500:
        motion.y += DESCEND

func _process(delta):
    var jump_pressed = Input.is_action_pressed('jump')
    var glide_pressed = Input.is_action_pressed('glide')

* в приведенном ниже коде я попытался сосчитать прыжки, чтобы они не превышали двух прыжков.Моя цель - создать двойной прыжок, и поэтому я использовал оператор меньше чем для управления этим числом * если jump_pressed: if jump_count <2: jump_count + = 1 jump () gounded = false <- мне пришлось скопировать вставитьэтот код снова, ниже, поэтому я не получаю ошибку в моем вопросе. </p>

    if jump_pressed:
        if jump_count < 2:
            jump_count += 1
            jump()
            grounded = false

    if grounded == false:
        if glide_pressed:
            glide()

    motion.x = speed

    motion.y += GRAVITY

    motion = move_and_slide(motion, FLOOR)

    if is_on_floor():
        grounded = true
        jump_count = 0
    else:
        grounded = false

1 Ответ

0 голосов
/ 07 марта 2019

Прежде всего, я думаю, что вам нужно использовать KinematicBody2D и выполнять свою логику в _physics_process, если вы хотите использовать move_and_slide, кроме этого, ваш код почти работал:

extends KinematicBody2D

const FLOOR = Vector2(0,-1)
const GRAVITY = 3000
const DESCEND = 0.6

var speed = 100
var jump_height = 250
var motion = Vector2()

var jump_count = 0

func jump():
    motion.y = -jump_height

func glide():
    if motion.y < 500:
        motion.y += DESCEND

func _physics_process(delta):
    var jump_pressed = Input.is_action_pressed('jump')
    var glide_pressed = Input.is_action_pressed('glide')

    motion.y += delta * GRAVITY
    var target_speed = Vector2(speed, motion.y)

   if is_on_floor():
       jump_count = 0
       if glide_pressed:
           glide()        

    if jump_pressed and jump_count < 2:
        jump_count += 1
        jump()

    motion = lerp(motion, target_speed, 0.1)
    motion = move_and_slide(motion, FLOOR)

Вам также необходимо изменить тип узла на KinematicBody2D в редакторе Godot (щелкните правой кнопкой мыши узел, а затем тип изменения).

...