Project1

标题: (已解决)如何在事件中变更游戏窗口大小 [打印本页]

作者: 翠靈月    时间: 2016-10-26 14:03
标题: (已解决)如何在事件中变更游戏窗口大小
本帖最后由 翠靈月 于 2016-10-26 16:06 编辑

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

未命名.png (323.57 KB, 下载次数: 18)

未命名.png

作者: RaidenInfinity    时间: 2016-10-26 14:39
这个问题是因为Spriteset_Map和各窗口创建的时候已经套用了原本Graphics的大小。解决的办法:

使用此事件脚本指令:
RUBY 代码复制
  1. w = Graphics.width; h = Graphics.height
  2. nw = 544; nh = 416
  3. Graphics.resize_screen(nw,nh)
  4. SceneManager.scene.dispose_spriteset
  5. SceneManager.scene.create_spriteset
  6. SceneManager.scene.dispose_all_windows
  7. SceneManager.scene.create_all_windows
  8. dw = w / 32 * nw
  9. dh = h / 32 * nh
  10. $game_map.set_display_pos(dw,dh)


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

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

作者: 翠靈月    时间: 2016-10-26 14:59
RaidenInfinity 发表于 2016-10-26 14:39
这个问题是因为Spriteset_Map和各窗口创建的时候已经套用了原本Graphics的大小。解决的办法:

使用此事件 ...

非常感谢!
不过有个问题,就是画面放大后画面会偏离主角的所在位置(或者该说主角不在画面中心)
用场景移动虽然可以找回主角的位置,但在移动前还是会先闪现偏移的画面(即使在脚本执行前执行淡出画面也是)
作者: RaidenInfinity    时间: 2016-10-26 15:06
估计你选择的分辨率不是32的倍数
实际上,如果你的分辨率不是32的倍数,就算你是在游戏开始时就套用这个倍率,你也会发现地图移动会产生偏移(尤其是走到边沿的时候)。
作者: 翠靈月    时间: 2016-10-26 15:13
本帖最后由 翠靈月 于 2016-10-26 15:34 编辑
RaidenInfinity 发表于 2016-10-26 15:06
估计你选择的分辨率不是32的倍数。
实际上,如果你的分辨率不是32的倍数,就算你是在游戏开始时就套用这个 ...


好像不是倍率的问题,因为我main订320*160+事件设640*320,画面也会偏移到最右下角
不过修改一下最后一句的座标位置应该就行了
作者: RaidenInfinity    时间: 2016-10-26 15:56
本帖最后由 RaidenInfinity 于 2016-10-26 15:57 编辑

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

在脚本编辑器插入这个脚本:
RUBY 代码复制
  1. module SceneManager
  2.  
  3.   def self.resize_screen(nw,nh)
  4.     w = Graphics.width
  5.     h = Graphics.height
  6.     Graphics.resize_screen(nw,nh)
  7.     scene.dispose_spriteset
  8.     scene.create_spriteset
  9.     scene.dispose_all_windows
  10.     scene.create_all_windows
  11.     px = $game_player.real_x
  12.     py = $game_player.real_y
  13.     cx = $game_map.screen_tile_x / 2
  14.     cy = $game_map.screen_tile_y / 2
  15.     if px < cx || px + cx > $game_map.width
  16.       dx = 0
  17.     else
  18.       dx = px - cx
  19.     end
  20.     if py < cy || py + cy > $game_map.height
  21.       dy = 0
  22.     else
  23.       dy = py - cy
  24.     end   
  25.     $game_map.set_display_pos(dx,dy)
  26.   end
  27.  
  28. end


然后在事件脚本指令调用:
RUBY 代码复制
  1. SceneManager.resize_screen(长,宽)





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1