Вопросы новичков

Вопросы, связанные с интерфейсом движка, управлением проектом, настройками,
Правила форума
Читайте Правила общения
Аватара пользователя
$noname-
Свой человек
Сообщения: 126
Зарегистрирован: 27 май 2020, 15:44
Откуда: Almaty
Благодарил (а): 23 раза
Поблагодарили: 61 раз
Контактная информация:

Re: Вопросы новичков

Сообщение $noname- »

dandiablo писал(а):
30 июл 2020, 16:33
Стою на асфальте, в лыжах обутый, ни чего понять не могу.... :D

Как правильно задать объекту твердое тело? Что бы столкновения были?

У меня есть два объекта:

1) KinemanicBody (player) дочерний узел -> CollisionShape (просит создать shape-ресурс) дочерний узел -> MeshInstance (куб)

2) StaticBody (препядствие) дочерний узел -> CollisionShape (просит создать shape-ресурс) дочерний узел -> MeshInstance (куб)

Player проходит через препядствие...

Пробовал играть с "дочерностью", MeshInstance (куб) ставил первым и всяко разно.

Ни чего не помогает! Как правильно? Юниты в этом смысле был значительно проще. :roll:
Добрый день, я сам с Юнити перешел на годо и твои проблемы мне понятны(На юнити 2года+). Я из-за дедлайнов не был на форуме несколько недель. Но все чаще вижу сообщения похожие на твои, и вот я подумал будет неплохо собрать всех новичков новобранцев и сделать ознакомительный тур по 2д в годо, основам, настройке интерфейса и.т.п. И мне важно что вы об этом думаете и какой формат вам было бы лучше:
1) Видосы на ютуб (монтажом не справлюсь но постараюсь)
2) Канал в дискорде (соберу группу и буду в онлайне делиться опытом, но у меня дома постоянно шумно и меня все время отвлекает)

Ответьте все кому нужно базовые навыки по годо, если видео то сниму ночью когда тихо и залью на ютуб(вы сами напишите какая тема вас интересует), а если дискорд то надо согласоваться по времени со всеми и я постараюсь объяснить все и всем
Just $noname-

Аватара пользователя
$noname-
Свой человек
Сообщения: 126
Зарегистрирован: 27 май 2020, 15:44
Откуда: Almaty
Благодарил (а): 23 раза
Поблагодарили: 61 раз
Контактная информация:

Re: Вопросы новичков

Сообщение $noname- »

dandiablo писал(а):
07 авг 2020, 14:33
День добрый!

С твердыми телами я разобрался, хвала Богам и всем отозвавшимся!
Но куча вопросов еще осталось. К примеру, как работать со звуком и анимацией?
На Юнити я простенькую демку с этим всем сляпал, а тут темный лес... Отсутствие какой либо литературы прямо в тупик ставит!
Лично я за уроки на Ютубе! Остальные, думаю, тоже за него будут. У Сканера вон больше 20 000 подписчиков и спонсорство.
Со всем уважением к Сканеру (я сам самоучка из веба, мое почтение ему и Вам), один человек со всем не справится и 2d тоже нужно!
Я вас понял и благодарен за ответ. Я тогда сделаю первое видео и оставлю ссылку тут. В нем будет базовые вещи как вывод очков и передвижение игрока, возможно сделаю какого-то босса и объясню как создать игровой мир (тайл мап думаю). Если все получится то продолжу уроки и сделаю добавление звука и.т.п :D
Just $noname-

Slakimil
Новичок
Сообщения: 9
Зарегистрирован: 10 авг 2020, 12:27
Благодарил (а): 3 раза
Поблагодарили: 5 раз

Re: Как создать онлайн в 2D игре?

Сообщение Slakimil »

NazarX3X писал(а):
09 июн 2020, 15:29
Я сделал две 2D игры в каждной может играть 2 игрока но на одной клавиатуре.
как сделать так что-бы был онлайн?
Еще как сделать две камеры которые будут следить за раздными игроками?
Извините за ошыбки я не руский.
Есть хороший туториал http://www.kehomsforge.com/tutorials/mu ... ayerSetup/
За одно помогает понять как работает мультиплеер не только в godot.

Аватара пользователя
XyL[i]GaN4eG
Новичок
Сообщения: 2
Зарегистрирован: 22 авг 2020, 19:06
Благодарил (а): 2 раза

Re: Вопросы новичков

Сообщение XyL[i]GaN4eG »

