Платформер 2D: Камера Camera2D GODOT 4.1 | Урок P009 и L004
Понравились уроки? Поддержите автора на Бусти: boosty.to/godotru
- Камера в 2D играх
- Как добавить, какие есть свойства
Почитайте сами docs.godotengine.org/ru/stabl...
- Как автоматически установить лимиты камеры по размеру TileMap на вашем уровне
ДОМАШКА:
- Рассчитайте значения переменных, где будете хранить ограничение для передвижения игрока (чтобы он не мог выйти из уровня слева, справа... сверху), а также нижнюю границу, где его ждет смерть.
Используйте эти переменные в коде игрока.
#godot #gdscript #tilemap #camera2d
Шаблон проекта на коней видео можно скачать здесь:
Lessons\P009 Camera2D Platformer2D\
github.com/D0NM/GodotRu
- скачать Godot - godotengine.org
- офиц. документация docs.godotengine.org/ru/stable/
- русскояз дискорд сервер / discord
Пікірлер: 25
ДОМАШКА в описании видео. Код её можно не публиковать. Напишите ваши идеи. И мы их обсудим.
Может добавим в вашу игру паралаксный, бесконечный фон? Будет классно. А насчёт запрета выхода игрока за границы уровня. Ничего пока в голову не приходит. Я не опытный, я бы просто кодом останавливал его велосити Х, так он не выпадет, а по Y не так уж и страшно, но опять же это дело вкуса. Урок классный, спасибо.
Здравствуйте. Я, может, поздно, но у меня проблема. После ввода cell_quadrant_size игра начинает ломаться. Поможете? Может, это из-за обновления? По скрипту: кажись решил. В годо 4.2 эту функцию переименовали в rendering_quadrant_size
А можете потом показать как сделать кликер
@erelshinzhin5224
9 ай бұрын
Сделай обычную кнопку и счётчик с количеством кликов на нее А считывать нажатие можно сигналом pressed
У меня появилась проблема, почему-то при переходе на следующий уровень игра крашится на моменте var r = tilemap.get_used_rect(). а про домашку я сделал с самого начала стены вокруг уровня P.S. понял проблему почему крашится я не поставил свойство TileMap
@GODOTru
8 ай бұрын
Снова рад, когда проблему нашли сами. ЭТо очень полезно для своих проектов.
Я начал учить годот зашел в тг в чат по годот на руском спросил за сколько времени можно выучить годот на языке C# без гдскрипт. мне сказали это не смешно и забанили круто теперь я полностю разочерован в годоте и буду учить юнити
@GODOTru
9 ай бұрын
Надо просто изучить С# без всякого GODOT. А это не быстро... И все... Если знаешь Godot + GDScript то знаешь функции движка. На C# чуть больше кода придется писать, зато все будет работать на макс скорости.
@user-to5el1yk1s
9 ай бұрын
Вообще странный вопрос "За сколько"... Всё от тебя зависит. Бери и учись. И если знаешь шарп, что что мешает выучить дополнительно годо? Я год назад, в 40 лет в первые чтолкнулся с программированием, и горю желанием выучить как можно больше языков, сколько бы это не длилось.
@mentha654
9 ай бұрын
Я вступила в эту группу, правильно ответила на что-то типа капчи и меня тоже забанили
@GODOTru
9 ай бұрын
@@mentha654 наверно и я на эту капчу что-то отвечал. Или вступил раньше... Ну что ж, придется мне удалить ссыолку на вроде бы самую большую группу Годот на русском ((( Действтиельно. Для новичков такие правила группы это неудобно.
@user-to5el1yk1s
9 ай бұрын
@@mentha654 там вроде 2 минуты даётся для ответа. Может опоздала?
У меня почему-то при переходе на 2 уровень камера перестаёт ходить за игроком. P.S. разобрался, просто добавил $Camera2D.make_current()
@GODOTru
8 ай бұрын
Такое может быть, если предыдущая камера осталась (например инстанс игрока с прошлого уровня не удалён!) то есть где-то в скрипте ошибка
У меня камера совсем не работает. На маленьких слетает куда то, а на больших неправильно делает границы. точно такой же код. extends CharacterBody2D const SPEED = 300.0 @export var tilemap: TileMap @onready var Anim: AnimatedSprite2D = $AnimatedSprite2D const JUMP_VELOCITY = -400.0 var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") func _ready() -> void: var r = tilemap.get_used_rect() var vp = tilemap.get_viewport_rect() var qs = tilemap.cell_quadrant_size $Camera2D.limit_left = r.position.y * qs + (qs * 2) $Camera2D.limit_top = r.position.x * qs $Camera2D.limit_right = $Camera2D.limit_left + r.size.x * qs $Camera2D.limit_bottom = $Camera2D.limit_top + r.size.y * qs $Camera2D.limit_top = min($Camera2D.limit_top, $Camera2D.limit_bottom -vp.size.y)
@GODOTru
6 ай бұрын
var vp = get_viewport() вот так сделай, изменилось что-то? Я сегодня мини-урок запишу про камеру. Выложу. чуть проще сделаю.
@GODOTru
6 ай бұрын
откуда у вас появилось это в коде? + (qs * 2) удОлите ))
"Почитайте сами" Шутник 😂 Ьы ж по этому и тут потому что там нифига не понимаем.... В общем У меня почему то камера вниз улетает за экран. Понять не могу проблему extends CharacterBody2D const SPEED = 200.0 const JUMP_VELOCITY = -400.0 @onready var anim_sprite: AnimatedSprite2D = $AnimatedSprite @onready var jump_sound = $JumpSound @onready var gameover_sound = $GameOver @onready var cam = $Camera2D @export var tilemap : TileMap var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") func _ready() -> void: var r = tilemap.get_used_rect() var vp = tilemap.get_viewport_rect() var qs = tilemap.cell_quadrant_size cam.limit_left = r.position.x * qs cam.limit_top = r.position.y * qs cam.limit_right = cam.limit_left + r.size.x * qs cam.limit_bottom = cam.limit_top + r.size.y * qs cam.limit_top = min(cam.limit_top, cam.limit_bottom - vp.size.y) всё так же вроде
@GODOTru
9 ай бұрын
1) Я не шучу с такими советами. 2) Есть полностью на русском документация для Godot 3.5 там все похоже. 3) Ты хэшируешь самеру в переменной cam. И вероятно там происходит глюк Годо.... А я в этой же функции _ready() она запускается, когда все посчитано, напрямую пишу в камеру. Вероятно проблема где-то еще. Не в _ready()
@GODOTru
9 ай бұрын
+ я не вижу как у тебя сделан tileset. Ну, разбор закончен. А к камере я еще вернусь в отдельном уроке про сплит-скрин для мультиплейера.
@user-to5el1yk1s
9 ай бұрын
@@GODOTru Я пробовал вместо переменной и прямую ссылку на камеру, то же самое. Единственное, если на нулевой верхней точке ставлю тайл, она относительно нормально показывает. Ито ниже чем надо бы
@mrmegachell
6 ай бұрын
точно такая же проблема
@GODOTru
6 ай бұрын
@@mrmegachellпрямо сейчас я по ссылке в описании скачал проект Lessons \ P009 Camera2D Platformer2D ты не забыл игроку на каждой сцене в Player добавить Tilemap со сцены уровня? И да, в tilemap должны быть настроены collision всех тайлов, которыми рисуешь уровень.