Project1

标题: 如何修改脚本使在地图画面角色死亡后更换行走图? [打印本页]

作者: 2357691704    时间: 2016-8-19 09:45
标题: 如何修改脚本使在地图画面角色死亡后更换行走图?
本帖最后由 2357691704 于 2016-8-19 10:26 编辑

用了人物跟随。求脚本:地图画面角色死亡后更换行走图。
当 角色 hp<= 0时更换为尸体行走图,else还原行走图。貌似要在Sprite_Character修改,但我弄了很久还是不会,求大神帮助。
作者: 2357691704    时间: 2016-8-19 13:40
与跟随脚本无关。我说明用了跟随脚本是表明必要性,如果没用跟随脚本的话,根本不需要更换角色行走图,只需要跟换领队就行了。
作者: cinderelmini    时间: 2016-8-19 15:05
本帖最后由 cinderelmini 于 2016-8-19 16:59 编辑
2357691704 发表于 2016-8-19 13:40
与跟随脚本无关。我说明用了跟随脚本是表明必要性,如果没用跟随脚本的话,根本不需要更换角色行走图,只需 ...


正因如此才需要跟随脚本的内容来确认里面用了哪个类作为队友的Character对象,以此来修改行走图名字,
进而Sprite_Character会自己根据Character的行走图名字更改图像而没必要去黑这个类。
【以下是更改领队死亡时行走图的做法】

【以下这部分是队友的】

作者: 2357691704    时间: 2016-8-19 15:53
cinderelmini 发表于 2016-8-19 15:05
正因如此才需要跟随脚本的内容来确认里面用了哪个类作为队友的Character对象,以此来修改行走图名字,
进 ...

好像我表达得不好呢,我要的是任何同伴死亡都会更改行走图。不过还是谢谢了。
作者: 2357691704    时间: 2016-8-19 16:02
cinderelmini 发表于 2016-8-19 15:05
正因如此才需要跟随脚本的内容来确认里面用了哪个类作为队友的Character对象,以此来修改行走图名字,
进 ...