Какой лучше использовать язык программирования?
У меня сейчас два варианта: либо GDScript, либо C#
С одной стороны вроде как говорят что гдскрипт похож на пайтон, он более простой, полностью бесплатный и у него есть большая переведенная документация, с другой стороны c#, у которого большое комьюнити (насколько я знаю больше чем у GDScript), который можно использовать не только в годо, а еще в других движках
Вопросы:
1) Если вы знаете 2 языка, то какой лучше использовать? Какие есть плюсы и минусы, которые я не сразу могу заметить?
2) Если вы знаете только один ЯП, то как вы его выбрали? С какими трудностями столкнулись?

Всем спасибо за ответы и хорошего дня :)

P.s. пытался прогуглить этот вопрос, но ничего не нашел :(

Slakimil
Новичок
Сообщения: 9
Зарегистрирован: 10 авг 2020, 12:27
Благодарил (а): 3 раза
Поблагодарили: 5 раз

Re: Вопросы новичков

Сообщение Slakimil »

Вы определитесь с целями.
Если вы хотите прокачать C# и по пути понять, что такое разработка игр или просто «по развлекаться» создавая игры. Используйте C#.
Если вы новичок используйте то, что для вас в данный момент проще. Переключится на другой ЯП вы всегда сможете. Главное набить руку хотя бы в одном ЯП.
В программировании нужна постоянная практика. На мой взгляд лучше сеть и начать писать код и тратить время на это, чем выбирать на каком языке писать.
Если вы хотите разобраться с Godot начните писать на GSript. После того как разберетесь с деревом сцены, типами узлов, камерой и т.п. переходите на C# (конечно если хочется).
Еще раз определитесь с целями. Сами себе задайте вопросы «что вы хотите», «для чего вам это нужно». Ответе на них и садитесь писать код 😊.

Аватара пользователя
dandiablo
Новичок
Сообщения: 23
Зарегистрирован: 25 июл 2020, 20:14
Благодарил (а): 17 раз

Re: Вопросы новичков

Сообщение dandiablo »

В Юнити есть empty - пустой объект (не видимый на в игре) с которого можно взять координаты (к примеру) и в них создать уже объект из префаба. Есть ли что то подобное в Годо? Как вообще создать объект в Годо в определенном месте по событию? Скажем, создание врага в x и y координатах после закрытия/открытия двери.
Я часть той силы, что хочет зла, но вечно совершает благо!

Аватара пользователя
SkanerSoft
Администратор
Сообщения: 192
Зарегистрирован: 23 май 2020, 20:08
Откуда: Питер
Благодарил (а): 25 раз
Поблагодарили: 74 раза
Контактная информация:

Re: Вопросы новичков

Сообщение SkanerSoft »

Есть Spatial, есть Position3D, эти ноды не отображаются, но имеют полную трансформацию.
Создаются, как и все остальные - (pre)load(path/to/node).instance()
Автор и ведущий канала Godot 3D Russia

Аватара пользователя
dandiablo
Новичок
Сообщения: 23
Зарегистрирован: 25 июл 2020, 20:14
Благодарил (а): 17 раз

Re: Вопросы новичков

Сообщение dandiablo »

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

Аватара пользователя
SkanerSoft
Администратор
Сообщения: 192
Зарегистрирован: 23 май 2020, 20:08
Откуда: Питер
Благодарил (а): 25 раз
Поблагодарили: 74 раза
Контактная информация:

Re: Вопросы новичков

Сообщение SkanerSoft »

dandiablo писал(а):
01 окт 2020, 15:07
Так, следующий вопрос!
Есть ли хороший урок по созданию и удалению пуль (условно)?
Как сделать, что бы герой создавал пулю (фаервол) и он летел со стороны лица героя во врага?
Если снаряд ушел за карту, как это узнать и как его удалить?
Я вообще в 2д делаю, но и 3д, думаю, подойдет. Аналогию постараюсь вывести.
Автор и ведущий канала Godot 3D Russia

Аватара пользователя
dandiablo
Новичок
Сообщения: 23
Зарегистрирован: 25 июл 2020, 20:14
Благодарил (а): 17 раз

Re: Вопросы новичков

Сообщение dandiablo »

Очередной дурацкий вопрос:

Вот скрипт движения:

Код: Выделить всё


func _physics_process(_delta):

	#движение персоонажа и анимация при ходьбе

	var velocity = Vector2()

	if Input.is_action_pressed("ui_up"):

		velocity.y -= speed

		$Anim.play("player_up")

	if Input.is_action_pressed("ui_down"):

		velocity.y += speed

		$Anim.play("player_down")

	if Input.is_action_pressed("ui_left"):

		velocity.x -= speed

		$Anim.play("player_left")
		

	if Input.is_action_pressed("ui_right"):

		$Anim.play("player_right")

		velocity.x += speed

	move_and_slide(velocity)

	#ограничение передвижения

	position.x = clamp(position.x, -1000, 1850)

	position.y = clamp(position.y, -1000, 950)

	#Конец движения персоонажа и анимации при ходьбе
	
	
При отпускании кнопки соответствующая анимация продолжается, бег на месте, короче. $Anim.play("player_left")

Как это исправить?

Пытался сделать так:

Код: Выделить всё


func _physics_process(_delta):

	#движение персоонажа и анимация при ходьбе
	
	$Anim.playing = false

	var velocity = Vector2()

	if Input.is_action_pressed("ui_up"):
		
		$Anim.playing = true

		velocity.y -= speed

		$Anim.play("player_up")
	
Анимация вообще не работает. Как так?
Я часть той силы, что хочет зла, но вечно совершает благо!

Artfrost
Новичок
Сообщения: 23
Зарегистрирован: 09 сен 2020, 12:07
Благодарил (а): 6 раз
Поблагодарили: 15 раз

Re: Вопросы новичков

Сообщение Artfrost »

dandiablo писал(а):
02 окт 2020, 18:02
Очередной дурацкий вопрос:
При отпускании кнопки соответствующая анимация продолжается, бег на месте, короче. $Anim.play("player_left")
Как это исправить?

Аватара пользователя
dandiablo
Новичок
Сообщения: 23
Зарегистрирован: 25 июл 2020, 20:14
Благодарил (а): 17 раз

Re: Вопросы новичков

Сообщение dandiablo »

Доброго времени суток, дамы и господа!

У меня есть два скрипта.

1) Главного героя (Player)

