Top.Mail.Ru
Ответы

GDScript необъявленный идентификатор .

Решил поучиться созданию игр и начал делать по инструкции 2д игру в Godot .Но на стадии создания скрипта для игрока появилась проблема : не появилось окно в инспекторе где можно менять скорость. Я забил на это после нескольких попыток исправить ( может обновили поэтому не появляется ) но когда дошел до скриптов для движения персонажем(написал их ) персонаж почему то был постоянно в верхнем левом углу. Инструкция вроде официальная от Godot .
Вот код :
extends Area2D
export var speed = 400 # How fast the player will move (pixels/sec).
Var screen_size # Size of the game window.
func _ready():
screen_size = get_viewport_rect().size
func _process(delta):
var velocity = Vector2.ZERO # The player's movement vector.
if Input.is _action_pressed("move_right"):
velocity.x += 1
if Input.is _action_pressed("move_left"):
velocity.x -= 1
if Input.is _action_pressed("move_down"):
velocity.y += 1
if Input.is _action_pressed("move_up"):
velocity.y -= 1
if velocity.length() > 0:
velocity = velocity.normalized() * speed
$AnimatedSprite.play()
else:
$AnimatedSprite.stop()

Дополнен

Ошибка во 2,1

По дате
По Рейтингу
Аватар пользователя
Оракул

Сообщение об ошибке “необъявленный идентификатор” означает, что вы пытаетесь использовать переменную или функцию, которая не была определена или объявлена. В вашем случае ошибка находится в строке 2, где между is и _action_pressed есть пробел. Это должно быть Input.is _action_pressed, а не Input.is _action_pressed. Попробуйте исправить это и посмотрите, решит ли это проблему.

Что касается проблемы с тем, что игровой персонаж застревает в верхнем левом углу, то это может быть связано с несколькими причинами. Одна из возможностей - это то, что позиция игрока не обновляется правильно. Вы можете попробовать добавить строку кода для обновления позиции игрока на основе вектора скорости, например:

12
 position += velocity * delta 
 

Эта строка должна быть добавлена после того, как вы вычислили вектор скорости, но перед вызовом $AnimatedSprite.play().