限制游戏制作者的阻力
Limit drag in gamemaker
您好,我正在尝试限制用户在 Gamemaker 中可以拖动的范围。
我在一个房间内创建了两个视图。
第一个视图是整个房间的宽度和尺寸 1250x768
第二个视图是我希望用户能够放大和拖动的区域,大小为 955x465。 x 和 y 位置为 40 x 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);
用户必须完全放大才能限制视图。如果他不在,那么他们仍然可以看到房间的其他区域:(
编辑:我可能误解了你的问题,如果它能帮助你以不同的方式解决问题,我会留下下面的代码供参考。
我可能会检查 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 语句,将您的代码包装在上面的反向逻辑中应该可以正常工作。
旧Post:
我对game maker不是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 帧数量,然后跳过其余部分(但这可能看起来有点不稳定)。
您好,我正在尝试限制用户在 Gamemaker 中可以拖动的范围。
我在一个房间内创建了两个视图。 第一个视图是整个房间的宽度和尺寸 1250x768 第二个视图是我希望用户能够放大和拖动的区域,大小为 955x465。 x 和 y 位置为 40 x 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);
用户必须完全放大才能限制视图。如果他不在,那么他们仍然可以看到房间的其他区域:(
编辑:我可能误解了你的问题,如果它能帮助你以不同的方式解决问题,我会留下下面的代码供参考。
我可能会检查 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 语句,将您的代码包装在上面的反向逻辑中应该可以正常工作。
旧Post:
我对game maker不是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 帧数量,然后跳过其余部分(但这可能看起来有点不稳定)。