Project1

标题: ACE 设置字体某些字体会死掉,怎么会事? [打印本页]

作者: 一箭烂YiJL    时间: 2012-2-3 14:40
标题: ACE 设置字体某些字体会死掉,怎么会事?

Ace 设置那些(某些?)并非 TRUETYPE_FONTTYPE 的字体后,在 draw_text 时会死。
如,请帮忙测试吧:
  1. Font.default_name = "System"
  2. bitmap = Bitmap.new(32, 32)
  3. bitmap.draw_text(0, 0, 32, 32, "A")
复制代码
测试环境:
Win7 Enterprise (企业版) 32-bit 繁体
RGSS Dll:300 (是 6R 下的,还有 Fux2 & yangff 的那个改版 DLL(似乎弄掉了 Plane))

话说 VX 没有问题,只是写出来没有任何东西。而 ACE 不止 System 会这样哦。
作者: 仲秋启明    时间: 2012-2-3 16:17
本帖最后由 仲秋启明 于 2012-2-3 16:48 编辑

我目前还没有发现这样的问题


‘‘


RGSS3Player直接挂掉


──仲秋启明于2012-2-3 16:48补充以上内容’’
作者: 怕鼠的猫    时间: 2012-2-3 16:51
的确会崩溃。
话说,这字体里面也没有汉字和日文字符,你用它干什么呢?
作者: 凌依约    时间: 2012-2-3 16:57
Font.exist?("System") #=> True
应该是软件处理字体出现的问题
作者: 一箭烂YiJL    时间: 2012-2-3 17:36
@仲秋启明
为啥呢?VX 没有问题,不知道 XP 怎样。(我的机子 XP 很麻烦)

@怕鼠的猫
因为在枚举电脑有的字体时,发现一堆没见过的字体(似乎是打印设备的字体(TRUETYPE_FONTTYPE)和光栅字体(RASTER_FONTTYPE)),然后试一试第一个"System",结果崩溃,然后第二个"Terminal"也一样,还有很多,如:Fixedsys、Modern、Roman、Script,看下去很有可能是打印设备的字体。

@凌依约
VX 也会 True,但是不会崩溃。难道 ACE 没有排除 TrueType 以外的字体?
作者: 凌依约    时间: 2012-2-3 17:39
@一箭烂YiJL
这个只有等yangff大大或者fux大大看看能不能从DLL里面发现点线索了
作者: 一箭烂YiJL    时间: 2012-2-3 18:00
凌依约 发表于 2012-2-3 17:39
@一箭烂YiJL
这个只有等yangff大大或者fux大大看看能不能从DLL里面发现点线索了 ...

应该不怎可能,反遍汇那种 DLL 烦死人。源码更不可能(非第三方)。
另外冲定义 eval 或者反定义:
  1. class Object
  2.   undef_method :eval
  3. end
复制代码
会出现 "发生???" 或者 "???错误"(改版)(我看 ??? 并非字符问题,而是未知错误)。只有 Ace 才会这么神奇。呵呵。eval 被破坏后 RM 程序挂掉是理所当然,因为脚本的运行依赖 eval 和 Marshal.load。
(注:RGSS 的 DLL 的 RGSSEval 似乎并非使用 eval,奇怪的是为什么不用 RGSSEval 读取脚本- -)
作者: 亿万星辰    时间: 2012-2-3 18:25
本帖最后由 亿万星辰 于 2012-2-3 18:28 编辑

其实你去windows\fonts下看看各种存在的字体里,并没有System这个名字的……
再比如XP记事本默认的Fixedsys字体,在RM里设置同样是错误。
作者: 一箭烂YiJL    时间: 2012-2-3 18:27
这是一次编译(第三方) Game.exe 使用 "System" 字体的错误过程:
  1. 於 0x757cd36f (内存地址)的 Game.exe 中發生未處理的例外狀況: Microsoft C++ 在記憶體位置 0x003ba48c(内存地址),發生例外狀況: std::bad_alloc
复制代码
让它"继续":
  1. Game.exe 已經觸發中斷點
复制代码
再"继续":
  1. 於 0x015deb96 的 Game.exe 中發生未處理的例外狀況: 0xC0000005: 讀取位置 0xfffffffc 時發生存取違規
复制代码
然后就没了,以返回结果 -529697949 (0xe06d7363) 结束。
有需要可能要解读一下这个返回结果。
而 eval 的 ??? 就查不出任何问题。

@仲秋启明
我觉得会是 DirectDraw 的问题。(要准确知道的话,似乎要 Hook 掉 DDraw.dll 和其他 DLL 做测试,最近出错调用的函数)
作者: 凌依约    时间: 2012-2-3 18:28
本帖最后由 凌依约 于 2012-2-3 18:32 编辑
亿万星辰 发表于 2012-2-3 18:25
其实你去windowsfonts下看看各种存在的字体里,并没有System这个名字的……



应该就是这个吧


作者: 一箭烂YiJL    时间: 2012-2-3 20:38
@亿万星辰@凌依约
结论如下:
System 那些(如5楼所说的那些) ACE 些错误的字体不是打印设备的字体,原来是光棚字体。

字体分三种:
Device(光棚):Ace 出错的那些
Paster(打印装备):原来可以用的
TrueType(平时的.ttf):最常用的字体格式

在 ACE 下,光棚字体无论哪一个都回出错,我的机子目前有:
[System, Terminal, Fixedsys, Courier, MS Serif, MS Sans Serif, Small Fonts]
大家可以不妨试试以上的那些字体,看看会否挂掉?

至于为什么?我认为可能是 Ace 忘记 54 光棚字体?(VX/ACE 都用 DirectDraw ,所以应该忘记 54 了)
于是有一个解决思路:
在 Font.default_name= 加上一个排除 Device(光棚) 字体的判断。
作者: 凌依约    时间: 2012-2-3 21:44
一箭烂YiJL 发表于 2012-2-3 20:38
@亿万星辰@凌依约
结论如下:
System 那些(如5楼所说的那些) ACE 些错误的字体不是打印设备的字体,原来是 ...

原来是这样,受教了
作者: fux2    时间: 2012-2-5 17:39
优化版的DLL有说明,远景图(也就是Plane)弄掉了。
作者: 各种压力的猫君    时间: 2012-2-6 05:07
加上一个判断啥的完全没必要……
难道你打算让玩家输入字体名么……




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