设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: Sion
打印 上一主题 下一主题

[RMVA发布] 行走图换装脚本(内附范例)

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
49 小时
注册时间
2013-7-28
帖子
43
21
发表于 2014-4-4 19:35:22 | 只看该作者
狂赞,楼主造福人类
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
21 小时
注册时间
2013-1-28
帖子
61
22
发表于 2014-4-5 20:21:02 | 只看该作者
漫漫人生路 发表于 2014-2-20 13:53
这个如果做大型的RPG游戏素材需求太可怕了...............

好强大的基利安
正在填初二的坑……
初二四班英雄传2 - 即时战斗类
完成度1/N
好吧...
已邀请测试人员:3
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
21 小时
注册时间
2013-1-28
帖子
61
23
发表于 2014-4-5 20:21:23 | 只看该作者
wshzya 发表于 2014-2-21 11:57
咕……这样装备图(武器和护盾)的制作也是个问题啊。还有一件事,楼主没注意到长发可能会衣服被挡住吗? ...

砍掉基利安的白哉大大
正在填初二的坑……
初二四班英雄传2 - 即时战斗类
完成度1/N
好吧...
已邀请测试人员:3
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
21 小时
注册时间
2013-1-28
帖子
61
24
发表于 2014-4-5 20:23:04 | 只看该作者
xingmot 发表于 2014-3-8 09:14
要是能适用于XAS就好了...

..正在下载,思考同样的问题,应用于XAS有影响么?
正在填初二的坑……
初二四班英雄传2 - 即时战斗类
完成度1/N
好吧...
已邀请测试人员:3
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
45
在线时间
138 小时
注册时间
2011-11-15
帖子
216
25
发表于 2014-5-13 23:18:23 | 只看该作者
楼主,请问能直接发下你的代码吗?我参考,另外论坛附件都挂了??@Sion

点评

附件失效的话,把上方地址栏的 rm 换成 bbs,到原论坛下载即可。  发表于 2014-5-14 09:39
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
163
在线时间
445 小时
注册时间
2013-7-18
帖子
109
26
发表于 2014-6-9 01:32:45 | 只看该作者
   超好的脚本!
不过就是不论身上什么装备 ,存档、读档界面的显示小人都是果体   
不知道 有没有可能将存档的显示图片改成带有装备那种?? 武器不要也行…起码穿件衣服 >_<

点评

(⊙A⊙)哦~好的谢谢LZ大大  发表于 2014-6-9 16:12
建议使用截图存档脚本神马的 - -b  发表于 2014-6-9 13:54
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
642
在线时间
469 小时
注册时间
2013-8-3
帖子
884
27
发表于 2014-6-11 20:47:02 | 只看该作者
本帖最后由 喜阳阳 于 2014-6-11 20:48 编辑

貌似怪来报个BUG,呃(貌似不算)
如果把行走图换成VA原版的就会:

先看看行走图朝下的,嗯嗯,一切正常:

再看看行走图朝右的,啊啊衣服怎么大???

接下来是行走图朝左滴,头上貌似多了什么,走起来上面的还会转,而且帽子怎么跑到下面了?