Код: Выделить всё

extends KinematicBody2D

var player_speed = 200


func _physics_process(_delta):

	#движение персоонажа и анимация при ходьбе

	var velocity = Vector2()

	if Input.is_action_pressed("ui_up"):
		
		$Anim.playing = true

		velocity.y -= player_speed

		$Anim.play("player_up")

	if Input.is_action_pressed("ui_down"):
		
		$Anim.playing = true

		velocity.y += player_speed

		$Anim.play("player_down")

	if Input.is_action_pressed("ui_left"):
		
		$Anim.playing = true

		velocity.x -= player_speed

		$Anim.play("player_left")
		
	if Input.is_action_pressed("ui_right"):
		
		$Anim.playing = true

		velocity.x += player_speed
		
		$Anim.play("player_right")

	move_and_slide(velocity)
	
	if velocity.x == 0 and velocity.y == 0:

		$Anim.playing = false

	#ограничение передвижения

	position.x = clamp(position.x, -1000, 1850)

	position.y = clamp(position.y, -1000, 950)

	#Конец движения персоонажа и анимации при ходьбе

2)Общий скрипт для поведения врагов (Enemy)

Код: Выделить всё

extends "res://Scripts/Player.gd"

var stands = true #существо стоит

var destination = Vector2() #координаты цели

var velocity = Vector2() #вектор передвижения

var enemy_speed = 45


func _physics_process(_delta):
	
	if velocity:
		
		move_and_slide(velocity)
		
		position.x = clamp(position.x, -1000, 1850)

		position.y = clamp(position.y, -1000, 950)
	
	wander()
		
Далее есть какой то конкретный враг со своим пустым (пока что) скриптом, который наследуется от Enemy

Внимание, проблема!

Когда конкретный враг с пустым скриптом, который наследуется от Enemy, стоит на игровой сцене, то выдается такая ошибка:

invalid set inde "playing" (on base: "null instance") with value ot type bool

в строке:

Код: Выделить всё

$Anim.playing = false
скрипта Player

Когда герой один бегает по сцене, то все отлично!

Что это и как с этим бороться?

Дополнительный вопрос:

Есть ли в Годо код по отпусканию клавиши?
Допустим, герой шел влево, я отпустил соответствующую кнопу и тогда бы игралась анимация типа left_stop, что бы герой был повернут в нужную сторону. Это было бы возможным решением.

Прошу хоть не много разжевать нубу (мне), что это за фигня и как такое возможно, второй день уже туплю!

