查看: 2899|回复: 7

[已经解决] 扩大分辨率然后同步扩大渐变,导致游戏不能正常退出

[复制链接]
梦石
0
星屑
625
在线时间
130 小时
注册时间
2015-4-2
回帖
58

开拓者

发表于 2020-3-1 23:40:41 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 YSC 于 2020-3-1 23:57 编辑

把分辨率改成了1024*576,发现渐变范围没有改变,然后通过搜索找了一个扩大渐变的方法(方法链接https://rpg.blue/thread-479522-1-1.html)。按照这个方法成功扩大了渐变范围。然后发现了另一个问题:退出游戏的时候,游戏程序会直接崩溃,并不是正常退出。。。。求各位大侠帮忙看一下,谢谢谢谢
2222.jpg
非正常关闭.jpg

问题工程.rar

1.81 MB, 下载次数: 78

点评

是我的产物.. 以bug多著称 先睡觉 我明天改(不过上次怎么没人提...)  发表于 2020-3-2 01:23
梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
回帖
705

R考场第七期纪念奖

发表于 2020-3-2 03:20:11 | 显示全部楼层
本帖最后由 SixRC 于 2020-3-2 03:42 编辑

嗯...还没睡

这个问题的原因是我拿bitmap去替换了原来的东西
然后大概bitmap在退出时会被销毁
然后rm退出时又还对资源进行了一些操作 导致了非法读取

解决方法非常简单 不要正常退出就行了..
方法就是在Main脚本页的最后加上一行 exit
相当于你在游戏里点退出的同时点了窗口红叉叉关进程 对于用户没有任何体验上的区别
而游戏退出 系统会自动回收任何假如没有回收的资源(不然点叉叉关进程就爆炸啦)
所以 我想说
解决方法就这么简单 嗯 没有副作用

当然也有麻烦的做法 可是那是没有必要的

有不理解的地方或希望改进的请提

现在真睡了


我突然想到真正的问题了
可能这个退出后的操作是和F12功能关联的
所以可能按F12重新游戏也会爆炸
呃 那反正先睡觉 明天再说
回复

使用道具 举报

梦石
0
星屑
625
在线时间
130 小时
注册时间
2015-4-2
回帖
58

开拓者

 楼主| 发表于 2020-3-2 12:36:48 | 显示全部楼层
SixRC 发表于 2020-3-2 03:20
嗯...还没睡

这个问题的原因是我拿bitmap去替换了原来的东西

加上exit之后好了。谢谢大佬
回复

使用道具 举报

梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
回帖
705

R考场第七期纪念奖

发表于 2020-3-2 15:48:36 | 显示全部楼层
本帖最后由 SixRC 于 2020-3-3 00:33 编辑
YSC 发表于 2020-3-2 12:36
加上exit之后好了。谢谢大佬


是有问题的
原因是刷新的需要
我的脚本你改成
[pre lang="ruby"]class << Graphics
  # 渐变修正 用于 103J
  FXTN_dll = Win32API.new("kernel32","GetModuleHandleA","p","l").call("RGSS103J")
  gdi = Win32API.new("kernel32","GetModuleHandleA","p","l").call("gdi32")
  delo = Win32API.new("kernel32","GetProcAddress","lp","l").call(gdi, "DeleteObject")
  # pass width, height
  FXTN_rep = ExtraFunc.parse %Q{
    mov edi,#{FXTN_dll}
    mov esi,[edi + 0x12B6C4]
    mov esi,[esi + 0x144]
    push dword [esi + 0x2C]
    mov eax, #{delo}
    call eax
    mov dword[esi + 0x20], 0x20
    mov ecx,esi
    push dword[esp + 8]
    push dword[esp + 8]
    lea eax,[edi+0x86540]
    call eax
    mov edi,[edi + 0x12B6C4]
    mov edi,[edi + 0x148]
    mov eax,[esp + 4]
    mov [edi + 0x10],eax
    mov [edi + 0xC8],eax
    mov eax,[esp + 8]
    mov [edi + 0x14],eax
    mov [edi + 0xCC],eax
    ret 8
  }
  # 修正为 w * h  可以重复调用
  def fix_trans(width, height)
    ExtraFunc.run FXTN_rep, width, height
  end
end[/pre]
就行了 按F12 也不会出问题

以及 你的脚本页★Game_Resolution 也有同样的问题 没有考虑到 F12
假如按F12  窗口会不断变大
32行开始改成
[pre lang="ruby"]  addw =  wds[2] - wds[0]
  addh =  wds[3] - wds[1]
  if addw >= GAME_WINDOW::INT_WIDTH
    addw -= GAME_WINDOW::INT_WIDTH
    addh -= GAME_WINDOW::INT_HEIGHT
    x, y = wds[0], wds[1]
  else
    addw -= 640
    addh -= 480
    x = wds[0] - (GAME_WINDOW::INT_WIDTH - 640) / 2
    y = wds[1] - (GAME_WINDOW::INT_HEIGHT - 480) / 2
  end
  swp.call(hWnd, 0, x, y, GAME_WINDOW::INT_WIDTH + addw, GAME_WINDOW::INT_HEIGHT+addh,0x20) [/pre]
就行了

点评

YSC
多谢大侠,都好了  发表于 2020-3-4 01:42
现在可以了 时间有点久我忘记细节了 东西少写了  发表于 2020-3-3 00:34
YSC
如果光加一个exit,按F12游戏会崩掉。但是换完这两段代码,渐变范围又变成640*480了。  发表于 2020-3-2 21:45

评分

参与人数 1星屑 +100 赞 +1 收起 理由
RyanBern + 100 + 1 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部