这是我用的人物跟随脚本。
RUBY 代码复制
  1. #===================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #===================================================================
  4. # ————————————————————————————————————
  5. #人物跟随
  6. module Train_Actor
  7.   #是否使用停止跟随的方法,也就是说,这里false改为true的时候,如果TRANSPARENT_SWITCHES_INDEX
  8.   #开关打开,跟随的人物就消失了(其实只是变成透明而已)
  9.   TRANSPARENT_SWITCH = false
  10.   TRANSPARENT_SWITCHES_INDEX = 20
  11.   #举例:第一个为true,第二个为20,则打开20号开关,后面的人都没了。
  12.   #跟随人数的最大数目,可以更改为2、3什么的。
  13.   TRAIN_ACTOR_SIZE_MAX = 4
  14.   # 定数
  15.   DOWN_LEFT = 1
  16.   DOWN_RIGHT = 3
  17.   UP_LEFT = 7
  18.   UP_RIGHT = 9
  19.   JUMP = 5
  20.  
  21.   class Game_Party_Actor < Game_Character
  22.     def initialize
  23.         super()
  24.         @through = true
  25.     end
  26.  
  27.     def setup(actor)
  28.         #角色的文件名称和色相设定
  29.         if actor != nil
  30.            @character_name = actor.character_name
  31.            @character_hue = actor.character_hue
  32.            @tempneme = actor.name           
  33.         else
  34.            @character_name = ""
  35.            @character_hue = 0
  36.            @tempneme = ""      
  37.         end
  38.         #透明度和合成方法,初始化
  39.         @opacity = 255
  40.         @blend_type = 0
  41.     end
  42.  
  43.     def screen_z(height = 0)
  44.         if $game_player.x == @x and $game_player.y == @y
  45.            return $game_player.screen_z(height) - 1
  46.         end
  47.         super(height)
  48.     end
  49.  
  50.     def name
  51.         return @tempneme
  52.     end
  53.  
  54.     #--------------------------------------------------------------------------
  55.     # ● 下に移動
  56.     # turn_enabled : 当场的方向变更许可的旗帜
  57.     #--------------------------------------------------------------------------
  58.     def move_down(turn_enabled = true)
  59.         # 下を向く
  60.         if turn_enabled
  61.            turn_down
  62.         end
  63.         # 通行可能な場合
  64.         if passable?(@x, @y, Input::DOWN)
  65.            # 下を向く
  66.            turn_down
  67.            # 座標を更新
  68.            @y += 1
  69.         end
  70.     end
  71. #--------------------------------------------------------------------------
  72. # ● 左に移動
  73. # turn_enabled : 当场的方向变更许可的旗帜
  74. #--------------------------------------------------------------------------
  75. def move_left(turn_enabled = true)
  76. # 左を向く
  77. if turn_enabled
  78. turn_left
  79. end
  80. # 通行可能な場合
  81. if passable?(@x, @y, Input::LEFT)
  82. # 左を向く
  83. turn_left
  84. # 座標を更新
  85. @x -= 1
  86. end
  87. end
  88. #--------------------------------------------------------------------------
  89. # ● 右に移動
  90. # turn_enabled : 当场的方向变更许可的旗帜
  91. #--------------------------------------------------------------------------
  92. def move_right(turn_enabled = true)
  93. # 右を向く
  94. if turn_enabled
  95. turn_right
  96. end
  97. # 通行可能な場合
  98. if passable?(@x, @y, Input::RIGHT)
  99. # 右を向く
  100. turn_right
  101. # 座標を更新
  102. @x += 1
  103. end
  104. end
  105. #--------------------------------------------------------------------------
  106. # ● 上に移動
  107. # turn_enabled : 当场的方向变更许可的旗帜
  108. #--------------------------------------------------------------------------
  109. def move_up(turn_enabled = true)
  110. # 上を向く
  111. if turn_enabled
  112. turn_up
  113. end
  114. # 通行可能な場合
  115. if passable?(@x, @y, Input::UP)
  116. # 上を向く
  117. turn_up
  118. # 座標を更新
  119. @y -= 1
  120. end
  121. end
  122. ##############################
  123. attr_writer :move_speed
  124. attr_writer :step_anime
  125. end
  126. module Spriteset_Map_Module
  127. def setup_actor_character_sprites?
  128. return @setup_actor_character_sprites_flag != nil
  129. end
  130. def setup_actor_character_sprites(characters)
  131. if !setup_actor_character_sprites?
  132. index_game_player = 0
  133. @character_sprites.each_index do |i|
  134. if @character_sprites[i].character.instance_of?(Game_Player)
  135. index_game_player = i
  136. break
  137. end
  138. end
  139. for character in characters.reverse
  140. @character_sprites.unshift(
  141. Sprite_Character.new(@viewport1, character)
  142. )
  143. end
  144. @setup_actor_character_sprites_flag = true
  145. end
  146. end
  147. end
  148. module Scene_Map_Module
  149. def setup_actor_character_sprites(characters)
  150. @spriteset.setup_actor_character_sprites(characters)
  151. end
  152. end
  153. module Game_Party_Module
  154. def set_transparent_actors(transparent)
  155. @transparent = transparent
  156. end
  157. def setup_actor_character_sprites
  158. if @characters == nil
  159. @characters = []
  160. for i in 1 ... TRAIN_ACTOR_SIZE_MAX
  161. @characters.push(Game_Party_Actor.new)
  162. end
  163. end
  164. for i in 1 ... TRAIN_ACTOR_SIZE_MAX
  165. @characters[i - 1].setup(actors[i])
  166. end
  167. if $scene.class.method_defined?('setup_actor_character_sprites')
  168. $scene.setup_actor_character_sprites(@characters)
  169. end
  170. end
  171. def update_party_actors
  172. setup_actor_character_sprites
  173. transparent = $game_player.transparent
  174. if transparent == false
  175. if TRANSPARENT_SWITCH
  176. transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX]
  177. end
  178. end
  179. for character in @characters
  180. character.transparent = transparent
  181. character.move_speed = $game_player.move_speed
  182. character.step_anime = $game_player.step_anime
  183. character.update
  184. end
  185. end
  186. def moveto_party_actors( x, y )
  187. setup_actor_character_sprites
  188. for character in @characters
  189. character.moveto( x, y )
  190. end
  191. if @move_list == nil
  192. @move_list = []
  193. end
  194. move_list_setup
  195. end
  196. def move_party_actors
  197. if @move_list == nil
  198. @move_list = []
  199. move_list_setup
  200. end
  201. @move_list.each_index do |i|
  202. if @characters[i] != nil
  203. case @move_list[i].type
  204. when Input::DOWN
  205. @characters[i].move_down(@move_list[i].args[0])
  206. when Input::LEFT
  207. @characters[i].move_left(@move_list[i].args[0])
  208. when Input::RIGHT
  209. @characters[i].move_right(@move_list[i].args[0])
  210. when Input::UP
  211. @characters[i].move_up(@move_list[i].args[0])
  212. when JUMP
  213. @characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])
  214. end
  215. end
  216. end
  217. end
  218. class Move_List_Element
  219. def initialize(type,args)
  220. @type = type
  221. @args = args
  222. end
  223. def type() return @type end
  224. def args() return @args end
  225. end
  226. def move_list_setup
  227. for i in 0 .. TRAIN_ACTOR_SIZE_MAX
  228. @move_list[i] = nil
  229. end
  230. end
  231. def add_move_list(type,*args)
  232. @move_list.unshift(Move_List_Element.new(type,args)).pop
  233. end
  234. def move_down_party_actors(turn_enabled = true)
  235. move_party_actors
  236. add_move_list(Input::DOWN,turn_enabled)
  237. end
  238. def move_left_party_actors(turn_enabled = true)
  239. move_party_actors
  240. add_move_list(Input::LEFT,turn_enabled)
  241. end
  242. def move_right_party_actors(turn_enabled = true)
  243. move_party_actors
  244. add_move_list(Input::RIGHT,turn_enabled)
  245. end
  246. def move_up_party_actors(turn_enabled = true)
  247. move_party_actors
  248. add_move_list(Input::UP,turn_enabled)
  249. end
  250. def jump_party_actors(x_plus, y_plus)
  251. move_party_actors
  252. add_move_list(JUMP,x_plus, y_plus)
  253. end
  254. end
  255. module Game_Player_Module
  256. def update
  257. $game_party.update_party_actors
  258. super
  259. end
  260. def moveto( x, y )
  261. $game_party.moveto_party_actors( x, y )
  262. super( x, y )
  263. end
  264. def move_down(turn_enabled = true)
  265. if passable?(@x, @y, Input::DOWN)
  266. $game_party.move_down_party_actors(turn_enabled)
  267. end
  268. super(turn_enabled)
  269. end
  270. def move_left(turn_enabled = true)
  271. if passable?(@x, @y, Input::LEFT)
  272. $game_party.move_left_party_actors(turn_enabled)
  273. end
  274. super(turn_enabled)
  275. end
  276. def move_right(turn_enabled = true)
  277. if passable?(@x, @y, Input::RIGHT)
  278. $game_party.move_right_party_actors(turn_enabled)
  279. end
  280. super(turn_enabled)
  281. end
  282. def move_up(turn_enabled = true)
  283. if passable?(@x, @y, Input::UP)
  284. $game_party.move_up_party_actors(turn_enabled)
  285. end
  286. super(turn_enabled)
  287. end
  288. def move_lower_left
  289. # 下→左、左→下 一方通行的路线可能的情况
  290. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
  291. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
  292. $game_party.move_lower_left_party_actors
  293. end
  294. super
  295. end
  296. def move_lower_right
  297. # 下→右、右→下 一方通行的路线可能的情况
  298. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
  299. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
  300. $game_party.move_lower_right_party_actors
  301. end
  302. super
  303. end
  304. def move_upper_left
  305. # 上→左、左→上 一方通行的路线可能的情况
  306. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
  307. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
  308. $game_party.move_upper_left_party_actors
  309. end
  310. super
  311. end
  312. def move_upper_right
  313. # 上→右、右→上 一方通行的路线可能的情况
  314. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
  315. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
  316. $game_party.move_upper_right_party_actors
  317. end
  318. super
  319. end
  320. def jump(x_plus, y_plus)
  321. #新坐标计算
  322. new_x = @x + x_plus
  323. new_y = @y + y_plus
  324. #算值(0,0)的情况,先有跳跃通行的情况
  325. if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
  326. $game_party.jump_party_actors(x_plus, y_plus)
  327. end
  328. super(x_plus, y_plus)
  329. end
  330. attr_reader :move_speed
  331. attr_reader :step_anime
  332. end
  333. end
  334. # module Train_Actor
  335. class Game_Party
  336. include Train_Actor::Game_Party_Module
  337. end
  338. class Game_Player
  339. include Train_Actor::Game_Player_Module
  340. end
  341. class Spriteset_Map
  342. include Train_Actor::Spriteset_Map_Module
  343. end
  344. class Scene_Map
  345. include Train_Actor::Scene_Map_Module
  346. end
  347.  
  348. #==================================================================
  349. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  350. #==================================================================



