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

Project1

 找回密码
 注册会员
搜索
查看: 3124|回复: 1
打印 上一主题 下一主题

[RMVX发布] 增加行走图的行走动作

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
246 小时
注册时间
2008-8-6
帖子
99
跳转到指定楼层
1
发表于 2011-4-13 02:40:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
应 淡忆已然 要求所写的脚本,实现行走图的行走动作可任意,并兼容八方向脚本。
若要使用八方向脚本,需要修改八方向脚本一个地方,请参看代码中的说明。
最后附上工程。

增加行走动作.rar (358.57 KB, 下载次数: 302)

  1. #===============================================================================
  2. # 行走运作增加脚本
  3. # By 风缘
  4. # 使用说明:
  5. # 1. 素材规格: ?x4 的行走图,行走动作可以任意
  6. # 2. 文件名格式
  7. #    2.1 必须包括 $ ,以指明是单张行走图,$ 可以在文件的任何位置
  8. #    2.2 若要自动识别行走动作数,扩展名的 '.' 号前
  9. #        加上 '_xx',目前只支持 2 位数字,以防误识别
  10. #    2.3 例如:$act_12.png, $people_5.png
  11. #    2.4 对不符合规格的行走图,一律视为原版的行走图,识别算法兼容原版
  12. # 3. 可以与 八方向脚本 配合使用
  13. #    3.1 八方向脚本地址 http://rpg.blue/article-41031.html
  14. #    3.2 本脚本页必须放在八方向脚本页前
  15. #    3.3 八方向脚本需要修改一个地方,函数 update_src_rect_for_slant 的第二行,
  16. #        把 pattern = @character.pattern < 3 ? @character.pattern : 1
  17. #        pattern = @character.pattern < @character.pattern_limit ? @character.pattern : 1
  18. #    (以下写给脚本作者)
  19. # 4. 本脚本由暴力修改实现,故不保证与其它脚本兼容性,但可以通过微量修改其它脚本以兼容本脚本,下述修改原理
  20. #    4.1 Game_Character 类增加字段 last_character_name 和 pattern_limit, 以及函数 pattern_limit
  21. #    4.2 修改 Game_Character 的 update_animation, 把 patern 界限由定值改为变值
  22. #        @pattern = (@pattern + 1) % self.pattern_limit
  23. #    4.3 修改 Sprite_Character 的 update_bitmap
  24. #        把     @cw = bitmap.width / 3
  25. #        修改为 @cw = bitmap.width / @character.pattern_limit
  26. #    4.4 修改 Sprite_Character 的 update_src_rect
  27. #        把     pattern = @character.pattern < 3 ? @character.pattern : 1
  28. #        修改为 pattern = @character.pattern < @character.pattern_limit ? @character.pattern : 1
  29. # 5. 本工程自带的示例是原版的多人行走图,故显示出来的行走图有两人并排,并非 bug
  30. # 6. 如果有任何 Bug ,请跟脚本发布贴回复或站内消息联系
  31. #
  32. #===============================================================================




  33. #==============================================================================
  34. # ■ Game_Character
  35. #------------------------------------------------------------------------------
  36. #  涉及角色的类。本类作为 Game_Player 类与 Game_Event 的超级类
  37. # 使用。
  38. #==============================================================================
  39. class Game_Character

  40.   ################# 这是我习惯的变量声明方式 #############################

  41.   attr_reader :last_character_name   # 记录上次角色图文件
  42.   attr_reader :pattern_limit          # 本角色行走图一行的画格数(动作数目)

  43.   ########################################################################

  44.   def pattern_limit
  45.     # 设置默认画格数(VX 默认值)
  46.     @pattern_limit = 3 if @pattern_limit == nil
  47.     # 如果行走图没改变,刚返回已设定值
  48.     return @pattern_limit if (@last_character_name == @character_name)
  49.     # 更新 @last_character_name
  50.     @last_character_name = @character_name

  51.     # 以下开始解析文件名,以匹配文件规格

  52.     #######################################################
  53.     # PS: 追求高效和优美的同学可以用一个正则表达式实现,
  54.     # 我这样实现为了直观易懂
  55.     #######################################################

  56.     # 计算画格
  57.     # 去掉扩展名和 '#' 后序后,以 _{画格数} 结束
  58.     if (character_name != nil and character_name.include?("$"))
  59.       # 去掉扩展名,兼顾处理没扩展名的图
  60.       idx = character_name.rindex(".")
  61.       tmp_name = idx != nil ? character_name[0...idx] : character_name
  62.       if tmp_name != nil and not tmp_name.empty?
  63.         # 去掉可能的 # 号,以支持八方向
  64.         tmp_name = tmp_name[0...-1] if (character_name[-1] == '#')
  65.         # 检测是否有规定的结尾
  66.         _idx = tmp_name.rindex("_")
  67.         # 限制最多 99 画格,也就是说 '_' 后只能有两个数字
  68.         unless _idx == nil or _idx < tmp_name.size - 3
  69.           # 提取数字,赋值。如非数字或是 0,不处理
  70.           pat = tmp_name[_idx+1..-1]
  71.           @pattern_limit = pat.to_i if pat.to_i != 0
  72.         end
  73.       end
  74.     end
  75.     return @pattern_limit
  76.   end


  77.   #--------------------------------------------------------------------------
  78.   # ● 动画计数更新
  79.   #--------------------------------------------------------------------------
  80.   def update_animation
  81.     speed = @move_speed + (dash? ? 1 : 0)
  82.     if @anime_count > 18 - speed * 2
  83.       if not @step_anime and @stop_count > 0
  84.         @pattern = @original_pattern
  85.       else
  86.         @pattern = (@pattern + 1) % self.pattern_limit
  87.       end
  88.       @anime_count = 0
  89.     end
  90.   end

  91. end

  92. #==============================================================================
  93. # ■ Sprite_Character
  94. #------------------------------------------------------------------------------
  95. #  角色显示用活动块。监视 Game_Character 类的实例、
  96. # 自动变化活动块状态。
  97. #==============================================================================
  98. class Sprite_Character

  99.   #--------------------------------------------------------------------------
  100.   # ● 更新传送源的位图
  101.   #--------------------------------------------------------------------------
  102.   def update_bitmap
  103.     if @tile_id != @character.tile_id or
  104.        @character_name != @character.character_name or
  105.        @character_index != @character.character_index
  106.       @tile_id = @character.tile_id
  107.       @character_name = @character.character_name
  108.       @character_index = @character.character_index
  109.       if @tile_id > 0
  110.         sx = (@tile_id / 128 % 2 * 8 + @tile_id % 8) * 32;
  111.         sy = @tile_id % 256 / 8 % 16 * 32;
  112.         self.bitmap = tileset_bitmap(@tile_id)
  113.         self.src_rect.set(sx, sy, 32, 32)
  114.         self.ox = 16
  115.         self.oy = 32
  116.       else
  117.         self.bitmap = Cache.character(@character_name)
  118.         sign = @character_name[/^[\!\$]./]
  119.         if sign != nil and sign.include?(')
  120.           @cw = bitmap.width / @character.pattern_limit
  121.           @ch = bitmap.height / 4
  122.         else
  123.           @cw = bitmap.width / 12
  124.           @ch = bitmap.height / 8
  125.         end
  126.         self.ox = @cw / 2
  127.         self.oy = @ch
  128.       end
  129.     end
  130.   end

  131.   #--------------------------------------------------------------------------
  132.   # ● 更新传送源矩形
  133.   #--------------------------------------------------------------------------
  134.   def update_src_rect
  135.     if @tile_id == 0
  136.       index = @character.character_index
  137.       pattern = @character.pattern < @character.pattern_limit ? @character.pattern : 1
  138.       sx = (index % 4 * 3 + pattern) * @cw
  139.       sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  140.       self.src_rect.set(sx, sy, @cw, @ch)
  141.     end
  142.   end

  143. end
复制代码

评分

参与人数 1星屑 +376 收起 理由
DeathKing + 376 D计划鼓励

查看全部评分

Lv1.梦旅人

梦石
0
星屑
136
在线时间
1050 小时
注册时间
2006-5-3
帖子
774
2
发表于 2013-7-1 02:47:53 | 只看该作者
报告一个错误
第136行,最后面括号里面应该写("$")
漏夏同人
《咱的夏天》
下载地址:http://tieba.baidu.com/p/2681607456
人员招募:http://rpg.blue/thread-339747-1-1.html
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-21 18:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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