Project1

标题: 角色换装系统出错 [打印本页]

作者: IRO    时间: 2011-2-10 20:52
标题: 角色换装系统出错
本帖最后由 IRO 于 2011-2-10 20:52 编辑

请问一下前辈们...
我用了亿万星辰前辈的装备换装脚本,开范例教程时没有问题,
测试时却会在第55行的"      $game_party.actors[0].character_name,"这一行出错
以下是脚本:
  1. #==============================================================================
  2. # ■ 角色装备行走图变更                                          BY:亿万星辰
  3. #------------------------------------------------------------------------------
  4. #  使用了一种特殊的方法来改变行走图,不是更换,而是在原图的基础上继续描绘新的
  5. # 层以实现层的叠加,类似暗黑里的装备帽子以后角色的行走图就多出帽子,装备盾牌以
  6. # 后就会看到角色的左手拿着盾牌。
  7. #
  8. # 介绍:
  9. # 现在默认分为5层,最下为默认的行走图,也就是数据库里角色那里设置的。之后分为头
  10. # 部、身体、左右手4层,也可自行添加,但需要一定的功底,以防备逻辑上的混乱……
  11. #
  12. # 使用说明:
  13. # 全部都是在数据库里设置,对应的武器或防具后逗号追加一个图片文件名即可,此文件
  14. # 放在graphics/characters下,至于图片的绘制,实属虐待美工…… 具体可参考范例里
  15. # 的graphics/characters目录,不过盾牌的图画的不是很合适
  16. #==============================================================================
  17. module RPG
  18.   class Weapon
  19.     def name
  20.       return @name.split(/,/)[0]
  21.     end
  22.     def part
  23.       return @name.split(/,/)[1]
  24.     end
  25.   end
  26.   
  27.   class Armor
  28.     def name
  29.       return @name.split(/,/)[0]
  30.     end
  31.     def part
  32.       return @name.split(/,/)[1]
  33.     end
  34.   end
  35. end


  36. #==============================================================================
  37. # ■ Game_Player
  38. #------------------------------------------------------------------------------
  39. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  40. # 本类的实例请参考 $game_player。
  41. #==============================================================================

  42. class Game_Player < Game_Character
  43.   attr_accessor   :part_name                # 角色 文件名
  44.   attr_accessor   :turn_z
  45.   #--------------------------------------------------------------------------
  46.   # ● 初始化对像
  47.   #--------------------------------------------------------------------------
  48.   def initialize
  49.     super
  50.     @turn_z = [0,3,4,1,2] # 优先级,靠后的显示在最前 0主身体 1武器 2盾牌 3身体 4头
  51.     @part_name = [
  52.       $game_party.actors[0].character_name,
  53.       $game_party.actors[0].weapon_id != 0 ? $data_weapons[$game_party.actors[0].weapon_id].part : "",
  54.       $game_party.actors[0].armor1_id != 0 ? $data_armors[$game_party.actors[0].armor1_id].part : "",
  55.       $game_party.actors[0].armor2_id != 0 ? $data_armors[$game_party.actors[0].armor2_id].part : "",
  56.       $game_party.actors[0].armor3_id != 0 ? $data_armors[$game_party.actors[0].armor3_id].part : ""]
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 面向向下
  60.   #--------------------------------------------------------------------------
  61.   def turn_down
  62.     unless @direction_fix
  63.       @direction = 2
  64.       @stop_count = 0
  65.       @turn_z = [0,3,4,1,2] # 优先级,靠后的显示在最前
  66.     end
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 面向向左
  70.   #--------------------------------------------------------------------------
  71.   def turn_left
  72.     unless @direction_fix
  73.       @direction = 4
  74.       @stop_count = 0
  75.       @turn_z = [1,0,3,4,2] # 优先级,靠后的显示在最前
  76.     end
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 面向向右
  80.   #--------------------------------------------------------------------------
  81.   def turn_right
  82.     unless @direction_fix
  83.       @direction = 6
  84.       @stop_count = 0
  85.       @turn_z = [2,0,3,4,1] # 优先级,靠后的显示在最前
  86.     end
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 面向向上
  90.   # (这里感觉不太好处理,有些时候有的图一步在角色主图前,一步在角色主图后,
  91.   # 不怎么好处理,只能麻烦美工了……比如范例里的盾牌……)
  92.   #--------------------------------------------------------------------------
  93.   def turn_up
  94.     unless @direction_fix
  95.       @direction = 8
  96.       @stop_count = 0
  97.       @turn_z = [0,1,2,3,4] # 优先级,靠后的显示在最前
  98.     end
  99.   end
  100. end

  101. #==============================================================================
  102. # ■ Sprite_Character
  103. #------------------------------------------------------------------------------
  104. #  角色显示用脚本。监视 Game_Character 类的实例、
  105. # 自动变化脚本状态。
  106. #==============================================================================

  107. class Sprite_Player < RPG::Sprite
  108.   #--------------------------------------------------------------------------
  109.   # ● 定义实例变量
  110.   #--------------------------------------------------------------------------
  111.   attr_accessor :part                # 角色
  112.   #--------------------------------------------------------------------------
  113.   # ● 初始化对像
  114.   #     viewport  : 查看端口
  115.   #     character : 角色 (Game_Character)
  116.   #--------------------------------------------------------------------------
  117.   def initialize(viewport, part)
  118.     super(viewport)
  119.     @part = part
  120.     @character = $game_player
  121.     self.z += $game_player.turn_z.index(part)
  122.     update
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 更新画面
  126.   #--------------------------------------------------------------------------
  127.   def update
  128.     super
  129.     # 元件 ID、文件名、色相与现在的情况存在差异的情况下
  130.     if @tile_id != @character.tile_id or
  131.        @character_name != @character.character_name or
  132.        @character_hue != @character.character_hue
  133.       # 记忆元件 ID 与文件名、色相
  134.       @tile_id = @character.tile_id
  135.       @character_name = @character.character_name
  136.       @character_hue = @character.character_hue
  137.       # 元件 ID 为有效值的情况下
  138.       pic = @character.part_name[@part]
  139.       self.bitmap = RPG::Cache.character(pic, @character.character_hue)
  140.       @cw = bitmap.width / 4
  141.       @ch = bitmap.height / 4
  142.       self.ox = @cw / 2
  143.       self.oy = @ch
  144.     end
  145.     # 设置可视状态
  146.     self.visible = (not @character.transparent)
  147.     # 图形是角色的情况下
  148.     if @tile_id == 0
  149.       # 设置传送目标的矩形
  150.       sx = @character.pattern * @cw
  151.       sy = (@character.direction - 2) / 2 * @ch
  152.       self.src_rect.set(sx, sy, @cw, @ch)
  153.     end
  154.     # 设置脚本的坐标
  155.     self.x = @character.screen_x
  156.     self.y = @character.screen_y
  157.     self.z = @character.turn_z.index(part)
  158.     # 设置不透明度、合成方式、茂密
  159.     self.opacity = @character.opacity
  160.     self.blend_type = @character.blend_type
  161.     self.bush_depth = @character.bush_depth
  162.     # 动画
  163.     if @character.animation_id != 0
  164.       animation = $data_animations[@character.animation_id]
  165.       animation(animation, true)
  166.       @character.animation_id = 0
  167.     end
  168.   end
  169. end

  170. class Spriteset_Map
  171.   #--------------------------------------------------------------------------
  172.   # ● 初始化对像
  173.   #--------------------------------------------------------------------------
  174.   def initialize
  175.     # 生成显示端口
  176.     @viewport1 = Viewport.new(0, 0, 640, 480)
  177.     @viewport2 = Viewport.new(0, 0, 640, 480)
  178.     @viewport3 = Viewport.new(0, 0, 640, 480)
  179.     @viewport2.z = 200
  180.     @viewport3.z = 5000
  181.     # 生成元件地图
  182.     @tilemap = Tilemap.new(@viewport1)
  183.     @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  184.     for i in 0..6
  185.       autotile_name = $game_map.autotile_names[i]
  186.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  187.     end
  188.     @tilemap.map_data = $game_map.data
  189.     @tilemap.priorities = $game_map.priorities
  190.     # 生成远景平面
  191.     @panorama = Plane.new(@viewport1)
  192.     @panorama.z = -1000
  193.     # 生成雾平面
  194.     @fog = Plane.new(@viewport1)
  195.     @fog.z = 3000
  196.     # 生成角色活动块
  197.     @character_sprites = []
  198.     for i in $game_map.events.keys.sort
  199.       sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  200.       @character_sprites.push(sprite)
  201.     end
  202.     @character_sprites.push(Sprite_Player.new(@viewport1, 0)) # 主体
  203.     @character_sprites.push(Sprite_Player.new(@viewport1, 1)) # 武器
  204.     @character_sprites.push(Sprite_Player.new(@viewport1, 2)) # 盾牌
  205.     @character_sprites.push(Sprite_Player.new(@viewport1, 3)) # 身体
  206.     @character_sprites.push(Sprite_Player.new(@viewport1, 4)) # 头
  207.     # 生成天气
  208.     @weather = RPG::Weather.new(@viewport1)
  209.     # 生成图片
  210.     @picture_sprites = []
  211.     for i in 1..50
  212.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  213.         $game_screen.pictures[i]))
  214.     end
  215.     # 生成计时器块
  216.     @timer_sprite = Sprite_Timer.new
  217.     # 刷新画面
  218.     update
  219.   end
  220. end


  221. class Game_Actor < Game_Battler
  222.   #--------------------------------------------------------------------------
  223.   # ● 变更装备
  224.   #     equip_type : 装备类型
  225.   #     id    : 武器 or 防具 ID  (0 为解除装备)
  226.   #--------------------------------------------------------------------------
  227.   def equip(equip_type, id)
  228.     case equip_type
  229.     when 0  # 武器
  230.       if id == 0 or $game_party.weapon_number(id) > 0
  231.         $game_party.gain_weapon(@weapon_id, 1)
  232.         @weapon_id = id
  233.         $game_party.lose_weapon(id, 1)
  234.         $game_player.part_name[1] = @weapon_id != 0 ? $data_weapons[@weapon_id].part : ""
  235.       end
  236.     when 1  # 盾
  237.       if id == 0 or $game_party.armor_number(id) > 0
  238.         update_auto_state($data_armors[@armor1_id], $data_armors[id])
  239.         $game_party.gain_armor(@armor1_id, 1)
  240.         @armor1_id = id
  241.         $game_party.lose_armor(id, 1)
  242.         $game_player.part_name[2] = @armor1_id != 0 ? $data_armors[@armor1_id].part : ""
  243.       end
  244.     when 2  # 头
  245.       if id == 0 or $game_party.armor_number(id) > 0
  246.         update_auto_state($data_armors[@armor2_id], $data_armors[id])
  247.         $game_party.gain_armor(@armor2_id, 1)
  248.         @armor2_id = id
  249.         $game_party.lose_armor(id, 1)
  250.         $game_player.part_name[3] = @armor2_id != 0 ? $data_armors[@armor2_id].part : ""
  251.       end
  252.     when 3  # 身体
  253.       if id == 0 or $game_party.armor_number(id) > 0
  254.         update_auto_state($data_armors[@armor3_id], $data_armors[id])
  255.         $game_party.gain_armor(@armor3_id, 1)
  256.         @armor3_id = id
  257.         $game_party.lose_armor(id, 1)
  258.         $game_player.part_name[4] = @armor3_id != 0 ? $data_armors[@armor3_id].part : ""
  259.       end
  260.     when 4  # 装饰品
  261.       if id == 0 or $game_party.armor_number(id) > 0
  262.         update_auto_state($data_armors[@armor4_id], $data_armors[id])
  263.         $game_party.gain_armor(@armor4_id, 1)
  264.         @armor4_id = id
  265.         $game_party.lose_armor(id, 1)
  266.       end
  267.     end
  268.   end
  269. end
