Я заметил, что размеры формы приспособления должным образом увеличиваются, когда спрайт становится выше. И наоборот, размеры формы приспособления привязывались к исходным размерам спрайта при попытке уменьшить масштаб спрайта.
Большое спасибо за ваши подсказки, помощь, поддержку. Чтобы показать этот сбой, ниже приведены фрагменты GML:
В обработчике события «Создать»:
// which controller
controllerID = 0;
// Configure the fixture
fix = physics_fixture_create();
physics_fixture_set_circle_shape(fix, sprite_width / 2);
physics_fixture_set_density(fix, .01);
physics_fixture_set_restitution(fix, 1.);
physics_fixture_set_friction(fix, 0.5);
//Bind the fixture to the current instance
//my_fix = physics_fixture_bind(fix, object_index);
my_fix = physics_fixture_bind(fix, id);
В обработчике события «Начало шага»:
var aButton = gamepad_button_check_pressed(controllerID, gp_face1 );
if ( aButton != 0)
{
image_xscale = image_xscale*.9;
image_yscale = image_xscale;
physics_remove_fixture(id, my_fix);
// Configure the fixture
physics_fixture_set_circle_shape(fix, sprite_width / 2);
//Bind the fixture to the current instance
my_fix = physics_fixture_bind(fix, id);
}
var bButton = gamepad_button_check_pressed(controllerID, gp_face2 );
if ( bButton != 0)
{
image_xscale = image_xscale*1.1;
image_yscale = image_xscale;
physics_remove_fixture(id, my_fix);
// Configure the fixture
physics_fixture_set_circle_shape(fix, sprite_width / 2);
//Bind the fixture to the current instance
my_fix = physics_fixture_bind(fix, id);
}
Легко проверить, что размеры формы приспособления не соответствуют размерам спрайта, когда спрайт сжимается: просто поместите physics_world_draw_debug ( phy_debug_render_shapes ) в обработчик «события рисования». Мы можем видеть, что размеры формы приспособления растут с расширением спрайта, но остаются постоянными, когда размеры спрайта возвращаются к исходным размерам спрайта.
Это действительно похоже на ошибку в физическом движке...
Спасибо за ваши комментарии.
Ваше здоровье
Сильвен
Это может быть неочевидно из названия функции, но каждый вызов physics_fixture_set_circle_shape
добавляет еще один круг к вашему прибору — вы захотите воссоздать его (удалив с помощью physics_fixture_delete
, а затем создав новый, как с вашим существующим кодом), если хотите изменить геометрию.
наконец, я получил ответ как от форума, так и от поддержки клиентов редактора YoyoGame. Вот ссылка на форум: https://forum.yoyogames.com/index.php?threads/collision-bounding-box-doesnt-scale-with-image.23941/
Вот ответ службы поддержки: Спасибо, что сообщили об этом, но это не ошибка или что-то, что нам нужно исправить, поскольку вы включили опцию «Использует физику» для этого объекта, прибор создается с настройками внутри него. вам следует отменить выбор этой опции, так как вы используете свои собственные приборы Дело не в том, что прибор, созданный через пользовательский интерфейс, является основным, а дополнительным. Мне удалось просто отключить флажок Uses Physics для объекта в вашем проекте, и масштабирование объекта работало правильно. В этом можно убедиться, отрисовав информацию об отладке физики в событии отрисовки с помощью physics_draw_debug(); в розыгрыше. При использовании Uses Physics ENabled внешний круг — это добавленное в пользовательский интерфейс приспособление:
Если Uses Physics DISabled, только один круг, соответствующий прибору, добавляется только с помощью кода:
Спасибо за ваш ответ. В конце концов я выяснил источник проблемы, см. Ниже мой ответ.