Благодарю за внимание!
Я часть той силы, что хочет зла, но вечно совершает благо!

Аватара пользователя
SkanerSoft
Администратор
Сообщения: 192
Зарегистрирован: 23 май 2020, 20:08
Откуда: Питер
Благодарил (а): 25 раз
Поблагодарили: 74 раза
Контактная информация:

Re: Вопросы новичков

Сообщение SkanerSoft »

В объекте Input есть методы is_action_just_pressed и is_action_just_released, первый отвечает за нажатие, второй - за отпускание.
Так же в _input(e) можно добавить проверку if e is InputEventKey, где будет e.pressed, который отвечает за то, нажата или отпущена клавиша.
Автор и ведущий канала Godot 3D Russia

Аватара пользователя
dandiablo
Новичок
Сообщения: 23
Зарегистрирован: 25 июл 2020, 20:14
Благодарил (а): 17 раз

Re: Вопросы новичков

Сообщение dandiablo »

Прошлую проблему решил, но теперь туплю в другом месте. :roll:
Берем общий скрипт Enemy, там есть таймер:

Код: Выделить всё

func _on_TimerEnemy_timeout():
	
	stands = false
Он говорит, что враг стоит.

Естественно, таймер в сцене так же есть, но не на экране.

Напомню, от скрипта Enemy наследуются другие враги.

Далее в нем же есть ошибка на запуске таймера:

Код: Выделить всё

Attempt to call function "start" in base "null instance" on a null instance

в строке $TimerEnemy.start(2)
Как я понял, не находится узел таймера, но он же есть в сцене!

Как так то и что делать?
Я часть той силы, что хочет зла, но вечно совершает благо!

Artfrost
Новичок
Сообщения: 23
Зарегистрирован: 09 сен 2020, 12:07
Благодарил (а): 6 раз
Поблагодарили: 15 раз

Re: Вопросы новичков

Сообщение Artfrost »

наследовать нужно не скрипт, а экземпляр врага
а враг это сцена (префаб) с набором всего необходимого, спрайты/таймеры т.п. в том числе и скрипты...

Аватара пользователя
dandiablo
Новичок
Сообщения: 23
Зарегистрирован: 25 июл 2020, 20:14
Благодарил (а): 17 раз

Re: Вопросы новичков

Сообщение dandiablo »

Продолжаю демонстрировать свою не компетентность! :D
Я унаследовал сцену конкретного врага от сцены общего врага.
Далее враг должен найти игрока и начать его преследовать.
Как из общего скрипта Enemy из сцены Enemy найти узел Player?
Если сцены Enemy нет на экране, только наследуемая сцена от нее.
Вот это не работает:

Код: Выделить всё

get_tree().get_root().get_node("Player")
Как правильно? Положить общую сцену Enemy куда то в корень?
Я часть той силы, что хочет зла, но вечно совершает благо!

Artfrost
Новичок
Сообщения: 23
Зарегистрирован: 09 сен 2020, 12:07
Благодарил (а): 6 раз
Поблагодарили: 15 раз

Re: Вопросы новичков

Сообщение Artfrost »

что ты называешь экраном не понятно...
так называемый общий Enemy никуда ложить не нужно
он должен являться подгружаемым ресурсом и оставаться в библиотеке в формате *.tscn
как ты добавляешь врага на сцену?
но, можно поступить проще, завести синглтон и создать глобальную ссылку/указатель на игрока
тогда до него можно будет добраться из любого места.

p.s.
спавн врагов, примеров масса https://www.youtube.com/results?search_ ... wn+enemies+

Аватара пользователя
dandiablo
Новичок
Сообщения: 23
Зарегистрирован: 25 июл 2020, 20:14
Благодарил (а): 17 раз

Re: Вопросы новичков

Сообщение dandiablo »

Все бы хорошо... Если бы я знал буржуйский, сюда бы не писал
Я часть той силы, что хочет зла, но вечно совершает благо!

Artfrost
Новичок
Сообщения: 23
Зарегистрирован: 09 сен 2020, 12:07
Благодарил (а): 6 раз
Поблагодарили: 15 раз

Re: Вопросы новичков

Сообщение Artfrost »

тогда посмотри примеры сканера (если смотрел, пересмотри чтобы освежить память)
там много всего полезного можно узнать, в том числе и ответы есть на все твои вопросы
просто нужно запастись терпением, отложи проект на несколько дней и сядь за просмотр :D