复制代码
请问有人能告诉我问题出在哪里吗?该如何修改它呢T_T?
作者: 忧雪の伤    时间: 2011-2-10 20:54
用了其他脚本?
作者: IRO    时间: 2011-2-10 20:59
用了一個疊加視野遮色片的腳本
  1. class Spriteset_Map
  2.   
  3.   #控制視線距離的變數編號
  4.   SIGHTRANGE_VARIABLE_INDEX =13
  5.   
  6.   #控制視線限制的開關編號
  7.   LIMITEDSIGHT_SWITCHES_INDEX = 03
  8.   
  9.   
  10.   #定義視線距離
  11.   def get_sightrange
  12.     return $game_variables[SIGHTRANGE_VARIABLE_INDEX]
  13.   end
  14.   
  15.   #定義視線限制是否工作中
  16.   def get_working?
  17.     return $game_switches[LIMITEDSIGHT_SWITCHES_INDEX]
  18.   end
  19.   
  20.   alias gsr_01_initialize initialize
  21.   def initialize
  22.    
  23.     #生成fow (fog of war)平面, 並且z值比霧平面(3000)還高
  24.     @fow = Plane.new(@viewport1)
  25.     @fow.z = 10
  26.     @fow.bitmap = Bitmap.new(640, 480)

  27.     gsr_01_initialize
  28.    
  29.   end
  30.   
  31.   alias gsr_01_dispose dispose
  32.   def dispose
  33.    
  34.     gsr_01_dispose
  35.    
  36.     @fow.dispose
  37.    
  38.   end
  39.   
  40.   alias gsr_01_update update
  41.   def update
  42.    
  43.     #TODO: update及render效能還可改進
  44.    
  45.     gsr_01_update
  46.    
  47.     #更新
  48.     sightrange = self.get_sightrange
  49.     @fow.visible = self.get_working?
  50.    
  51.     return unless @fow.visible
  52.    
  53.     #計算視距
  54.     range = 16+32*sightrange
  55.     xx = $game_player.screen_x
  56.     yy = $game_player.screen_y
  57.    
  58.     #計算遮罩所在的矩型
  59.     r = Rect.new(xx-range, yy-range-16, 2*range, 2*range)
  60.    
  61.     #繪製到fow後緩充
  62.     @fow.bitmap.fill_rect(Rect.new(0, 0, 640, 480), Color.new(0, 0, 0))
  63.     @fow.bitmap.fill_rect(r, Color.new(0, 0, 0, 0))
  64.     @fow.bitmap.stretch_blt(r, FOW_Mask.get_instance, Rect.new(0, 0, FOW_Mask::Size, FOW_Mask::Size), 255)
  65.    
  66.   end
  67. end
  68.   
  69. class FOW_Mask < Bitmap
  70.   
  71.   #遮罩解析度  內定200*200
  72.   Size = 200
  73.   
  74.   #使用Singleton pattern
  75.   private_class_method :new
  76.   @@mask = nil
  77.   def FOW_Mask.get_instance
  78.     @@mask = new unless @@mask
  79.     return @@mask
  80.   end
  81.   
  82.   def initialize
  83.    
  84.     super(Size, Size)
  85.    
  86.     r = Size/2
  87.    
  88.     #加速運算
  89.     r2 = r*r
  90.    
  91.     for i in 0...Size
  92.       for j in 0...Size
  93.         x = r
  94.         y = r
  95.         dis2 = (i-x)*(i-x) + (j-y)*(j-y)
  96.      
  97.         if dis2 > r*r
  98.           self.set_pixel(i, j, Color.new(0,0,0))
  99.         else
  100.           n = dis2
  101.           m = r2
  102.           opa = 1.0*n/m*255
  103.           self.set_pixel(i, j, Color.new(0,0,0, opa))
  104.         
  105.         
  106.         end
  107.       end
  108.       
  109.     end
  110.   end
  111.   
  112. end
