Откријте како да додате непредвидив елемент у своју игру.

У развоју игре, елементи случајности и непредвидивости могу у великој мери допринети укупном искуству играња. Један посебан начин да се уведе такав елемент је путем насумичних покретних објеката, који додају додатни слој интеракције и изазова.

Ако радите са Годотом, овај ефекат можете постићи користећи ГДСцрипт, Годотов матерњи језик за скриптовање.

Подешавање ваше игре Годот

Пре него што почнете, подесите основну 2Д сцену игре мотор игре Годот. Направите нову 2Д сцену и додајте а ЦхарацтерБоди2Д чвор за лик играча. Тхе ЦхарацтерБоди2Д чвор је главни елемент за представљање ликова који се могу кретати и комуницирати са својим окружењем.

Код који се користи у овом чланку доступан је у овом ГитХуб спремиште и бесплатан је за коришћење под МИТ лиценцом.

Додајте два подређена чвора лику играча: а ЦоллисионСхапе2Д правоугаоног облика, и а Сприте2Д за графички приказ играча.

Да бисте лику додали мобилност, можете користити следећи ГДСцрипт код:

instagram viewer
extends CharacterBody2D

var speed = 200

func _physics_process(delta):
var velocity = Vector2()

if Input.is_action_pressed('ui_right'):
velocity.x += 1

if Input.is_action_pressed('ui_left'):
velocity.x -= 1

if Input.is_action_pressed('ui_down'):
velocity.y += 1

if Input.is_action_pressed('ui_up'):
velocity.y -= 1

velocity = velocity.normalized() * speed
move_and_collide(velocity * delta)

Дефинишите променљиву, брзина, за брзину кретања вашег играча. Тхе _физички_процес (делта) функција контролише кретање лика као одговор на уносе играча. Нормализујте брзину и правац лика да бисте обезбедили доследно кретање без обзира на смер.

Креирање статичких објеката помоћу СтатицБоди2Д

Затим креирајте објекте са којима ваш играч може да комуницира. Следећи пример показује креирање статичког објекта коришћењем СтатицБоди2Д чвор:

extends StaticBody2D

func _ready():
var collision_shape = CollisionShape2D.new()
collision_shape.shape = RectangleShape2D.new()
add_child(collision_shape)

Додавање алгоритма случајног кретања за статичне објекте

Сада када су ваши статични објекти спремни, време је да својој игри додате случајност. Да бисте то урадили, можете користити једноставан алгоритам случајног кретања:

extends StaticBody2D

var speed = 100
var value = randf_range(-1, 1)
var direction = Vector2(value, value).normalized()

func _physics_process(delta):
position += direction * speed * delta

Дефинишите брзину вашег статичког објекта. Такође, креирајте Вецтор2 правац и иницијализујте га насумичним вредностима између -1 и 1 за обе осе.

У _физички_процес (делта) функција, повећава позицију објекта производом његовог правца, брзине и временске делте, узрокујући да се креће у правцу датом брзином.

Случајне позиције и путање за статичне објекте

Можете повећати случајност и непредвидљивост не само да мењате брзину и правац објеката већ и њихове почетне позиције и путање.

extends StaticBody2D

var speed = randf_range(50, 150)
var value = randf_range(-1, 1)
var direction = Vector2(value, value).normalized()

func _ready():
var val1 = randf_range(0, get_viewport().size.x)
var val2 = randf_range(0, get_viewport().size.y)
position = Vector2(val1, val2)

func _physics_process(delta):
position += direction * speed * delta

Овде је брзина случајна вредност између 50 и 150. Почетна позиција објекта је насумично одређена унутар величине оквира за приказ у _реади() функција и позиција објекта се ажурира у _физички_процес (делта) функционишу као и раније.

Подешавање брзине, правца и случајности

Можете да дизајнирате интерактивнији и занимљивији начин игре манипулисањем брзином, смером и насумичношћу кретања за статичне објекте. Можете креирати ове контроле користећи ГДСцрипт:

