查看: 2712|回复: 6

[已经解决] (已解决)如何在事件中变更游戏窗口大小

[复制链接]
梦石
0
星屑
3372
在线时间
1123 小时
注册时间
2015-12-24
回帖
236
发表于 2016-10-26 14:03:52 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 翠靈月 于 2016-10-26 16:06 编辑

在论坛搜索了一下大部分都是窗口变大画面跟着放大的
不过我需要的不是放大画面,而是只有窗口大小改变(例如原本是400x400,触发事件变成500x500)
有人说用Graphics.resize_screen(xxx,xxx)
但是在事件脚本中使用后,窗口一旦放大,多出来的部分就会变成黑边(如附图),需要按F12回标题画面(刷新画面?)才能读出黑边的画面
该如何改善这个问题呢?或者有没有其他方法能够实现
未命名.png
梦石
0
星屑
6891
在线时间
7027 小时
注册时间
2013-11-2
回帖
1263

开拓者剧作品鉴家

发表于 2016-10-26 14:39:48 | 显示全部楼层
这个问题是因为Spriteset_Map和各窗口创建的时候已经套用了原本Graphics的大小。解决的办法:

使用此事件脚本指令:
[pre lang="ruby"]
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)
[/pre]

将544和416更改成你想要的分辨率。

另外我建议在使用此脚本之前使用淡出画面,之后则使用淡出画面,呈现效果可能会比较好。
回复

使用道具 举报

梦石
0
星屑
3372
在线时间
1123 小时
注册时间
2015-12-24
回帖
236
 楼主| 发表于 2016-10-26 14:59:54 | 显示全部楼层
RaidenInfinity 发表于 2016-10-26 14:39
这个问题是因为Spriteset_Map和各窗口创建的时候已经套用了原本Graphics的大小。解决的办法:

使用此事件 ...

非常感谢!
不过有个问题,就是画面放大后画面会偏离主角的所在位置(或者该说主角不在画面中心)
用场景移动虽然可以找回主角的位置,但在移动前还是会先闪现偏移的画面(即使在脚本执行前执行淡出画面也是)
回复

使用道具 举报

梦石
0
星屑
6891
在线时间
7027 小时
注册时间
2013-11-2
回帖
1263

开拓者剧作品鉴家

发表于 2016-10-26 15:06:44 | 显示全部楼层
估计你选择的分辨率不是32的倍数。
实际上,如果你的分辨率不是32的倍数,就算你是在游戏开始时就套用这个倍率,你也会发现地图移动会产生偏移(尤其是走到边沿的时候)。
回复

使用道具 举报

梦石
0
星屑
3372
在线时间
1123 小时
注册时间
2015-12-24
回帖
236
 楼主| 发表于 2016-10-26 15:13:03 | 显示全部楼层
本帖最后由 翠靈月 于 2016-10-26 15:34 编辑
RaidenInfinity 发表于 2016-10-26 15:06
估计你选择的分辨率不是32的倍数。
实际上,如果你的分辨率不是32的倍数,就算你是在游戏开始时就套用这个 ...


好像不是倍率的问题,因为我main订320*160+事件设640*320,画面也会偏移到最右下角
不过修改一下最后一句的座标位置应该就行了
回复

使用道具 举报

梦石
0
星屑
6891
在线时间
7027 小时
注册时间
2013-11-2
回帖
1263

开拓者剧作品鉴家

发表于 2016-10-26 15:56:08 | 显示全部楼层
本帖最后由 RaidenInfinity 于 2016-10-26 15:57 编辑

因为代码比较长所以事件指令装不下了。

在脚本编辑器插入这个脚本:
[pre lang="ruby"]
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  
[/pre]

然后在事件脚本指令调用:
[pre lang="ruby"]
SceneManager.resize_screen(长,宽)
[/pre]

点评

可以了!再次感谢  发表于 2016-10-26 16:04

评分

参与人数 1星屑 +250 梦石 +1 收起 理由
怪蜀黍 + 250 + 1 楼主认可的解答

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部