Project1

标题: (世纪难题)有关战斗中的替换队员 [打印本页]

作者: andyho777    时间: 2014-1-5 19:56
标题: (世纪难题)有关战斗中的替换队员
本帖最后由 andyho777 于 2014-1-9 12:20 编辑

话说小弟在战斗中移除其中一位队员,然后数回合后再重新加入。
不知何解重新加入的队员会没了战斗?_?
请问大大们是甚么原因?可以解决吗?

作者: 正太君    时间: 2014-1-7 10:06
我这里按照楼主的描述没有测试出任何问题,可能只有在楼主的工程中才会出现这个问题。
作者: andyho777    时间: 2014-1-7 15:26
谢谢正太君的提~ 刚刚我再测试一遍,
发现原来该问题是在于当某队员离开了战斗位置,然后再回到刚离开的位置时,战斗图就会不显示…
例如:帕吉尔离开了队伍(战斗位置2), 然后回到队伍时又是在战斗位置2。


作者: andyho777    时间: 2014-1-9 12:14
本帖最后由 andyho777 于 2014-1-9 12:19 编辑

刚发现多年前百度也有类似的问题, 但未能解决...


作者: 恐惧剑刃    时间: 2014-1-9 22:08
记得手动认可哦 喵

找到Spriteset_Battle把初始化中生成角色活动块那一部分脚本,删掉
也就是删掉这个
  1. # 生成敌人活动块
  2. @actor_sprites = []
  3.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  4.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  5.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  6.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
复制代码
把update中
  1. # 刷新角色的活动块 (对应角色的替换)
  2.     @actor_sprites[0].battler = $game_party.actors[0]
  3.     @actor_sprites[1].battler = $game_party.actors[1]
  4.     @actor_sprites[2].battler = $game_party.actors[2]
  5.     @actor_sprites[3].battler = $game_party.actors[3]
复制代码
这段删掉

改为
  1. # 生成敌人(角色,翻译错误!)活动块
  2.     if $game_party.actors.size != @old_party_size
  3.     @actor_sprites = []
  4.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  5.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  6.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  7.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  8.     # 刷新角色的活动块 (对应角色的替换)
  9.     @actor_sprites[0].battler = $game_party.actors[0]
  10.     @actor_sprites[1].battler = $game_party.actors[1]
  11.     @actor_sprites[2].battler = $game_party.actors[2]
  12.     @actor_sprites[3].battler = $game_party.actors[3]
  13.     @old_party_size = $game_party.actors.size
  14.     end
