Project1
标题: (已解决)如何在事件中变更游戏窗口大小 [打印本页]
作者: 翠靈月 时间: 2016-10-26 14:03
标题: (已解决)如何在事件中变更游戏窗口大小
本帖最后由 翠靈月 于 2016-10-26 16:06 编辑
在论坛搜索了一下大部分都是窗口变大画面跟着放大的
不过我需要的不是放大画面,而是只有窗口大小改变(例如原本是400x400,触发事件变成500x500)
有人说用Graphics.resize_screen(xxx,xxx)
但是在事件脚本中使用后,窗口一旦放大,多出来的部分就会变成黑边(如附图),需要按F12回标题画面(刷新画面?)才能读出黑边的画面
该如何改善这个问题呢?或者有没有其他方法能够实现
-
未命名.png
(323.57 KB, 下载次数: 18)
作者: RaidenInfinity 时间: 2016-10-26 14:39
这个问题是因为Spriteset_Map和各窗口创建的时候已经套用了原本Graphics的大小。解决的办法:
使用此事件脚本指令:
w = Graphics.width; h = Graphics.height
nw = 544; nh = 416
Graphics.resize_screen(nw,nh)
SceneManager.scene.dispose_spriteset
SceneManager.scene.create_spriteset
SceneManager.scene.dispose_all_windows
SceneManager.scene.create_all_windows
dw = w / 32 * nw
dh = h / 32 * nh
$game_map.set_display_pos(dw,dh)
w = Graphics.width; h = Graphics.height
nw = 544; nh = 416
Graphics.resize_screen(nw,nh)
SceneManager.scene.dispose_spriteset
SceneManager.scene.create_spriteset
SceneManager.scene.dispose_all_windows
SceneManager.scene.create_all_windows
dw = w / 32 * nw
dh = h / 32 * nh
$game_map.set_display_pos(dw,dh)
将544和416更改成你想要的分辨率。
另外我建议在使用此脚本之前使用淡出画面,之后则使用淡出画面,呈现效果可能会比较好。
作者: 翠靈月 时间: 2016-10-26 14:59
非常感谢!
不过有个问题,就是画面放大后画面会偏离主角的所在位置(或者该说主角不在画面中心)
用场景移动虽然可以找回主角的位置,但在移动前还是会先闪现偏移的画面(即使在脚本执行前执行淡出画面也是)
作者: RaidenInfinity 时间: 2016-10-26 15:06
估计你选择的分辨率不是32的倍数。
实际上,如果你的分辨率不是32的倍数,就算你是在游戏开始时就套用这个倍率,你也会发现地图移动会产生偏移(尤其是走到边沿的时候)。
作者: 翠靈月 时间: 2016-10-26 15:13
本帖最后由 翠靈月 于 2016-10-26 15:34 编辑
好像不是倍率的问题,因为我main订320*160+事件设640*320,画面也会偏移到最右下角
不过修改一下最后一句的座标位置应该就行了
作者: RaidenInfinity 时间: 2016-10-26 15:56
本帖最后由 RaidenInfinity 于 2016-10-26 15:57 编辑
因为代码比较长所以事件指令装不下了。
在脚本编辑器插入这个脚本:
module SceneManager
def self.resize_screen(nw,nh)
w = Graphics.width
h = Graphics.height
Graphics.resize_screen(nw,nh)
scene.dispose_spriteset
scene.create_spriteset
scene.dispose_all_windows
scene.create_all_windows
px = $game_player.real_x
py = $game_player.real_y
cx = $game_map.screen_tile_x / 2
cy = $game_map.screen_tile_y / 2
if px < cx || px + cx > $game_map.width
dx = 0
else
dx = px - cx
end
if py < cy || py + cy > $game_map.height
dy = 0
else
dy = py - cy
end
$game_map.set_display_pos(dx,dy)
end
end
module SceneManager
def self.resize_screen(nw,nh)
w = Graphics.width
h = Graphics.height
Graphics.resize_screen(nw,nh)
scene.dispose_spriteset
scene.create_spriteset
scene.dispose_all_windows
scene.create_all_windows
px = $game_player.real_x
py = $game_player.real_y
cx = $game_map.screen_tile_x / 2
cy = $game_map.screen_tile_y / 2
if px < cx || px + cx > $game_map.width
dx = 0
else
dx = px - cx
end
if py < cy || py + cy > $game_map.height
dy = 0
else
dy = py - cy
end
$game_map.set_display_pos(dx,dy)
end
end
然后在事件脚本指令调用:
SceneManager.resize_screen(长,宽)
SceneManager.resize_screen(长,宽)
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |