GameMaker视图缩放问题:添加obj_cview后缩放功能失效
GameMaker视图缩放异常与跟随绑定问题解决
嘿,我太懂你遇到的这俩GameMaker视图坑了——当年做像素RPG的时候,视图缩放和跟随踩过一模一样的雷,给你拆解一下问题和解决方案:
问题1:缩放时视图缩至左上角
你原来的代码用view_xview[0]/2和view_yview[0]/2来设置view_hborder/view_vborder,这是核心问题:
view_xview[0]是视图在房间坐标系里的左上角X坐标,不是窗口与视图的尺寸差- 用它来计算边框,相当于把视图的左边界往左上角偏移,缩放自然就锚定在左上角了
修复方案:基于视图中心+窗口居中逻辑调整
要让缩放围绕视图(或目标对象)中心,且视图在窗口里居中,应该这么改代码:
// 1. 先算出当前视图在房间里的中心坐标 var _room_center_x = view_xview[0] + view_wview[0] / 2; var _room_center_y = view_yview[0] + view_hview[0] / 2; // 2. 执行你原来的视图移动操作(比如往左上移100) _room_center_x -= 100; _room_center_y -= 100; // 3. 重新设置视图位置,确保中心在目标点 view_xview[0] = _room_center_x - view_wview[0] / 2; view_yview[0] = _room_center_y - view_hview[0] / 2; // 4. 计算窗口与视图的尺寸差,设置border让视图在窗口居中 view_hborder[0] = (window_get_width() - view_wview[0]) / 2; view_vborder[0] = (window_get_height() - view_hview[0]) / 2;
问题2:绑定view_object[0]后缩放失效
当你设置view_object[0] = obj_cview,GameMaker会自动接管视图位置——它会持续把视图中心对准obj_cview的坐标,这会直接覆盖你手动修改view_xview/view_yview的代码,所以你的空格键缩放逻辑就被冲掉了。
两种修复思路:
思路1:放弃view_object,手动实现视图跟随
这种方式能完全掌控视图的所有操作(移动、缩放、旋转),适合需要自定义逻辑的场景:
在你的控制器对象(或全局Step事件)里写:
// 手动实现视图跟随obj_cview if instance_exists(obj_cview) { // 让视图中心对准obj_cview的坐标 var _target_x = obj_cview.x - view_wview[0] / 2; var _target_y = obj_cview.y - view_hview[0] / 2; // 可以加平滑跟随效果(可选) view_xview[0] = lerp(view_xview[0], _target_x, 0.1); view_yview[0] = lerp(view_yview[0], _target_y, 0.1); // 同步视图旋转(对应你原来的view_angle[0] = -...) view_angle[0] = -obj_cview.image_angle; } // 空格键缩放逻辑(现在不会被自动跟随覆盖了) if keyboard_check_pressed(vk_space) { var _scale_factor = 0.8; // 缩小到80%,改成1.2就是放大 var _current_center_x = view_xview[0] + view_wview[0] / 2; var _current_center_y = view_yview[0] + view_hview[0] / 2; // 缩放视图尺寸 view_wview[0] *= _scale_factor; view_hview[0] *= _scale_factor; // 重新定位视图,保持中心不变 view_xview[0] = _current_center_x - view_wview[0] / 2; view_yview[0] = _current_center_y - view_hview[0] / 2; // 重新设置窗口居中的border view_hborder[0] = (window_get_width() - view_wview[0]) / 2; view_vborder[0] = (window_get_height() - view_hview[0]) / 2; }
思路2:保留view_object,修改视图尺寸而非位置
如果你想保留GameMaker的自动跟随,可以直接修改view_wview/view_hview(视图尺寸)来实现缩放,因为自动跟随会自动让视图中心对准obj_cview,无需手动调整位置:
在obj_cview的Step事件里写:
// 空格键缩放逻辑 if keyboard_check_pressed(vk_space) { var _scale_factor = 0.8; // 直接缩放视图尺寸 view_wview[0] *= _scale_factor; view_hview[0] *= _scale_factor; // 重新设置窗口居中的border view_hborder[0] = (window_get_width() - view_wview[0]) / 2; view_vborder[0] = (window_get_height() - view_hview[0]) / 2; } // 同步视图旋转 view_angle[0] = -image_angle;
内容的提问来源于stack exchange,提问作者ZozeR
相关产品推荐
相关产品推荐