复制代码
還有一個讓隊伍成員跟隨在主角後的腳本
  1. # ▼▲▼ XRXS13. Train_Actor ▼▲▼
  2. # by fukuyama
  3. #
  4. # [email protected]
  5. # http://www4.big.or.jp/~fukuyama/
  6. #

  7. # ●透明状態用スイッチ設定
  8. # true だとスイッチ制御を行う
  9. # TRAIN_ACTOR_TRANSPARENT_SWITCH = true
  10. TRAIN_ACTOR_TRANSPARENT_SWITCH = true

  11. # ●透明状態用スイッチ番号
  12. # この番号のスイッチがONだと透明になる
  13. TRAIN_ACTOR_TRANSPARENT_SWITCHES_INDEX = 17

  14. # ●アクターの最大数
  15. # 将来的に多人数パーティが出来るようになったら…
  16. TRAIN_ACTOR_SIZE_MAX = 4

  17. # 定数
  18. #Input::DOWN = 2 # この辺はちゃんと定数あった…
  19. #Input::LEFT = 4
  20. #Input::RIGHT = 6
  21. #Input::UP = 8
  22. DOWN_LEFT = 1
  23. DOWN_RIGHT = 3
  24. UP_LEFT = 7
  25. UP_RIGHT = 9
  26. JUMP = 5

  27. class Game_Party_Actor < Game_Character
  28. def initialize
  29. super()
  30. @through = true
  31. end
  32. def setup(actor)
  33. # キャラクターのファイル名と色相を設定
  34. if actor != nil
  35. @character_name = actor.character_name
  36. @character_hue = actor.character_hue
  37. else
  38. @character_name = ""
  39. @character_hue = 0
  40. end
  41. # 不透明度と合成方法を初期化
  42. @opacity = 255
  43. @blend_type = 0
  44. end
  45. def screen_z(height = 0)
  46. if $game_player.x == @x and $game_player.y == @y
  47. return $game_player.screen_z(height) - 1
  48. end
  49. super(height)
  50. end
  51. #--------------------------------------------------------------------------
  52. # ● 下に移動
  53. # turn_enabled : その場での向き変更を許可するフラグ
  54. #--------------------------------------------------------------------------
  55. def move_down(turn_enabled = true)
  56. # 下を向く
  57. if turn_enabled
  58. turn_down
  59. end
  60. # 通行可能な場合
  61. if passable?(@x, @y, Input::DOWN)
  62. # 下を向く
  63. turn_down
  64. # 座標を更新
  65. @y += 1
  66. end
  67. end
  68. #--------------------------------------------------------------------------
  69. # ● 左に移動
  70. # turn_enabled : その場での向き変更を許可するフラグ
  71. #--------------------------------------------------------------------------
  72. def move_left(turn_enabled = true)
  73. # 左を向く
  74. if turn_enabled
  75. turn_left
  76. end
  77. # 通行可能な場合
  78. if passable?(@x, @y, Input::LEFT)
  79. # 左を向く
  80. turn_left
  81. # 座標を更新
  82. @x -= 1
  83. end
  84. end
  85. #--------------------------------------------------------------------------
  86. # ● 右に移動
  87. # turn_enabled : その場での向き変更を許可するフラグ
  88. #--------------------------------------------------------------------------
  89. def move_right(turn_enabled = true)
  90. # 右を向く
  91. if turn_enabled
  92. turn_right
  93. end
  94. # 通行可能な場合
  95. if passable?(@x, @y, Input::RIGHT)
  96. # 右を向く
  97. turn_right
  98. # 座標を更新
  99. @x += 1
  100. end
  101. end
  102. #--------------------------------------------------------------------------
  103. # ● 上に移動
  104. # turn_enabled : その場での向き変更を許可するフラグ
  105. #--------------------------------------------------------------------------
  106. def move_up(turn_enabled = true)
  107. # 上を向く
  108. if turn_enabled
  109. turn_up
  110. end
  111. # 通行可能な場合
  112. if passable?(@x, @y, Input::UP)
  113. # 上を向く
  114. turn_up
  115. # 座標を更新
  116. @y -= 1
  117. end
  118. end
  119. #--------------------------------------------------------------------------
  120. # ● 左下に移動
  121. #--------------------------------------------------------------------------
  122. def move_lower_left
  123. # 向き固定でない場合
  124. unless @direction_fix
  125. # 右向きだった場合は左を、上向きだった場合は下を向く
  126. @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)
  127. end
  128. # 下→左、左→下 のどちらかのコースが通行可能な場合
  129. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
  130. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
  131. # 座標を更新
  132. @x -= 1
  133. @y += 1
  134. end
  135. end
  136. #--------------------------------------------------------------------------
  137. # ● 右下に移動
  138. #--------------------------------------------------------------------------
  139. def move_lower_right
  140. # 向き固定でない場合
  141. unless @direction_fix
  142. # 左向きだった場合は右を、上向きだった場合は下を向く
  143. @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)
  144. end
  145. # 下→右、右→下 のどちらかのコースが通行可能な場合
  146. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
  147. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
  148. # 座標を更新
  149. @x += 1
  150. @y += 1
  151. end
  152. end
  153. #--------------------------------------------------------------------------
  154. # ● 左上に移動
  155. #--------------------------------------------------------------------------
  156. def move_upper_left
  157. # 向き固定でない場合
  158. unless @direction_fix
  159. # 右向きだった場合は左を、下向きだった場合は上を向く
  160. @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)
  161. end
  162. # 上→左、左→上 のどちらかのコースが通行可能な場合
  163. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
  164. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
  165. # 座標を更新
  166. @x -= 1
  167. @y -= 1
  168. end
  169. end
  170. #--------------------------------------------------------------------------
  171. # ● 右上に移動
  172. #--------------------------------------------------------------------------
  173. def move_upper_right
  174. # 向き固定でない場合
  175. unless @direction_fix
  176. # 左向きだった場合は右を、下向きだった場合は上を向く
  177. @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)
  178. end
  179. # 上→右、右→上 のどちらかのコースが通行可能な場合
  180. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
  181. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
  182. # 座標を更新
  183. @x += 1
  184. @y -= 1
  185. end
  186. end

  187. attr_writer :move_speed
  188. end

  189. module Train_Actor_Spriteset_Map_Module
  190. def setup_actor_character_sprites?
  191. return @setup_actor_character_sprites_flag != nil
  192. end
  193. def setup_actor_character_sprites(characters)
  194. if !setup_actor_character_sprites?
  195. index_game_player = 0
  196. @character_sprites.each_index do |i|
  197. if @character_sprites[i].character.instance_of?(Game_Player)
  198. index_game_player = i
  199. break
  200. end
  201. end
  202. for character in characters.reverse
  203. @character_sprites.unshift(
  204. Sprite_Character.new(@viewport1, character)
  205. )
  206. end
  207. @setup_actor_character_sprites_flag = true
  208. end
  209. end
  210. end

  211. module Train_Actor_Scene_Map_Module
  212. def setup_actor_character_sprites(characters)
  213. @spriteset.setup_actor_character_sprites(characters)
  214. end
  215. end

  216. module Train_Actor_Game_Party_Module
  217. def set_transparent_actors(transparent)
  218. @transparent = transparent
  219. end
  220. def setup_actor_character_sprites
  221. if @characters == nil
  222. @characters = []
  223. for i in 1 ... TRAIN_ACTOR_SIZE_MAX
  224. @characters.push(Game_Party_Actor.new)
  225. end
  226. end
  227. for i in 1 ... TRAIN_ACTOR_SIZE_MAX
  228. @characters[i - 1].setup(actors[i])
  229. end
  230. if $scene.instance_of?(Scene_Map)
  231. $scene.setup_actor_character_sprites(@characters)
  232. end
  233. end
  234. def update_party_actors
  235. setup_actor_character_sprites
  236. transparent = $game_player.transparent
  237. if transparent == false
  238. if TRAIN_ACTOR_TRANSPARENT_SWITCH
  239. transparent = $game_switches[TRAIN_ACTOR_TRANSPARENT_SWITCHES_INDEX]
  240. end
  241. end
  242. for character in @characters
  243. character.transparent = transparent
  244. character.move_speed = $game_player.move_speed
  245. character.update
  246. end
  247. end
  248. def moveto_party_actors( x, y )
  249. setup_actor_character_sprites
  250. for character in @characters
  251. character.moveto( x, y )
  252. end
  253. if @move_list == nil
  254. @move_list = []
  255. end
  256. move_list_setup
  257. end
  258. def move_party_actors
  259. if @move_list == nil
  260. @move_list = []
  261. move_list_setup
  262. end
  263. @move_list.each_index do |i|
  264. if @characters[i] != nil
  265. case @move_list[i].type
  266. when Input::DOWN
  267. @characters[i].move_down(@move_list[i].args[0])
  268. when Input::LEFT
  269. @characters[i].move_left(@move_list[i].args[0])
  270. when Input::RIGHT
  271. @characters[i].move_right(@move_list[i].args[0])
  272. when Input::UP
  273. @characters[i].move_up(@move_list[i].args[0])
  274. when DOWN_LEFT
  275. @characters[i].move_lower_left
  276. when DOWN_RIGHT
  277. @characters[i].move_lower_right
  278. when UP_LEFT
  279. @characters[i].move_upper_left
  280. when UP_RIGHT
  281. @characters[i].move_upper_right
  282. when JUMP
  283. @characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])
  284. end
  285. end
  286. end
  287. end
  288. class Train_Actor_Move_List_Element
  289. def initialize(type,args)
  290. @type = type
  291. @args = args
  292. end
  293. def type() return @type end
  294. def args() return @args end
  295. end
  296. def move_list_setup
  297. for i in 0 .. TRAIN_ACTOR_SIZE_MAX
  298. @move_list[i] = nil
  299. end
  300. end
  301. def add_move_list(type,*args)
  302. @move_list.unshift(Train_Actor_Move_List_Element.new(type,args)).pop
  303. end
  304. def move_down_party_actors(turn_enabled = true)
  305. move_party_actors
  306. add_move_list(Input::DOWN,turn_enabled)
  307. end
  308. def move_left_party_actors(turn_enabled = true)
  309. move_party_actors
  310. add_move_list(Input::LEFT,turn_enabled)
  311. end
  312. def move_right_party_actors(turn_enabled = true)
  313. move_party_actors
  314. add_move_list(Input::RIGHT,turn_enabled)
  315. end
  316. def move_up_party_actors(turn_enabled = true)
  317. move_party_actors
  318. add_move_list(Input::UP,turn_enabled)
  319. end
  320. def move_lower_left_party_actors
  321. move_party_actors
  322. add_move_list(DOWN_LEFT)
  323. end
  324. def move_lower_right_party_actors
  325. move_party_actors
  326. add_move_list(DOWN_RIGHT)
  327. end
  328. def move_upper_left_party_actors
  329. move_party_actors
  330. add_move_list(UP_LEFT)
  331. end
  332. def move_upper_right_party_actors
  333. move_party_actors
  334. add_move_list(UP_RIGHT)
  335. end
  336. def jump_party_actors(x_plus, y_plus)
  337. move_party_actors
  338. add_move_list(JUMP,x_plus, y_plus)
  339. end
  340. end

  341. module Train_Actor_Game_Player_Module
  342. def update
  343. $game_party.update_party_actors
  344. super
  345. end
  346. def moveto( x, y )
  347. $game_party.moveto_party_actors( x, y )
  348. super( x, y )
  349. end
  350. def move_down(turn_enabled = true)
  351. if passable?(@x, @y, Input::DOWN)
  352. $game_party.move_down_party_actors(turn_enabled)
  353. end
  354. super(turn_enabled)
  355. end
  356. def move_left(turn_enabled = true)
  357. if passable?(@x, @y, Input::LEFT)
  358. $game_party.move_left_party_actors(turn_enabled)
  359. end
  360. super(turn_enabled)
  361. end
  362. def move_right(turn_enabled = true)
  363. if passable?(@x, @y, Input::RIGHT)
  364. $game_party.move_right_party_actors(turn_enabled)
  365. end
  366. super(turn_enabled)
  367. end
  368. def move_up(turn_enabled = true)
  369. if passable?(@x, @y, Input::UP)
  370. $game_party.move_up_party_actors(turn_enabled)
  371. end
  372. super(turn_enabled)
  373. end
  374. def move_lower_left
  375. # 下→左、左→下 のどちらかのコースが通行可能な場合
  376. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
  377. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
  378. $game_party.move_lower_left_party_actors
  379. end
  380. super
  381. end
  382. def move_lower_right
  383. # 下→右、右→下 のどちらかのコースが通行可能な場合
  384. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
  385. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
  386. $game_party.move_lower_right_party_actors
  387. end
  388. super
  389. end
  390. def move_upper_left
  391. # 上→左、左→上 のどちらかのコースが通行可能な場合
  392. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
  393. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
  394. $game_party.move_upper_left_party_actors
  395. end
  396. super
  397. end
  398. def move_upper_right
  399. # 上→右、右→上 のどちらかのコースが通行可能な場合
  400. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
  401. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
  402. $game_party.move_upper_right_party_actors
  403. end
  404. super
  405. end
  406. def jump(x_plus, y_plus)
  407. # 新しい座標を計算
  408. new_x = @x + x_plus
  409. new_y = @y + y_plus
  410. # 加算値が (0,0) の場合か、ジャンプ先が通行可能な場合
  411. if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
  412. $game_party.jump_party_actors(x_plus, y_plus)
  413. end
  414. super(x_plus, y_plus)
  415. end

  416. # -----------------------------------------------
  417. # move_speed を外から見れるように
  418. # -----------------------------------------------
  419. attr_reader :move_speed
  420. end

  421. class Game_Party
  422. include Train_Actor_Game_Party_Module
  423. end

  424. class Game_Player
  425. include Train_Actor_Game_Player_Module
  426. end

  427. class Spriteset_Map
  428. include Train_Actor_Spriteset_Map_Module
  429. end

  430. class Scene_Map
  431. include Train_Actor_Scene_Map_Module
  432. end

  433. # Train_Actor
复制代码
會是和這些衝突到嗎...?
作者: 亿万星辰    时间: 2011-2-11 12:46
队伍里一开始没人吧
作者: 亿万星辰    时间: 2011-2-11 14:12
如果觉得是脚本冲突可逐一注释掉其他脚本以尝试一下。
作者: 亿万星辰    时间: 2011-2-13 11:20
角色换装系统 V3.2.rar (803.97 KB, 下载次数: 3027)
这东西的冲突率很高的~{:nm_1:}




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