不敢看行走图朝上的了= =,嗯?貌似很正常?(仔细观察呵呵







点评

↓嗯,谢谢。已经明白了...  发表于 2014-6-16 20:50
你需要VX版的装备图  发表于 2014-6-16 20:12
↓ = =  发表于 2014-6-11 21:20
moy
你给1米2的人穿1米6的衣服当然会出错。  发表于 2014-6-11 21:16
貌似怪可能不,但貌似怪会努力脱离
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
342
在线时间
377 小时
注册时间
2013-1-30
帖子
219
28
发表于 2014-7-9 02:51:19 | 只看该作者
本帖最后由 qknight 于 2014-7-9 02:52 编辑
  1. =begin  =======================================================================
  2.   ☆ 歩行グラ着せ替えスクリプト
  3. -------------------------------------------------------------------------------
  4.   アクターの歩行グラをレイヤー化し、装備による着せ替えを可能にします。
  5. -------------------------------------------------------------------------------
  6.   [使い方]
  7.     1. Graphics/Charactersに装備レイヤーの歩行グラをインポートします。
  8.     2. グラフィックを設定したい装備に以下のようにタグを記述します。
  9.    
  10.       <歩行グラ fn, index => f_priority, l_priority, r_priority, b_priority>
  11.       
  12.       * fn
  13.           ファイル名(拡張子は省略可)
  14.          
  15.         index
  16.           キャラクターインデックス、
  17.           歩行グラを設定する際に使用するものと同じ(0, 1, 2, ..., 7)
  18.          
  19.         (f, l, r, b)_priority
  20.           前, 左, 右, 後ろ向きに対する指定画像のプライオリティ
  21.           0を除く任意の整数で指定します。
  22.           キャラクターの画像のプライオリティを0とし、
  23.           プライオリティの高い順から上のレイヤーとして描画されます。
  24.           なお、複数の装備の間でプライオリティがかぶっている場合、
  25.           下で設定する装備タイプでのレイヤー優先度に準拠します。
  26.          
  27.   [注意事項]
  28.     セーブファイルの歩行グラ他、
  29.     他素材で使用される歩行グラには反映されないことがあります。
  30.     そのため、セーブファイルに関しては顔グラを表示する素材などを使用してください。
  31.    
  32. =end

  33. #==============================================================================
  34. # ■ 設定項目
  35. #==============================================================================

  36. module WS
  37.   module CG
  38.     EquipType_Priority = [0, 1, 2, 3, 4]
  39.       # 装備タイプでのレイヤー優先度を設定します。
  40.       # 配列の各要素は装備タイプIDに対応します(0 = 武器, 1 = 盾, ...)。
  41.       # 他素材で装備タイプを拡張している場合、それに対応した値を
  42.       # 追加してください。
  43.       # レイヤーの優先度はインデックス0 > 1 > 2 ...という感じになります。
  44.   end
  45. end

  46. #==============================================================================
  47. # ■ PlayerGraphics
  48. #------------------------------------------------------------------------------
  49. #  プレイヤーの歩行グラフィックのデータクラスです。
  50. #==============================================================================

  51. class PlayerGraphics
  52.   #--------------------------------------------------------------------------
  53.   # ● 公開インスタンス変数
  54.   #--------------------------------------------------------------------------
  55.   attr_reader :data
  56.   #--------------------------------------------------------------------------
  57.   # ● オブジェクト初期化
  58.   #--------------------------------------------------------------------------
  59.   def initialize(actor)
  60.     @actor = actor
  61.     set_data
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● データのクリア
  65.   #--------------------------------------------------------------------------
  66.   def clear_data
  67.     @data = []
  68.     base_data = [@actor.character_name, @actor.character_index]
  69.     4.times {|i| @data[i] = {0 => base_data} }
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● データキャッシュの設定
  73.   #--------------------------------------------------------------------------
  74.   def set_cache
  75.     @data_cache = @data.dup
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● データの設定
  79.   #--------------------------------------------------------------------------
  80.   def set_data
  81.     clear_data
  82.     @actor.equips.compact.each do |equip|
  83.       note = equip.note.scan(/<(?:歩行グラ|character_graphic)\s*(.+?)\s*\,\s*(\d+)\s*=>\s(\-*\d+)\s*\,\s*(\-*\d+)\s*\,\s*(\-*\d+)\s*\,\s*(\-*\d+)\s*>/).flatten
  84.       next if note.empty?
  85.       e_p = (WS::CG::EquipType_Priority.index(equip.etype_id) || WS::CG::EquipType_Priority.size) * 0.01
  86.       for i in 0..3
  87.         @data[i][note[i + 2].to_i - e_p] = [$1, $2.to_i]
  88.       end
  89.     end
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● ビットマップの更新確認
  93.   #--------------------------------------------------------------------------
  94.   def need_for_update
  95.     return @data_cache != @data
  96.   end
  97. end

  98. #==============================================================================
  99. # ■ Game_Actor
  100. #------------------------------------------------------------------------------
  101. #  アクターを扱うクラスです。
  102. #==============================================================================

  103. class Game_Actor
  104.   #--------------------------------------------------------------------------
  105.   # ● 公開インスタンス変数
  106.   #--------------------------------------------------------------------------
  107.   attr_reader :character_graphic
  108.   #--------------------------------------------------------------------------
  109.   # ● オブジェクト初期化
  110.   #--------------------------------------------------------------------------
  111.   alias ws_player_graphic_initialize initialize
  112.   def initialize(actor_id)
  113.     ws_player_graphic_initialize(actor_id)
  114.     @character_graphic = PlayerGraphics.new(self)
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● グラフィックの変更
  118.   #--------------------------------------------------------------------------
  119.   alias ws_player_graphic_set_graphic set_graphic
  120.   def set_graphic(c_name, c_index, f_name, f_index)
  121.     ws_player_graphic_set_graphic(c_name, c_index, f_name, f_index)
  122.     @character_graphic.set_data
  123.     Cache.update_player_bitmap(self)
  124.     SceneManager.scene.spriteset.refresh_characters if SceneManager.scene.is_a?(Scene_Map)
  125.   end
  126. end

  127. #==============================================================================
  128. # ■ Cache
  129. #==============================================================================

  130. module Cache
  131.   #--------------------------------------------------------------------------
  132.   # ● プレイヤーの歩行グラフィックの取得
  133.   #--------------------------------------------------------------------------
  134.   def self.player(actor_id)
  135.     init_player_bitmap unless @players
  136.     return @players[actor_id]
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● プレイヤーの歩行グラフィックの配列作成
  140.   #--------------------------------------------------------------------------
  141.   def self.init_player_bitmap
  142.     @players = []
  143.     for i in 1...$data_actors.size
  144.       actor = $game_actors[i]
  145.       set_player_bitmap(actor)
  146.     end
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● プレイヤーの歩行グラフィックのビットマップ作成
  150.   #--------------------------------------------------------------------------
  151.   def self.set_player_bitmap(actor)
  152.     base = character(actor.character_name)
  153.     cw = base.width / 12
  154.     ch = base.height / 8
  155.     bitmap = Bitmap.new(cw * 3, ch * 4)
  156.     base_rect = Rect.new(0, 0, cw * 3, ch)
  157.     actor.character_graphic.data.each_with_index do |data, index|
  158.       data.keys.sort.each do |priority|
  159.         src_bitmap = Cache.character(data[priority][0])
  160.         src_rect = base_rect.dup
  161.         src_rect.x, src_rect.y = cw * (data[priority][1] % 4) * 3, ch * ((data[priority][1] / 4) * 4 + index)
  162.         bitmap.blt(0, ch * index, src_bitmap, src_rect)
  163.       end
  164.     end
  165.     @players[actor.id] = bitmap
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● プレイヤーの歩行グラフィックの更新
  169.   #--------------------------------------------------------------------------
  170.   def self.update_player_bitmap(actor)
  171.     @players[actor.id].dispose
  172.     set_player_bitmap(actor)
  173.   end
  174. end

  175. #==============================================================================
  176. # ■ Sprite_Character
  177. #------------------------------------------------------------------------------
  178. #  キャラクター表示用のスプライトです。
  179. #==============================================================================

  180. class Sprite_Character
  181.   #--------------------------------------------------------------------------
  182.   # ● キャラクターのビットマップを設定
  183.   #--------------------------------------------------------------------------
  184.   alias ws_player_graphic_set_character_bitmap set_character_bitmap
  185.   def set_character_bitmap
  186.     if @character.is_a?(Game_Player) || @character.is_a?(Game_Follower)
  187.       self.bitmap = @character.actor ? Cache.player(@character.actor.id) : Cache.empty_bitmap
  188.       @cw = bitmap.width / 3
  189.       @ch = bitmap.height / 4
  190.       self.ox = @cw / 2
  191.       self.oy = @ch
  192.     else
  193.       ws_player_graphic_set_character_bitmap
  194.     end
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 転送元矩形の更新
  198.   #--------------------------------------------------------------------------
  199.   alias ws_player_graphic_update_src_rect update_src_rect
  200.   def update_src_rect
  201.     if @character.is_a?(Game_Player) || @character.is_a?(Game_Follower)
  202.       pattern = @character.pattern < 3 ? @character.pattern : 1
  203.       sx = pattern * @cw
  204.       sy = (@character.direction - 2) / 2 * @ch
  205.       self.src_rect.set(sx, sy, @cw, @ch)
  206.     else
  207.       ws_player_graphic_update_src_rect
  208.     end
  209.   end
  210. end

  211. #==============================================================================
  212. # ■ Scene_Equip
  213. #------------------------------------------------------------------------------
  214. #  装備画面の処理を行うクラスです。
  215. #==============================================================================

  216. class Scene_Equip
  217.   #--------------------------------------------------------------------------
  218.   # ● 開始処理
  219.   #--------------------------------------------------------------------------
  220.   alias ws_player_graphic_start start
  221.   def start
  222.     ws_player_graphic_start
  223.     $game_party.members.each {|member| member.character_graphic.set_cache }
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 終了前処理
  227.   #--------------------------------------------------------------------------
  228.   alias ws_player_graphic_pre_terminate pre_terminate
  229.   def pre_terminate
  230.     ws_player_graphic_pre_terminate
  231.     $game_party.members.each do |member|
  232.       member.character_graphic.set_data
  233.       Cache.update_player_bitmap(member) if member.character_graphic.need_for_update
  234.     end
  235.   end
  236. end

  237. #==============================================================================
  238. # ■ Scene_Map
  239. #------------------------------------------------------------------------------
  240. #  マップ画面の処理を行うクラスです。
  241. #==============================================================================

  242. class Scene_Map
  243.   #--------------------------------------------------------------------------
  244.   # ● 公開インスタンス変数
  245.   #--------------------------------------------------------------------------
  246.   attr_reader :spriteset
  247. end

  248. #==============================================================================
  249. # ■ Game_Interpreter
  250. #------------------------------------------------------------------------------
  251. #  イベントの処理を行うインタプリタのクラスです。
  252. #==============================================================================

  253. class Game_Interpreter
  254.   #--------------------------------------------------------------------------
  255.   # ● 装備の変更
  256.   #--------------------------------------------------------------------------
  257.   alias ws_player_graphic_command_319 command_319
  258.   def command_319
  259.     actor = $game_actors[@params[0]]
  260.     actor.character_graphic.set_cache if actor
  261.     ws_player_graphic_command_319
  262.     actor.character_graphic.set_data if actor
  263.     if actor && actor.character_graphic.need_for_update
  264.       Cache.update_player_bitmap(actor)
  265.       SceneManager.scene.spriteset.refresh_characters if SceneManager.scene.is_a?(Scene_Map)
  266.     end
  267.   end
  268. end

  269. #==============================================================================
  270. # ■ Game_Player
  271. #------------------------------------------------------------------------------
  272. #  プレイヤーを扱うクラスです。
  273. #==============================================================================

  274. class Game_Player
  275.   #--------------------------------------------------------------------------
  276.   # ● 移動コマンドの処理
  277.   #--------------------------------------------------------------------------
  278.   alias ws_player_graphic_process_move_command process_move_command
  279.   def process_move_command(command)
  280.     ws_player_graphic_process_move_command(command)
  281.     params = command.parameters
  282.     if command.code == ROUTE_CHANGE_GRAPHIC
  283.       actor.set_graphic(params[0], params[1], actor.face_name, actor.face_index)
  284.       SceneManager.scene.spriteset.refresh_characters if SceneManager.scene.is_a?(Scene_Map)
  285.     end
  286.   end
  287. end
复制代码
这个脚本是在一个日本的RPG游戏中看到的,觉得很实用就搬了过来,当然无版权许可,所以仅供学习参考用。
因为本人不懂日语和脚本,所以这个脚本也就刚刚会用罢了,范例自然也没有,就个人使用情况看,与楼主的脚本非常相似,关键的不同在于,这个更完善,可以用来显示衣服、裤子、内衣、袜子……从里到外的全套服装。
PS:要使用这个脚本,不论主角们的行走图还是衣服素材的行走图必须是384X256格式
PS2:服装的备注栏里填<歩行グラ 勇者, 0 => 10, 10, 10, 10>
这其中”勇者“是服装素材图的名字,”0“是使用的素材在行走图中的位置,上面一排从左到右是0、1、2、3,下面一排是4、5、6、7,后面的数字大概是人物朝向前后左右时显示的优先级

评分

参与人数 1星屑 +15 收起 理由
vince3725 + 15 精品文章

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2009-11-16
帖子
21
29
发表于 2014-7-14 11:21:50 | 只看该作者
GOOD 怎么木有截图呢,有图就更好了。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
366 小时
注册时间
2009-7-14
帖子
124
30
发表于 2014-8-17 00:13:24 | 只看该作者
@Sion,请问可不可以弄成一个装备,对应多张装备图能对应多张行走图,我是做地图即时战斗类型的,类似野比大雄生化危机那种,角色行走图经常有不同动作,例如步行、跑步、开门、举枪,开枪,但是一个装备只对应一张装备的图,现在只能对应一个动作,行走图换个动作的时候衣服位置就对不上了。
弄成对应主角不同行走图的名字,例如主角行走图换成A1的时候,装备自动对应到后缀 装备1A1的图片可以吗?

点评

把用的脚本发上来我看看先  发表于 2014-8-23 22:43
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-22 10:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表