Аватара пользователя
dandiablo
Новичок
Сообщения: 23
Зарегистрирован: 25 июл 2020, 20:14
Благодарил (а): 17 раз

Re: Вопросы новичков

Сообщение dandiablo »

Artfrost писал(а):
15 окт 2020, 11:48
но, можно поступить проще, завести синглтон и создать глобальную ссылку/указатель на игрока
тогда до него можно будет добраться из любого места.
А можно мне, дураку, еще про это рассказать?
Я вообще все сцену Player запихал в автозагрузку.
Как мне из нее получить узел Player, что бы уже в скрипте Enemy получать координаты игрока?
Вот так не работает:

Код: Выделить всё

var pl = Player.get_tree().get_node("Player")
Или я вообще все не правильно все себе представляю и, соответственно, реализую? :cry:

Блин, нет структурированного обучения, книги на родном языке. :cry:
Я часть той силы, что хочет зла, но вечно совершает благо!

Artfrost
Новичок
Сообщения: 23
Зарегистрирован: 09 сен 2020, 12:07
Благодарил (а): 6 раз
Поблагодарили: 15 раз

Re: Вопросы новичков

Сообщение Artfrost »

Вот про синглтон:
https://www.youtube.com/watch?v=S8exNI0 ... s&index=11
А вообще лучше, посмотреть с нуля весь курс

Аватара пользователя
dandiablo
Новичок
Сообщения: 23
Зарегистрирован: 25 июл 2020, 20:14
Благодарил (а): 17 раз

Re: Вопросы новичков

Сообщение dandiablo »

Вернемся к нашему барану, мне то есть. :D

Я создал скрипт - GetPlayer, прикрепил его к верхней ноде сцены и его же запихал в автозагрузку.

Его содержание:

Код: Выделить всё

extends Node2D

func get_player():
	
	return $Player

Далее в общем скрипте для врагов Enemy я нахожу игрока:

Код: Выделить всё

var pl = GetPlayer.get_player()
Попой чувствую, что решение через нее же... :D

Покажите, люди добрые, более умное решение, без прикрепления скрипта GetPlayer к верхней ноде.

У меня самого мозгов на большее не хватает... :roll:
Я часть той силы, что хочет зла, но вечно совершает благо!

Аватара пользователя
SkanerSoft
Администратор
Сообщения: 192
Зарегистрирован: 23 май 2020, 20:08
Откуда: Питер
Благодарил (а): 25 раз
Поблагодарили: 74 раза
Контактная информация:

Re: Вопросы новичков

Сообщение SkanerSoft »

Глянь видео про синглтоп из GDScript Book) Я там про сингл рассказывал)
Создаешь глобальный объект (допустим Global), в нем переменную player, в скрипте игрока пишешь Global.player = self и всё. Теперь из любой точки игры Global.player будет возвращать нужный player)
Автор и ведущий канала Godot 3D Russia

Аватара пользователя
dandiablo
Новичок
Сообщения: 23
Зарегистрирован: 25 июл 2020, 20:14
Благодарил (а): 17 раз

Re: Вопросы новичков

Сообщение dandiablo »

Я про сингл видел и напихал уже всяких переменных туда:

Код: Выделить всё


enemy_speed

player_speed

Не было понимания, как грамотно в сингл запихнуть переменную из другого скрипта.

Код: Выделить всё

 в скрипте игрока пишешь Global.player = self и всё.
И как все просто оказалось, благодарю!
Я часть той силы, что хочет зла, но вечно совершает благо!

Аватара пользователя
dandiablo
Новичок
Сообщения: 23
Зарегистрирован: 25 июл 2020, 20:14
Благодарил (а): 17 раз

Re: Вопросы новичков

Сообщение dandiablo »

И снова я! Давно же не было, правда? :D
Совсем тупой вопрос...
Создал в сингле переменную, она отвечает за обозначения движения врага как такового, общего.

Код: Выделить всё

if velocity.x < 0:
				
GlobalVars.enemy_traffic = "left"
В зависимости от ее значения должна меняться анимация уже у конкретного врага

Код: Выделить всё

if GlobalVars.enemy_traffic == "left":
		
$Sprite.play("death_left")
И вот тут Годо при запуске мне говорит, что вот
является не правильным оператором для строк и объектов!

Как тогда строки сравнивать?! :shock:
Я часть той силы, что хочет зла, но вечно совершает благо!

Ответить