Почему моя позиция path2d не обновляется? - PullRequest
0 голосов
/ 01 июля 2018

Я создал новый path2d, следуя инструкциям в моей первой статье об игре: http://docs.godotengine.org/en/3.0/getting_started/step_by_step/your_first_game.html

Я хотел переместить «коробку» на экране, чтобы я мог видеть, как появляются мобы, но когда я запустил сцену, она осталась за кадром.

Я создал новый path2d, центрировал его по центру экрана, и он работает так, как я хотел, но теперь перемещение этого в редакторе не обновляет позицию в игре.

Что происходит?

Спасибо

func _on_mobtimer_timeout():
    $mobtimer.wait_time = 0.1 + randf() / 2
    $mobspawn/moblocation.set_offset(randi())

    var mob = Mob.instance()
    add_child(mob)
    var direction = $mobspawn/moblocation.rotation + PI/2
    mob.position = $mobspawn/moblocation.position
    direction += rand_range(-PI/8, PI/8)
    mob.rotation = direction
    mob.set_linear_velocity(Vector2(rand_range(200, 200 + score * 30), 0).rotated(direction))

enter image description here

Ответы [ 2 ]

0 голосов
/ 18 июля 2018

Это не полное решение, но я нашел странный обходной путь. Вместо изменения позиции в редакторе, если вы используете узлы на оранжевом поле (на пересечении оранжевого и синего), вы можете как-то поочередно перемещать поле.

picture of orange box

0 голосов
/ 18 июля 2018
Свойство

A Node2D position относится к position его родителя. Код из учебника Dodge The Creeps предполагает, что MobPath расположен в 0, 0 и завершается ошибкой, если это предположение неверно.

В вашем случае вы берете позицию MobSpawnLocation относительно MobPath и затем устанавливаете ее как глобальную позицию новой Mob.

К счастью, Node2D обладает еще одним свойством, которое мы можем использовать в этих обстоятельствах global_position. Это можно использовать так:

mob.position = $mobspawn/moblocation.global_position

http://docs.godotengine.org/en/stable/classes/class_node2d.html#member-variables

...