查看: 5012|回复: 6

[通用发布] 【通用】边运行游戏边提取素材文件到游戏目录

[复制链接]
梦石
0
星屑
1002
在线时间
1270 小时
注册时间
2011-2-14
回帖
5388
发表于 2013-2-1 17:23:17 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 R-零 于 2013-8-1 20:21 编辑

这个先在幻天发布过了,这里只是想让更多的人看到。

通常来说发布游戏的时候需要把素材文件放进自己的工程里面

但是如果文件太多,然后又懒得自己一个一个去选呢?

用游戏发布素材提取脚本就可以帮你解决这个问题,站里也有不少这样的脚本

但是因为有些工程用到的文件往往是在脚本里指定的,或者是变量生成的,所以原先一般的一次性能提取完的脚本多少会提取不全

这个脚本可以在运行时根据需要将文件复制到工程目录下,如果文件找不到还可以忽略文件(缺少图片的话自动变成32*32的空白位图,音效直接变为没有)
只要把游戏从头到尾彻底测试一遍就可以了呢
[pre lang="ruby" line="1" file="1"]=begin
说明:
<span style="background-color: rgb(255, 255, 255); ">这个脚本可以在运行时根据需要将文件复制到工程目录下,如果文件找不到还可以忽略文件(缺少图片的话自动变成32*32的空白位图,音效直接变为没有)</span>
<span style="background-color: rgb(255, 255, 255); ">只要把游戏从头到尾彻底测试一遍就可以了呢</span>

2013年2月1日 from 幻想天空 www.rpgsky.net 作者:克莉丝
=end
#这里填写复制来源(Graphics是这个目录的子目录,注意不能用"\"来表示子目录要用"/"

RES = 'D:/Program Files (x86)/RPG Maker VX Ace/RTP/'  #●●●●●●●●●●●●●●●●

#这里填写工程的目录(Graphics是这个目录的子目录

TO = '请自己填写你的工程目录哦,例子子在上面'
#●●●●●●●●●●●●●●●●

FS = ["","jpeg",".jpg",".png",".bmp",".wav",".mp3",".ogg","mid","wma","mov"]#这里填写需要查找的格式
#==============================================================================
# ■ String
#------------------------------------------------------------------------------
#  String 类追加定义。
#==============================================================================
class String
        #----------------------------------------------------------------------------
        # ● API
        #----------------------------------------------------------------------------
        @@MultiByteToWideChar  = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
        @@WideCharToMultiByte  = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
        #----------------------------------------------------------------------------
        # ● UTF-8 转系统编码
        #----------------------------------------------------------------------------
        def u2s
                i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
                buffer = "\0" * (i*2)
                @@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
                i = @@WideCharToMultiByte.call(0, 0, buffer, -1, nil, 0, nil, nil)
                result = "\0" * i
                @@WideCharToMultiByte.call(0, 0, buffer, -1, result, i, nil, nil)
                result.chop!
                return result
        end
end
COPYFILE = Win32API.new("kernel32","CopyFile","ppl","l")
def copyfile(from,to)
  from = from.u2s
  to = to.u2s
  a = 1
  if not File.exist?(to)
    a = COPYFILE.call(from,to,1)
  end
  return a
end
class Bitmap
  alias saku_init initialize
  def initialize*a
    if a[0].is_a?(String)
      from = RES + a[0]
      to = TO+a[0]
      l = []
      for af in FS
        copyfile(from+af,to+af)
        l.push(File.exist?((a[0]+af).u2s))
      end
      a = [32,32] if not l.include?(true)
    end
    saku_init *a
  end
end
module Audio
  for word in ["se","me","bgm","bgs"]
    eval(
  "@saku_#{word} = method('#{word}_play')
  def self.#{word}_play*a
      from = RES + a[0]
      to = TO+a[0]
      l = []
      for af in FS
        copyfile(from+af,to+af)
        l.push(File.exist?((a[0]+af).u2s))
      end
      a = [""] if not l.include?(true)
    @saku_#{word}.call *a
    end
")
end
end  
[/pre]
如果有错误请及时反馈哦,毕竟这个是没严格测试的

顺道召唤精灵@精灵使者  
梦石
0
星屑
63
在线时间
167 小时
注册时间
2010-6-19
回帖
257
发表于 2013-2-1 17:25:06 来自手机 | 显示全部楼层
看了几遍都看不懂。。

点评

代码本身不需要你看懂,重要的是你要知道它的功能  发表于 2013-2-1 17:27
回复

使用道具 举报

梦石
1
星屑
23236
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2013-2-1 18:14:03 | 显示全部楼层
本帖最后由 喵呜喵5 于 2013-2-1 18:29 编辑

好像很实用的样子
精简RTP利器么……

拿自己的游戏试试看看…………

=============================


用VA试了半天结果都没成功…………

回复

使用道具 举报

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

发表于 2013-2-1 18:27:04 | 显示全部楼层
我记得以前通过游戏之后会给出一个txt写出来丢失文件的列表来着。
回复

使用道具 举报

虚構歪曲

梦石
0
星屑
354
在线时间
1196 小时
注册时间
2010-12-18
回帖
3842

贵宾

发表于 2013-2-10 14:09:12 | 显示全部楼层
UI> 于是没测试到还是会漏掉……(干脆直接扫脚本的读取段吧!

点评

头像萎了  发表于 2013-2-10 15:09
回复

使用道具 举报

梦石
0
星屑
1002
在线时间
1270 小时
注册时间
2011-2-14
回帖
5388
 楼主| 发表于 2013-2-10 15:06:03 | 显示全部楼层
忧雪の伤 发表于 2013-2-10 14:09
UI> 于是没测试到还是会漏掉……(干脆直接扫脚本的读取段吧!

扫描脚本的话不是会把按照变量生成文件名的文件漏掉么

点评

UI> 確實,233  发表于 2013-2-10 15:38
回复

使用道具 举报

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
回帖
1296
发表于 2013-2-11 23:28:52 来自手机 | 显示全部楼层
R-零 发表于 2013-2-10 15:06
扫描脚本的话不是会把按照变量生成文件名的文件漏掉么

正则表达式匹配graphics神马的- -b
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部