我觉得要修改Sprite_Character的原因是因为我用的战斗死亡更改死亡战斗图就是修改Sprite_battler的
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Sprite_Battler
  3. #------------------------------------------------------------------------------
  4. #  战斗显示用活动块。Game_Battler 类的实例监视、
  5. # 活动块的状态的监视。
  6. #==============================================================================
  7.  
  8. class Sprite_Battler < RPG::Sprite
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------
  12.   attr_accessor :battler                  # 战斗者
  13.   #--------------------------------------------------------------------------
  14.   # ● 初始化对像
  15.   #     viewport : 显示端口
  16.   #     battler  : 战斗者 (Game_Battler)
  17.   #--------------------------------------------------------------------------
  18.   def initialize(viewport, battler = nil)
  19.     super(viewport)
  20.     [url=home.php?mod=space&uid=133701]@battler[/url] = battler
  21.     @battler_visible = false
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 释放
  25.   #--------------------------------------------------------------------------
  26.   def dispose
  27.     if self.bitmap != nil
  28.       self.bitmap.dispose
  29.     end
  30.     super
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 刷新画面
  34.   #--------------------------------------------------------------------------
  35.   def update
  36.     super
  37.     # 战斗者为 nil 的情况下
  38.     if @battler == nil
  39.       self.bitmap = nil
  40.       loop_animation(nil)
  41.       return
  42.     end
  43.     # 文件名和色相与当前情况有差异的情况下
  44.     if (@battler.battler_name != @battler_name or
  45.        @battler.battler_hue != @battler_hue)
  46.       # 获取、设置位图
  47.       @battler_name = @battler.battler_name
  48.       @battler_hue = @battler.battler_hue
  49.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  50.       @width = bitmap.width
  51.       [url=home.php?mod=space&uid=291977]@height[/url] = bitmap.height
  52.       self.ox = @width / 2
  53.       self.oy = @height
  54.   ###########################################################################
  55.       if @battler.dead?
  56.         #更改角色战斗图为死亡战斗图
  57.         self.bitmap = RPG::Cache.battler(@battler.id.to_s + "死亡", @battler_hue)
  58.         @width = bitmap.width
  59.         @height = bitmap.height
  60.         self.ox = @width / 2
  61.         self.oy = @height
  62.       # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  63.       if (@battler.dead? or @battler.hidden) and @battler.is_a?(Game_Enemy)
  64.         self.opacity = 0
  65.       end
  66.     end
  67.   end
  68.   ############################################################################
  69.     # 动画 ID 与当前的情况有差异的情况下
  70.     if @battler.damage == nil and
  71.        @battler.state_animation_id != @state_animation_id
  72.       @state_animation_id = @battler.state_animation_id
  73.       loop_animation($data_animations[@state_animation_id])
  74.     end
  75.     # 应该被显示的角色的情况下
  76.     if @battler.is_a?(Game_Actor) and @battler_visible
  77.       # 不是主状态的时候稍稍降低点透明度
  78.       if $game_temp.battle_main_phase
  79.         self.opacity += 3 if self.opacity < 255
  80.       else
  81.         self.opacity -= 3 if self.opacity > 207
  82.       end
  83.     end
  84.     # 明灭
  85.     if @battler.blink
  86.       blink_on
  87.     else
  88.       blink_off
  89.     end
  90.     # 不可见的情况下
  91.     unless @battler_visible
  92.       # 出现
  93.       if not @battler.hidden and not @battler.dead? and
  94.   ###########################################################################
  95.          (@battler.damage == nil or @battler.damage_pop)
  96.         if @battler.is_a?(Game_Enemy)
  97.           appear
  98.         else
  99.           ########还原战斗图########
  100.           self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  101.           @width = bitmap.width
  102.           @height = bitmap.height
  103.           self.ox = @width / 2
  104.           self.oy = @height
  105.         end
  106.         @battler_visible = true
  107.       end
  108.     end
  109.     ##########################################################################
  110.     # 可见的情况下
  111.     if @battler_visible
  112.       # 逃跑
  113.       if @battler.hidden
  114.         $game_system.se_play($data_system.escape_se)
  115.         escape
  116.         @battler_visible = false
  117.       end
  118.       # 白色闪烁
  119.       if @battler.white_flash
  120.         whiten
  121.         @battler.white_flash = false
  122.       end
  123.       # 动画
  124.       if @battler.animation_id != 0
  125.         animation = $data_animations[@battler.animation_id]
  126.         animation(animation, @battler.animation_hit)
  127.         @battler.animation_id = 0
  128.       end
  129.       # 伤害
  130.       if @battler.damage_pop
  131.         damage(@battler.damage, @battler.critical)
  132.         @battler.damage = nil
  133.         @battler.critical = false
  134.         @battler.damage_pop = false
  135.       end
  136.   ###########################################################################
  137.       # korapusu
  138.       if @battler.damage == nil and @battler.dead?
  139.         if @battler.is_a?(Game_Enemy)
  140.           $game_system.se_play($data_system.enemy_collapse_se)
  141.           collapse
  142.         else
  143.           $game_system.se_play($data_system.actor_collapse_se)
  144.           # 角色战斗图变为死亡战斗图
  145.           self.bitmap = RPG::Cache.battler(@battler.id.to_s + "死亡", @battler_hue)
  146.           @width = bitmap.width
  147.           @height = bitmap.height
  148.           self.ox = @width / 2
  149.           self.oy = @height
  150.         end
  151.         @battler_visible = false
  152.       end
  153.     end
  154.     #########################################################################
  155.     # 设置活动块的坐标
  156.     self.x = @battler.screen_x
  157.     self.y = @battler.screen_y
  158.     self.z = @battler.screen_z
  159.   end
  160. end

作者: ZiiDo_K    时间: 2017-7-6 11:33
cinderelmini 发表于 2016-8-19 15:05
正因如此才需要跟随脚本的内容来确认里面用了哪个类作为队友的Character对象,以此来修改行走图名字,
进 ...

我想问下,这个是XP的,我用VA的话,要怎么改才好?




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