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)
-
非正常关闭.jpg
(135.84 KB, 下载次数: 12)
-
-
问题工程.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
加上exit之后好了。谢谢大佬
作者: SixRC 时间: 2020-3-2 15:48
本帖最后由 SixRC 于 2020-3-3 00:33 编辑
是有问题的
原因是刷新的需要
我的脚本你改成
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
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
就行了 按F12 也不会出问题
以及 你的脚本页★Game_Resolution 也有同样的问题 没有考虑到 F12
假如按F12 窗口会不断变大
32行开始改成
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)
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)
就行了
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |