夹具形状尺寸不符合精灵尺寸

fixture shape dimensions do not follow the sprite ones

我注意到当 sprite 变高时,夹具形状尺寸适当增加。 相反,当尝试缩小 sprite 时,夹具形状尺寸会卡在原始 sprite 尺寸上。

非常感谢您的提示、帮助和支持。 为了显示这个故障,下面是 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 ) 放在“绘制事件”处理程序中。 我们可以看到 fixture shape 尺寸随着 sprite 的膨胀而增加,但当 sprite 尺寸回到原始尺寸时保持不变。

这看起来真的像是物理引擎中的一个错误...

感谢您的评论。

干杯

西尔万

从函数名称来看可能并不明显,但每次 physics_fixture_set_circle_shape 调用都会在您的夹具中添加另一个圆圈 - 您需要重新创建它(通过 physics_fixture_delete 删除,然后如果您想更改几何形状,请创建一个与现有代码一样的新代码。

最后,我从论坛和YoyoGame编辑器客服那里得到了答案。 这里 link 到论坛: https://forum.yoyogames.com/index.php?threads/collision-bounding-box-doesnt-scale-with-image.23941/

客服回复如下: 感谢您报告此问题,但这不是错误或我们需要解决的问题,因为您已在该对象上启用了 Uses Physics 选项,使用其中的设置创建了一个夹具。您应该取消选择该选项,因为您正在使用自己的灯具 并不是说通过 UI 创建的夹具是主要的,而是附加的。我能够简单地停用项目中对象上的“使用物理”复选框,并且缩放对象工作正常。这可以通过使用 physics_draw_debug(); 在绘图事件中绘制物理调试信息来确认;在抽奖活动中。 启用 Uses Physics EN 后,外圈是 UI 添加的夹具:

With Uses Physics DIS启用,只有一个圆对应于仅通过代码添加的夹具: