2楼给出的做法可行,我来补充一下细节。细节这里比较讨厌。
1. 敌人队伍增加一个可以添加敌人的函数。
参考Game_Troop#setup方法里添加敌人的部分,编写临时增加敌人的方法。在这里必须要参考Game_Enemy的initialize,在生成敌人的时候,指定的是敌人所在队伍和敌人的编号。一种可能的办法为
class Game_Troop def add_enemy(enemy_id) # 稍后说明 enemy = Game_Enemy.new(队伍编号, 敌人索引, 敌人 ID) @enemies << enemy end end
class Game_Troop
def add_enemy(enemy_id)
# 稍后说明
enemy = Game_Enemy.new(队伍编号, 敌人索引, 敌人 ID)
@enemies << enemy
end
end
在这里,敌人索引可以设置为@enemies.size,而队伍编号在这里暂时设置为 0。临时添加的敌人不能等同于数据库中的敌人,设置为别的有可能会出错,设置为 0 表示这是临时添加的敌人。
2. 敌人战斗图画面坐标改成可外部变动。
这点要修改Game_Enemy的若干部分,在下面给出提示。
Game_Enemy#initialize:这里看到敌人的若干属性,例如[中途出现(hidden)]和[不死之身(immortal)]等。只有设置正确队伍编号的敌人才能正常设置这个属性,对于临时添加的敌人,这样设置会有问题。可以通过队伍编号(troop_id)是否为 0,进行判断敌人是否是临时添加的。同时你要注意到,这里添加的敌人是什么要根据队伍而定,但是临时添加的敌人由于没有队伍,所以也不能这样指定。可以考虑将此initialize方法加一个参数上去,如果队伍编号为 0,则需要进一步提供敌人ID的信息。
Game_Enemy#screen_x:敌人战斗坐标信息,对于非临时生成的敌人,坐标信息在数据库-队伍中给出。但是对于临时添加的敌人,则不能这样设置。需要借助attr_writer :screen_x来提供设置@screen_x的方法。然后在本方法中判断,如果队伍 ID 为 0,则直接返回设置好的@screen_x即可。
Game_Enemy#screen_y:同理。
3. 敌人战斗精灵增加判断敌人队伍是否增加敌人,来刷新敌人战斗图。
这一块需要你修改Spriteset_Battle,在添加敌人的同时,将敌人的战斗精灵加入场景中。表示敌人战斗图精灵是@enemy_sprites数组,因此你需要想办法将其取出(例如利用attr_reader :enemy_sprites),然后在生成新敌人的同时将他的战斗图加入到场景中。
总之,改起来比较麻烦,范例我就不上了,自己好好研究一下。
|