размеры формы крепления не соответствуют спрайтовым

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

Большое спасибо за ваши подсказки, помощь, поддержку. Чтобы показать этот сбой, ниже приведены фрагменты GML:

В обработчике события Create:

// 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 ) в обработчик события рисования. Мы можем видеть, что размеры формы приспособления растут с расширением спрайта, но остаются постоянными, когда размеры спрайта возвращаются к исходным размерам спрайта.

Это действительно похоже на ошибку в физическом движке...

Спасибо за ваши комментарии.

Ваше здоровье

Сильвен


person sylwa06    schedule 13.12.2020    source источник


Ответы (2)


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

person YellowAfterlife    schedule 14.12.2020
comment
Спасибо за ваш ответ. В конце концов я выяснил источник проблемы, см. Ниже мой ответ. - person sylwa06; 16.12.2020

наконец, я получил ответ как от форума, так и от поддержки клиентов редактора YoyoGame. Вот ссылка на форум: https://forum.yoyogames.com/index.php?threads/collision-bounding-box-doesnt-scale-with-image.23941/

Вот ответ службы поддержки клиентов: Спасибо, что сообщили об этом, но это не ошибка или что-то, что нам нужно исправить, поскольку вы включили опцию «Использует физику» для этого объекта, прибор создается с настройками внутри него. вам следует отменить выбор этой опции, поскольку вы используете свои собственные приборы. Прибор, созданный через пользовательский интерфейс, не является основным, скорее он является дополнительным. Мне удалось просто отключить флажок Uses Physics для объекта в вашем проекте, и масштабирование объекта работало правильно. В этом можно убедиться, отрисовав информацию об отладке физики в событии отрисовки с помощью physics_draw_debug(); в розыгрыше. При включенной опции Uses Physics EN внешний круг — это добавленное в пользовательский интерфейс приспособление:

введите здесь описание изображения

Если Uses Physics включена DIS, только один круг, соответствующий прибору, добавляется только с помощью кода:

введите здесь описание изображения

person sylwa06    schedule 16.12.2020