博客

  • RXDataEditor – RMXP 数据库备注编辑器

    简介

    本工具为 RMXP 数据库增加了与 VX 及 VX Ace 相同的“备注”功能。
    灵感来源于http://rm.66rpg.com/forum.php?mod=viewthread&tid=241539

    截图

    RXDataEditor_Screenshot
    (更多…)

  • HexColor:在RGSS中使用16进制颜色表示法(2017.06.12更新)

    此脚本使Color类支持十六进制颜色表示法。使用形如”#FFFFFF”的字符串(#号可省略)替代形如(255,255,255)的RGB颜色数值表示。
    可使用缩略形式,如”#112233″可写作”#123″,”#000000″可写作”#0″
    示例:

    FireBrick = Color.new("#B22222",222)
    p FireBrick #=> (178.000000,34.000000,34.000000,222.000000)

    (更多…)

  • 在RGSS中读取/写入ini文件(2016.10.14更新)

    使用这段脚本可以在RGSS中比较快捷地读取、写入ini文件中的值。需要转码模块才能正常处理中文等字符。

    INI = IniFile.new(".\\Game.ini")
    p INI[:Game][:Title] #获取游戏标题,缓冲区大小默认为128
    p INI[:Game][:Title2] #读取一个不存在的键,则返回空字符串
    INI.default = "NONE" #若读取的键不存在则返回"NONE"
    INI.buffer_size = 256 #指定缓冲区大小为256
    INI[:Game][:Title] = "测试工程" #写入键值

    (更多…)

  • EasyConv : 字符串转码模块

    在RGSS中使用Win32API时,如果涉及中文及其他特殊字符,就必须在系统代码页及UTF-8间进行必要的转换,否则就会出现乱码。在许许多多的脚本中都可以见到类似的转码脚本,其中大多数年代久远,作者已不可考。我的这个版本只是选取一个常见的版本,简单地进行了些许优化。

    #==============================================================================
    # ■ EasyConv
    #------------------------------------------------------------------------------
    #  转码模块。原作者不明,由失落的乐章优化。
    #==============================================================================
    
    module EasyConv
      #--------------------------------------------------------------------------
      # ● 常量定义
      #--------------------------------------------------------------------------
      CP_ACP = 0
      CP_UTF8 = 65001
      M2W = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
      W2M = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
      #--------------------------------------------------------------------------
      # ● 转码
      #--------------------------------------------------------------------------
      def s2u
        len = M2W.call(CP_ACP, 0, self, -1, nil, 0)
        buf = "\0" * (len*2)
        M2W.call(CP_ACP, 0, self, -1, buf, buf.size/2)
        len = W2M.call(CP_UTF8, 0, buf, -1, nil, 0, nil, nil)
        ret = "\0" * len
        W2M.call(CP_UTF8, 0, buf, -1, ret, ret.size, nil, nil)
        ret[-1] = ""
        return ret
      end
      #--------------------------------------------------------------------------
      # ● 转码
      #--------------------------------------------------------------------------
      def u2s
        len = M2W.call(CP_UTF8, 0, self, -1, nil, 0)
        buf = "\0" * (len*2)
        M2W.call(CP_UTF8, 0, self, -1, buf, buf.size/2)
        len = W2M.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil)
        ret = "\0" * len
        W2M.call(CP_ACP, 0, buf, -1, ret, ret.size, nil, nil)
        return ret
      end
    end
    
    class String
      include EasyConv
    end
  • Win32API应用:窗口篇

    1.禁用窗口最小化、关闭按钮:

    MF_GRAYED = 0x01
    SC_MINIMIZE = 0xF020  #最小化
    SC_CLOSE = 0xF060 #关闭
    HWND = Win32API.new('user32.dll','GetActiveWindow',nil,'l').call
    GSM  = Win32API.new('user32.dll','GetSystemMenu','ll','l').call(HWND,0)
    Win32API.new('user32.dll','RemoveMenu','lll','l').call(GSM,SC_MINIMIZE,MF_GRAYED) #禁用最小化
    Win32API.new('user32.dll','RemoveMenu','lll','l').call(GSM,SC_CLOSE,MF_GRAYED) #禁用关闭
    

    最小化按钮无法变灰,只会失效;关闭按钮可以正常变灰。

    2.半透明窗口:

    #设置不透明度(有效范围0~255)
    OPACITY = 150
    #获取窗口句柄
    HWND = Win32API.new('user32','GetActiveWindow',nil,'l').call
    #设置窗口风格WS_EX_LAYERED (0x00080000)
    Win32API.new('user32','SetWindowLong','lil','l').call(HWND,-20,0x00080000)
    Win32API.new('user32','SetLayeredWindowAttributes','llil','l').call(HWND,0,OPACITY,2)
    

    (更多…)

  • 判断RM窗口是否处于全屏状态

    module Graphics
      #取得窗口句柄
      HWND = Win32API.new('user32','GetActiveWindow',nil,'l').call
      def self.fullscreen?
        #取得窗口范围矩形
        window_rect = "\0" * 16
        Win32API.new('user32','GetWindowRect',['l','p'],'i').call(HWND,window_rect)
        wl,wt,wr,wb = window_rect.unpack('llll')
        #取得客户区矩形
        client_rect = "\0" * 16
        Win32API.new('user32','GetClientRect',['l','p'],'i').call(HWND,client_rect)
        cl,ct,cr,cb = client_rect.unpack('llll')
        wr - wl == cr
      end
    end
    

    使用时:

    Graphics.fullscreen?    #当游戏处于全屏状态时返回true, 否则返回false

    原理:使用GetWindowRect 和GetClientRect 分别取得游戏窗口的整个范围矩形和客户区矩形。游戏全屏后,由于不再存在边框,这两个矩形就是相等的。而在窗口模式下,客户区矩形会小一些。

  • 工作室网站数据恢复

    目前论坛的数据已经恢复到2014年7-8月时的状态。

  • 使用OCRA将Ruby程序打包为EXE

    OCRA(OneClick Ruby Application Builder)是一个将.rb文件打包为可执行文件的gem,生成的EXE可脱离Ruby环境运行。其原理是将Ruby程序运行所需的解释器、gems等全部打包“带走”。
    首先按常规方法安装OCRA:

    gem install ocra

     

    常用参数:

    --windows 不显示控制台(rubyw.exe)
    --console 显示控制台 (默认,ruby.exe)
    --dll dllname 包含Ruby的bin目录中指定的DLL
    --no-lzma 打包时禁用LZMA压缩
    --quiet 不显示打包进度
    --help 查看ocra帮助
    --no-autoload 不包含脚本中autoload的项目
    --icon 用自定义的ico替换掉默认的红宝石图标

     

    命令行下切换到文件所在目录,运行:

    ocra --console name.rb

     

    耐心等待一段时间后EXE文件就生成了。

  • 世界,你好!

    欢迎使用WordPress。这是系统自动生成的演示文章。编辑或者删除它,然后开始您的博客!