Project1

标题: 扩大分辨率然后同步扩大渐变,导致游戏不能正常退出 [打印本页]

作者: YSC    时间: 2020-3-1 23:40
标题: 扩大分辨率然后同步扩大渐变,导致游戏不能正常退出
本帖最后由 YSC 于 2020-3-1 23:57 编辑

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

2222.jpg (425.8 KB, 下载次数: 14)

2222.jpg

非正常关闭.jpg (135.84 KB, 下载次数: 12)

非正常关闭.jpg

问题工程.rar

1.81 MB, 下载次数: 78


作者: SixRC    时间: 2020-3-2 03:20
本帖最后由 SixRC 于 2020-3-2 03:42 编辑

嗯...还没睡

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

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

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

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

现在真睡了


我突然想到真正的问题了
可能这个退出后的操作是和F12功能关联的
所以可能按F12重新游戏也会爆炸
呃 那反正先睡觉 明天再说
作者: YSC    时间: 2020-3-2 12:36
SixRC 发表于 2020-3-2 03:20
嗯...还没睡

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

加上exit之后好了。谢谢大佬
作者: SixRC    时间: 2020-3-2 15:48
本帖最后由 SixRC 于 2020-3-3 00:33 编辑
YSC 发表于 2020-3-2 12:36
加上exit之后好了。谢谢大佬


是有问题的
原因是刷新的需要
我的脚本你改成
RUBY 代码复制
  1. class << Graphics
  2.   # 渐变修正 用于 103J
  3.   FXTN_dll = Win32API.new("kernel32","GetModuleHandleA","p","l").call("RGSS103J")
  4.   gdi = Win32API.new("kernel32","GetModuleHandleA","p","l").call("gdi32")
  5.   delo = Win32API.new("kernel32","GetProcAddress","lp","l").call(gdi, "DeleteObject")
  6.   # pass width, height
  7.   FXTN_rep = ExtraFunc.parse %Q{
  8.     mov edi,#{FXTN_dll}
  9.     mov esi,[edi + 0x12B6C4]
  10.     mov esi,[esi + 0x144]
  11.     push dword [esi + 0x2C]
  12.     mov eax, #{delo}
  13.     call eax
  14.     mov dword[esi + 0x20], 0x20
  15.     mov ecx,esi
  16.     push dword[esp + 8]
  17.     push dword[esp + 8]
  18.     lea eax,[edi+0x86540]
  19.     call eax
  20.     mov edi,[edi + 0x12B6C4]
  21.     mov edi,[edi + 0x148]
  22.     mov eax,[esp + 4]
  23.     mov [edi + 0x10],eax
  24.     mov [edi + 0xC8],eax
  25.     mov eax,[esp + 8]
  26.     mov [edi + 0x14],eax
  27.     mov [edi + 0xCC],eax
  28.     ret 8
  29.   }
  30.   # 修正为 w * h  可以重复调用
  31.   def fix_trans(width, height)
  32.     ExtraFunc.run FXTN_rep, width, height
  33.   end
  34. end

就行了 按F12 也不会出问题

以及 你的脚本页★Game_Resolution 也有同样的问题 没有考虑到 F12
假如按F12  窗口会不断变大
32行开始改成
RUBY 代码复制
  1. addw =  wds[2] - wds[0]
  2.   addh =  wds[3] - wds[1]
  3.   if addw >= GAME_WINDOW::INT_WIDTH
  4.     addw -= GAME_WINDOW::INT_WIDTH
  5.     addh -= GAME_WINDOW::INT_HEIGHT
  6.     x, y = wds[0], wds[1]
  7.   else
  8.     addw -= 640
  9.     addh -= 480
  10.     x = wds[0] - (GAME_WINDOW::INT_WIDTH - 640) / 2
  11.     y = wds[1] - (GAME_WINDOW::INT_HEIGHT - 480) / 2
  12.   end
  13.   swp.call(hWnd, 0, x, y, GAME_WINDOW::INT_WIDTH + addw, GAME_WINDOW::INT_HEIGHT+addh,0x20)

就行了




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