我是仙女新GameMaker,和我玩耍,努力创造我的下面肖恩·斯伯丁的教程第一平台游戏,尤其是关于this one玩家摄像机跟踪。我使用的是Mac上GameMaker工作室2。
我想使用类似的方法,从而能够在剧烈的上下的脚本事件流畅的变焦,基本上慢慢斜坡向上或向下camera_set_view_size()
PARAMS实现平滑缩放。
我现在有上时许oCamera
对象,它适用于变焦部分当前的代码。
创建活动
/// @description Setup camera
zoom_level = 1;
cam = view_camera[0];
follow = oPlayer;
view_w_half = camera_get_view_width(cam) * 0.5;
view_h_half = camera_get_view_height(cam) * 0.5;
xTo = xstart;
yTo = ystart;
default_zoom_width = camera_get_view_width(cam);
default_zoom_height = camera_get_view_height(cam);
currW = default_zoom_width;
currH = default_zoom_height;
步骤事件
/// @description Update camera
// Update zoom size
if keyboard_check_pressed(ord("I")) {
zoom_level = 0.5;
} else if keyboard_check_pressed(ord("O")) {
zoom_level = 1;
} else if keyboard_check_pressed(ord("P")) {
zoom_level = 2;
}
// Update destination
if (instance_exists(follow)) {
xTo = follow.x;
yTo = follow.y;
}
// Update object position
x += (xTo - x) / 25;
y += (yTo - y) / 25;
// Update view size
zoomXTo = default_zoom_width * zoom_level;
zoomyTo = default_zoom_height * zoom_level;
currW += (zoomXTo - camera_get_view_width(cam)) / 25;
currH += (zoomyTo - camera_get_view_height(cam)) / 25;
camera_set_view_size(cam, currW, currH);
// Clamp camera
x = clamp(x, view_w_half, room_width - view_w_half);
y = clamp(y, view_h_half, room_height - view_h_half);
// Update camera position
camera_set_view_pos(cam, x - view_w_half, y - view_h_half);
缩放位大概可以做一点更简洁,但做这项工作。我仍然不知道如何:
xTo = follow.x
和yTo = follow.y
部分和焦距可变,但想不出规模的变化究竟是如何翻译成X / Y轴的变化...这些被摆弄了一下,似乎并不能够计算如何做到这一点,所以任何帮助,将不胜感激。
非常感谢!
我也一直在寻找一个解决方案,这一点,与您的代码我可以把东西在一起。干得好:
创建活动
// Camera Setup
cam = view_camera[0];
cam_default_w = camera_get_view_width(cam);
cam_default_h = camera_get_view_height(cam);
follow = oPlayer;
view_w_half = camera_get_view_width(cam) * 0.5;
view_h_half = camera_get_view_height(cam) * 0.5;
xTo = xstart;
yTo = ystart;
// Zooming
zoomLevel = 1;
temp_cam_w = cam_default_w;
temp_cam_h = cam_default_h;
// Shaking
shake_length = 0;
shake_magnitude = 0;
shake_remain = 0;
buff = 32;
步骤事件
// Update zoom size
if keyboard_check_pressed(ord("I")) {
zoomLevel = 0.5;
} else if keyboard_check_pressed(ord("O")) {
zoomLevel = 1;
} else if keyboard_check_pressed(ord("P")) {
zoomLevel = 2;
}
// Update view size
zoomXTo = cam_default_w * zoomLevel;
zoomYTo = cam_default_h * zoomLevel;
temp_cam_w += (zoomXTo - camera_get_view_width(cam)) / 25;
temp_cam_h += (zoomYTo - camera_get_view_height(cam)) / 25;
var temp_cam_w_half = temp_cam_w/2;
var temp_cam_h_half = temp_cam_h/2;
camera_set_view_size(cam, temp_cam_w, temp_cam_h);
// Update destination
if (instance_exists(follow)) {
xTo = follow.x;
yTo = follow.y;
}
// Update object position
x += (xTo - x) / 15;
y += (yTo - y) / 15;
// Keep within room
x = clamp(x, temp_cam_w_half+buff, room_width-temp_cam_w_half-buff);
y = clamp(y, temp_cam_h_half+buff, room_height-temp_cam_h_half-buff);
// Camera shake
x += random_range(-shake_remain, shake_remain);
y += random_range(-shake_remain, shake_remain);
shake_remain = max(0, shake_remain-((1/shake_length)*shake_magnitude));
// Update camera view
camera_set_view_pos(cam, x-temp_cam_w_half, y-temp_cam_h_half);
基本上就是我改变是使“钳”部分和“设置视图位置”知道大小改变已经作出。请注意,我用不同的变量名比你,因为我用这对我自己的项目也是如此。