Движение в игровом движке / Все что нужно знать / Godot Engine

preview_player
Показать описание
Полный урок о перемещении игровых объектов в игровых движках. Мы рассмотрим базовые принципы перемещения на основе формулы расстояния, а затем перейдем к более сложной теме - интерполяции.

Рекомендации по теме
Комментарии
Автор

У вас ошибочка в картинке на 1:18. _physics_process() срабатывает 60 раз в секунду и не зависит от FPS, а вот _process уже выполняется каждый кадр и может быть быстрее или медленней в зависимости от выдаваемого FPS .

MrGalyano
Автор

А ты хорош!)) Прям лучший контент по теме разработки игр в RU сегменте. Спасибо и удачи тебе!

danyefimow
Автор

Подача огонь, ты даже заморочился со сценой! :)

fallinglight
Автор

Хороший видос, классная подача! Продолжай вот в таком же духе)

asturmor
Автор

Вот что я называю "полезное видео". Не зря подписался на тебя.

Deeui
Автор

Спасибо тебе большое за видео, я наконец-то понял как двигать персонажа..

ChelSammi
Автор

крутой видос и крутую сцену подготовил

soundsbeard
Автор

Очень качественный урок и крутой проект для урока, прям ответственно к делу подошёл. Жду новые видосы!

blyadblyad
Автор

Оно того стоило!
(Я про отсутствие стрима)
А так полезный видос хоть и не все поймут его суть а ты меня на одну идею натолкнул

_mrscool_
Автор

Я не знал что 6 минут будут длится так

IIpoger
Автор

Я щяс перешел на этот движок есть такой вопросик можно ли сделать мультиплеер на движке

kydsmnv
Автор

Можете помочь пожалуйста с 2D игрой, я хочу сделать простой платформер и там добавить платформу которая будет двигаться к примеру от одного края к другому и так бессконечное количество времени. Я вообще не знаю как это сделать. Также у меня проблемы с персонажем а именно анимация смерти, тоесть когда его убивают то он падает и умирает ливитируя над землей и я пробовал много чего сделать, бессполезно я и ему добавлял 2 коллизию делал так что когда он жив то 2 коллизия выключена а когда умер то включена, не помогало может я в коде напартачил или незнаю, но прошу помогите я вообще запутался... (я только начал учиться своими силами в этой сфере создавания игр и толком нечего не знаю.)

Код персонажа:

extends KinematicBody2D

const gravity = 600.0
const walk_speed = 200
const Floor = Vector2(0, -1)
const PLASMA = preload("res://Plasma.tscn")

var is_firing = false
var is_dead = false
var direction = 1
var motion = Vector2()
var jump = 450

func die():
is_dead = true
motion.x = 0
$AnimatedSprite.play("die")
$PlayerCollisionShape2D.set_deferred("disabled", true)
$DeadPlayerCollision.set_deferred("disabled", false)

func _physics_process(delta):
if is_dead == true:
motion.x = walk_speed * direction

if position.y > 810:
position.y = 0
if is_firing == true:
return
if and not
motion.x =-walk_speed
$AnimatedSprite.flip_h = true
$Position2D.position.x = abs($Position2D.position.x) * -1
if is_on_floor():
$AnimatedSprite.play("walk")
elif and not
motion.x = walk_speed
$AnimatedSprite.flip_h = false
$Position2D.position.x = abs($Position2D.position.x)
if is_on_floor():
$AnimatedSprite.play("walk")
else:
motion.x = 0
if is_on_floor():
$AnimatedSprite.play("idle")

if and is_on_floor():
motion.y = -jump


if && is_firing == false && is_on_floor():
is_firing = true


motion.y += (gravity * delta)
motion = move_and_slide(motion, Floor)

func
if $AnimatedSprite.animation == "fire":
var plasma = PLASMA.instance()
plasma.direction = sign($Position2D.position.x)
plasma.position = $Position2D.global_position

is_firing = false



Код зомби (который убивает игрока):

extends KinematicBody2D

const SPEED = 100
const FLOOR = Vector2(0, -1)
const GRAVITY = 970

var velocity = Vector2()
var direction = 1
var is_alive = true
var is_attacking = false

func kill():
is_alive = false
velocity.x = 0

$CollisionShape2D.set_deferred("disabled", true)
$DeadCollision.set_deferred("disabled", false)

func _physics_process(delta):
if is_alive == true && is_attacking == false:
velocity.x = SPEED * direction
$AnimatedSprite.play("walk")
velocity.y += (GRAVITY * delta)
velocity = move_and_slide(velocity, FLOOR)
if is_on_wall():
change_direction()

func change_direction():
direction *= -1
$AnimatedSprite.flip_h = !$AnimatedSprite.flip_h
*= -1


func
if is_alive && "Player" in body.name:
is_attacking = true

body.die()


func
if $AnimatedSprite.animation == "attack":
is_attacking = false


И код платформы который не хочет работать (точнее я не знаю как его написать, так скажем это больше огрызок от кода. ):

extends StaticBody2D

const SPEED = 100
#const FLOOR = Vector2(0, -1)
const GRAVITY = 5

var Motion = Vector2.ZERO
var direction = 1

func _physics_process(delta):
Motion.y += GRAVITY
Motion = move_and_slide(Motion, Vector2.LEFT)

а в коде с платформой проблема, тут функция move_and_slide выдает ошибку : built-in:12 - Parse Error: The method "move_and_slide" isn't declared in the current class. (и я тоже не знаю как её исправить...)


эхх надеюсь кто то поможет.

Мои связи:


Дискорд: Fuzzy#1697 или Fers#2357
буду ждать когда кто то ответит

neoddisofficial
Автор

Блин ошибка кода пж подскажи что тут не так
Var damaged = {
"damaged":20,
"is_fire_damage:true,
"orydie":"arbalet"
}

funk _ready()
var damag = damaged["damaged"]:
if damag != 10:
damag + 20

И блин удобнобы было если бы была группа вк туда бы можно было бы выкладывать ошибки и все что связано с годот

kydsmnv
Автор

Кстати через 2 дня проводится джем по разработке игр на годот
Ну как будешь учавствовать?

kydsmnv
Автор

я как-то не понимаю как это работает. Если мы объекту задаем каждый фрейм координату по "х" допустим 10, не должен ли он дойти до этой координаты и оставаться на том же месте?

captaingames
Автор

что, если я переписал первый пример, и при нажатии на клавишу объект просто кружится по оси?

sgojren
Автор

Как лучше сделать пошаговую стратегию в 3 d ? Этот скрипт похож на RTS скрипт, не могу додуматься. Везде в 2 d, я слишком чайник чтобы понять. Да и Velocity везде было (

wexordante
Автор

Отличное видео, прям то, что надо. Тебе стоит делать шутки кринжовыми чтобы зубы сводило.

MicrNerd
Автор

ну осталось сделать классику и интстансить обьект после проигрывания анимации

nicsonkinellman
Автор

Помогите кто-нибудь! Пж! Мне пишут, что у меня таблутация неверная, а я не знаю, как исправить.extends KinematicBody2D

var speed = 150
var jumpForce =300
var gravity = 700

var vel = Vector2()

func _physics_process(delta):
if
vel.x -= speed
elif
vel.x += speed

move_and_slide(vel, Vector2.UP)

RPTYPER