限制游戏制造者的阻力

时间:2016-06-21 08:50:23

标签: object sprite game-maker gml

您好我试图限制用户可以在Gamemaker中拖动多少。

我在一个房间内创建了两个视图。 第一个视图是整个房间宽度和尺寸1250x768 第二个视图是我希望用户能够放大并拖动的区域,即955x465。 x和y位置是40乘170。

目前我已为第二个视图设置了缩放:

vmx=(mouse_x-X)-omx;
omx=(mouse_x-X);
vmy=(mouse_y-Y)-omy;
omy=(mouse_y-Y);

if mouse_wheel_up() && view_wview[1] > 600 {
    center_of_space_x=view_xview[1]+view_wview[1]/2;
    center_of_space_y=view_yview[1]+view_hview[1]/2;
    view_wview[1]-=view_wview[1]*0.15;
    view_hview[1]-=view_hview[1]*0.15;
    view_xview[1]=center_of_space_x-view_wview[1]/2;
    view_yview[1]=center_of_space_y-view_hview[1]/2;


}
if mouse_wheel_down(){
    view_xview[1] = 40;
    view_yview[1] = 170;
    view_wview[1] = 955;
    view_hview[1] = 465;}

下面是拖动代码:

if (mouse_check_button_pressed(mb_left)) {
    drag_x = mouse_x
    drag_y = mouse_y
}
// update:
if (mouse_check_button(mb_left)) && view_wview[1] < 700 {
    // actual dragging logic:
    view_xview[1] = drag_x - (mouse_x - view_xview[1])
    view_yview[1] = drag_y - (mouse_y - view_yview[1])
    // make sure view doesn't go outside the room:
    view_xview[1] = max(0, min(view_xview[1], room_width - view_wport[1]))
    view_yview[1] = max(0, min(view_yview[1], room_height - view_hview[1]))

因此限制适用于视图不离开房间,但我希望它不要离开已设置的特定视图。

请帮忙

我修改了我的代码以使用有效的钳位功能,但它不是一个干净的解决方案:

view_xview[1] = clamp(view_xview[1],40,400);
view_yview[1] = clamp(view_yview[1],170,500);

用户必须完全放大才能限制视图。如果他不是那么他们仍然可以看到房间的其他区域:(

1 个答案:

答案 0 :(得分:0)

编辑:我可能误解了你的问题,我会留下以下代码作为参考,如果它可以帮助你解决问题有点不同。

我可能会检查mouse_x和mouse_y是否在你想要的视图之外。

if (mouse_x > view_limit_x || mouse_y > view_limit_y)
{
  return; // Or continue or break however your language of choice goes.
}

如果你不能做一个return语句,那么用上面的反向逻辑包装代码应该可以正常工作。

旧帖子:

我不是100%熟悉游戏制作者。我会通过每x帧跳过拖动逻辑来实现这样的东西。假设您以60fps更新,并且您希望拖动速度慢6倍,您只需要每帧更新10 x逻辑。

const int framesToSkip = 6;
int frameCount = 0;

update()
{

  // Will only call when framecount = 0, 6, 12, 18 etc.
  if (frameCount % framesToSkip == 0)
    {
      // Drag Logic.
    }


  frameCount++;
}

这样,拖动逻辑仅发生速度的1/6。您也可以更改此值以发生前x个帧数,然后跳过其余部分(但这可能看起来有点不连贯)。