extends StaticBody2D

var speed = randf_range(50, 150)
var value = randf_range(-1, 1)
var direction = Vector2(value, value).normalized()
var speed_variation_rate = 0.5
var direction_variation_rate = 0.5

func _ready():
var val1 = randf_range(0, get_viewport().size.x)
var val2 = randf_range(0, get_viewport().size.y)
position = Vector2(val1, val2)

func _physics_process(delta):
randomize_speed_and_direction()
position += direction * speed * delta

func randomize_speed_and_direction():
if randf() < speed_variation_rate:
speed = randf_range(50, 150)

if randf() < direction_variation_rate:
direction = Vector2(value, value).normalized()

Додатне функције за ваше насумичне покретне објекте

Док основни насумични покрет додаје непредвидиву динамику вашој игри, постоји безброј додатних функција које можете додати да додатно побољшате своју игру. Неки примери укључују:

Цолор Вариатион

Слично као што сте насумично подесили брзину и правац објеката, такође можете насумично подесити њихове боје. Ово може додати живљи и визуелно привлачнији аспект вашој игри. То можете учинити променом модулирати својство духа.

sprite.modulate = Color(randf(), randf(), randf())

Варијација величине

Насумично мењање величине објеката додаје још један ниво тежине и непредвидљивости. Играчи ће морати стално да се прилагођавају променљивим величинама објеката. Можете променити величину објекта тако што ћете га прилагодити Скала имовина:

sprite.scale = Vector2(randf_range(0.5, 2.0), randf_range(0.5, 2.0))

Објецт Спавнинг

Уместо да имате фиксни број насумично покретних објеката, можете применити систем који ствара нове објекте у редовним интервалима или под одређеним условима. Ово би могло додати нови ниво тежине јер ће играч морати да прилагоди своју стратегију како се више објеката појављује на екрану.

Животни век објекта

Поред стварања нових објеката, такође можете наложити да се објекти аутоматски униште након одређеног временског периода. Ово може спречити да се екран превише затрпа и да игра свежину.

Интеракције

Размислите о додавању специфичних интеракција између играча и покретних објеката. На пример, судар са одређеним објектима може повећати резултат играча, променити брзину играча или чак променити окружење игре. Можете такође дозволи играчу да скочи када стоји на платформи.

Најбоље праксе за додавање насумичних покретних објеката

Када додајете насумично покретне објекте, важно је размотрити неколико најбољих пракси да бисте обезбедили добро избалансирану, занимљиву игру:

Разматрање перформанси

Иако је примамљиво додати што више објеката, запамтите да сваки објекат повећава рачунарско оптерећење мотора игре. Увек тестирајте своју игру на циљном хардверу да бисте били сигурни да то неће негативно утицати на перформансе.

Балансирање случајности и могућности играња

Док насумични објекти могу додати забавну непредвидљивост, превише случајности може довести до фрустрације. Обавезно детаљно тестирајте да бисте постигли праву равнотежу између изазова и уживања.

Судари и одговор

Уверите се да игра на одговарајући начин рукује сударима између играча и објеката. Насумично покретни објекти могу изазвати неочекиване сценарије судара, па их испланирајте и темељно тестирајте.

Висуал Цларити

Насумични покретни објекти треба да се издвајају од позадине и других неинтерактивних елемената. Ово помаже играчима да брзо разумеју ситуацију у игри и планирају своје акције у складу са тим. Можете такође додајте звучне ефекте својим објектима како би се истакли.

Утицај насумичних покретних објеката на вашу игру Годот

Насумични покретни објекти могу значајно допринети да ваша Годот игра буде занимљивија. Они уносе елемент непредвидљивости који држи играче на ногама. Сваки пут када играч започне игру, он ће га поздравити са другачијом конфигурацијом објеката, додајући њену могућност поновног играња.

Штавише, пошто играчи не могу да предвиде путању покретних објеката, морају да остану фокусирани и да реагују да би се кретали кроз окружење игре