复制代码
来个整体的
  1. #==============================================================================
  2. # ■ Spriteset_Battle
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的活动块的类。本类在 Scene_Battle 类
  5. # 的内部使用。
  6. #==============================================================================

  7. class Spriteset_Battle
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_reader   :viewport1                # 敌人方的显示端口
  12.   attr_reader   :viewport2                # 角色方的显示端口
  13.   #--------------------------------------------------------------------------
  14.   # ● 初始化变量
  15.   #--------------------------------------------------------------------------
  16.   def initialize
  17.     # 生成显示端口
  18.     @viewport1 = Viewport.new(0, 0, 640, 320)
  19.     @viewport2 = Viewport.new(0, 0, 640, 480)
  20.     @viewport3 = Viewport.new(0, 0, 640, 480)
  21.     @viewport4 = Viewport.new(0, 0, 640, 480)
  22.     @viewport2.z = 101
  23.     @viewport3.z = 200
  24.     @viewport4.z = 5000
  25.     # 生成战斗背景活动块
  26.     @battleback_sprite = Sprite.new(@viewport1)
  27.     # 生成敌人活动块
  28.     @enemy_sprites = []
  29.     for enemy in $game_troop.enemies.reverse
  30.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  31.     end
  32.     # 生成天候
  33.     @weather = RPG::Weather.new(@viewport1)
  34.     # 生成图片活动块
  35.     @picture_sprites = []
  36.     for i in 51..100
  37.       @picture_sprites.push(Sprite_Picture.new(@viewport3,
  38.         $game_screen.pictures[i]))
  39.     end
  40.     # 生成计时器块
  41.     @timer_sprite = Sprite_Timer.new
  42.     # 刷新画面
  43.     update
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 释放
  47.   #--------------------------------------------------------------------------
  48.   def dispose
  49.     # 如果战斗背景位图存在的情况下就释放
  50.     if @battleback_sprite.bitmap != nil
  51.       @battleback_sprite.bitmap.dispose
  52.     end
  53.     # 释放战斗背景活动块
  54.     @battleback_sprite.dispose
  55.     # 释放敌人活动块、角色活动块
  56.     for sprite in @enemy_sprites + @actor_sprites
  57.       sprite.dispose
  58.     end
  59.     # 释放天候
  60.     @weather.dispose
  61.     # 释放图片活动块
  62.     for sprite in @picture_sprites
  63.       sprite.dispose
  64.     end
  65.     # 释放计时器活动块
  66.     @timer_sprite.dispose
  67.     # 释放显示端口
  68.     @viewport1.dispose
  69.     @viewport2.dispose
  70.     @viewport3.dispose
  71.     @viewport4.dispose
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 显示效果中判定
  75.   #--------------------------------------------------------------------------
  76.   def effect?
  77.     # 如果是在显示效果中的话就返回 true
  78.     for sprite in @enemy_sprites + @actor_sprites
  79.       return true if sprite.effect?
  80.     end
  81.     return false
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 刷新画面
  85.   #--------------------------------------------------------------------------
  86.   def update
  87.     # 生成敌人(角色,翻译错误!)活动块
  88.     if $game_party.actors.size != @old_party_size
  89.     @actor_sprites = []
  90.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  91.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  92.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  93.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  94.     # 刷新角色的活动块 (对应角色的替换)
  95.     @actor_sprites[0].battler = $game_party.actors[0]
  96.     @actor_sprites[1].battler = $game_party.actors[1]
  97.     @actor_sprites[2].battler = $game_party.actors[2]
  98.     @actor_sprites[3].battler = $game_party.actors[3]
  99.     @old_party_size = $game_party.actors.size
  100.     end
  101.     # 战斗背景的文件名与现在情况有差异的情况下
  102.     if @battleback_name != $game_temp.battleback_name
  103.       @battleback_name = $game_temp.battleback_name
  104.       if @battleback_sprite.bitmap != nil
  105.         @battleback_sprite.bitmap.dispose
  106.       end
  107.       @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
  108.       @battleback_sprite.src_rect.set(0, 0, 640, 320)
  109.     end
  110.     # 刷新战斗者的活动块
  111.     for sprite in @enemy_sprites + @actor_sprites
  112.       sprite.update
  113.     end
  114.     # 刷新天气图形
  115.     @weather.type = $game_screen.weather_type
  116.     @weather.max = $game_screen.weather_max
  117.     @weather.update
  118.     # 刷新图片活动块
  119.     for sprite in @picture_sprites
  120.       sprite.update
  121.     end
  122.     # 刷新计时器活动块
  123.     @timer_sprite.update
  124.     # 设置画面的色调与震动位置
  125.     @viewport1.tone = $game_screen.tone
  126.     @viewport1.ox = $game_screen.shake
  127.     # 设置画面的闪烁色
  128.     @viewport4.color = $game_screen.flash_color
  129.     # 刷新显示端口
  130.     @viewport1.update
  131.     @viewport2.update
  132.     @viewport4.update
  133.   end
  134. end
复制代码

作者: andyho777    时间: 2014-1-10 12:35
恋′挂机 发表于 2014-1-9 22:08
记得手动认可哦 喵

找到Spriteset_Battle把初始化中生成角色活动块那一部分脚本,删掉


感恩啊 @@ 刚刚试一下大大的脚本后,
出现了一个新问题,今次是角色脱离后战斗图没有马上消失,
要过一段时间才自动消失。不知何解?@@

(話說,如何認可?@@)




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