恐惧剑刃版CP制战斗
先放截图我的思路仅供参考。
再次更新,这次测试没发现问题。。
其余问题:
1. fill_rect过多
2. 敌人CP没有显示
等
太赖暂时不考虑修正 。。
工程
CP
RUBY 代码
#------------------------------------------------------------------------------
# - CP战斗
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# - 设置
#------------------------------------------------------------------------------
module CP
Speed = 1 # 速度
Width = 120 # CP条宽度
Height = 6 # CP条高度
Back_Color = Color.new(0, 0, 0) # CP条背景色
Cp_Color = Color.new(255, 255, 64) # CP条填充色
Cp_Color_2 = Color.new(255, 128, 255) # CP条填充色(满)
end
#------------------------------------------------------------------------------
# - 战斗者CP属性
#------------------------------------------------------------------------------
class Game_Battler
attr_accessor :cp, :cp_speed
alias initialize_cp_old initialize
def initialize
@cp = 0
@cp_speed = 0
initialize_cp_old
end
end
#------------------------------------------------------------------------------
# - 战斗场景
#------------------------------------------------------------------------------
class Scene_Battle
#----------------------------------------------------------------------------
# - 主方法
#----------------------------------------------------------------------------
alias main_cp_old main
def main
@cp_viewport = Viewport.new(0, 465, 640, CP::Height)
@cp_viewport.z = 9999
@cp_sprite = Sprite.new(@cp_viewport)
@cp_sprite.bitmap = Bitmap.new(640, CP::Height)
cp_bar
main_cp_old
@cp_sprite.bitmap.dispose
@cp_sprite.dispose
@cp_viewport.dispose
end
#--------------------------------------------------------------------------
# - 速度
#--------------------------------------------------------------------------
def cp_speed
battlers_agi = []
for battler in$game_party.actors + $game_troop.enemies
battlers_agi = width - 1
cp_color = CP::Cp_Color_2
wid = width - 1
else
cp_color = CP::Cp_Color
wid = actor.cp
end
@cp_sprite.bitmap.fill_rect(x + 1, 1, wid, height - 2, cp_color)
end
end
end
class Scene_Battle
alias start_phase2_cp_old start_phase2
def start_phase2
cp_bar
start_phase2_cp_old
end
def make_action_orders
@action_battlers = [@active_battler_cp]
end
alias update_phase4_step6_cp_old update_phase4_step6
def update_phase4_step6
update_phase4_step6_cp_old
@active_battler.cp = 0
end
end
Scene_Battle 3
RUBY 代码
#==============================================================================
# ■ Scene_Battle (分割定义 3)
#------------------------------------------------------------------------------
# 处理战斗画面的类。
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● 开始角色命令回合
#--------------------------------------------------------------------------
def start_phase3
# 转移到回合 3
@phase = 3
# 设置角色为非选择状态
@actor_index = -1
@active_battler = nil
@active_battler_cp = nil
# 同伴指令窗口无效化
@party_command_window.active = false
@party_command_window.visible = false
end
#--------------------------------------------------------------------------
# ● 设置角色指令窗口
#--------------------------------------------------------------------------
def phase3_setup_command_window
if !@active_battler_cp.is_a?(Game_Actor)
start_phase4 # 回合4
@phase = 4
return
end
# 角色指令窗口无效化
@actor_command_window.active = true
@actor_command_window.visible = true
@actor_command_window.x = $game_party.actors.index(@active_battler_cp) * 160
# 设置索引为 0
@actor_command_window.index = 0
end
#--------------------------------------------------------------------------
# ● 刷新画面 (角色命令回合)
#--------------------------------------------------------------------------
def update_phase3
if judge # 判断胜负
return
end
if@active_battler_cp == nil# 可以刷新
cp_speed # 新速度
cp_bar # 刷新cp条
for battler in$game_party.actors + $game_troop.enemies
battler.cp += battler.cp_speed
if battler.cp >= CP::Width - 1
cp_bar # 变色
@active_battler_cp = battler # 输入命令者
phase3_setup_command_window
end
end
end
# 敌人光标有效的情况下
if@enemy_arrow != nil
update_phase3_enemy_select
# 角色光标有效的情况下
elsif@actor_arrow != nil
update_phase3_actor_select
# 特技窗口有效的情况下
elsif@skill_window != nil
update_phase3_skill_select
# 物品窗口有效的情况下
elsif@item_window != nil
update_phase3_item_select
# 角色指令窗口有效的情况下
elsif@actor_command_window.active
update_phase3_basic_command
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (角色命令回合 : 基本命令)
#--------------------------------------------------------------------------
def update_phase3_basic_command
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 角色指令窗口光标位置分之
case@actor_command_window.index
when0# 攻击
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler_cp.current_action.kind = 0
@active_battler_cp.current_action.basic = 0
# 开始选择敌人
start_enemy_select
when1# 特技
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler_cp.current_action.kind = 1
# 开始选择特技
start_skill_select
when2# 防御
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler_cp.current_action.kind = 0
@active_battler_cp.current_action.basic = 1
start_phase4
@phase = 4
when3# 物品
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler_cp.current_action.kind = 2
# 开始选择物品
start_item_select
end
return
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (角色命令回合 : 选择特技)
#--------------------------------------------------------------------------
def update_phase3_skill_select
# 设置特技窗口为可视状态
@skill_window.visible = true
# 刷新特技窗口
@skill_window.update
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 结束特技选择
end_skill_select
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 获取特技选择窗口现在选择的特技的数据
@skill = @skill_window.skill
# 无法使用的情况下
if@skill == nilornot@active_battler_cp.skill_can_use?(@skill.id)
# 演奏冻结 SE
$game_system.se_play($data_system.buzzer_se)
return
end
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler_cp.current_action.skill_id = @skill.id
# 设置特技窗口为不可见状态
@skill_window.visible = false
if !.include?(@skill.scope)
start_phase4
@phase = 4
return
end
# 效果范围是敌单体的情况下
if@skill.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方单体的情况下
elsif@skill.scope == 3or@skill.scope == 5
# 开始选择角色
start_actor_select
# 效果范围不是单体的情况下
else
# 选择特技结束
end_skill_select
end
return
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (角色命令回合 : 选择物品)
#--------------------------------------------------------------------------
def update_phase3_item_select
# 设置物品窗口为可视状态
@item_window.visible = true
# 刷新物品窗口
@item_window.update
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 选择物品结束
end_item_select
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 获取物品窗口现在选择的物品资料
@item = @item_window.item
# 无法使用的情况下
unless$game_party.item_can_use?(@item.id)
# 演奏冻结 SE
$game_system.se_play($data_system.buzzer_se)
return
end
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler_cp.current_action.item_id = @item.id
# 设置物品窗口为不可见状态
@item_window.visible = false
if !.include?(@item.scope)
start_phase4
@phase = 4
return
end
# 效果范围是敌单体的情况下
if@item.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方单体的情况下
elsif@item.scope == 3or@item.scope == 5
# 开始选择角色
start_actor_select
# 效果范围不是单体的情况下
else
# 物品选择结束
end_item_select
end
return
end
end
#--------------------------------------------------------------------------
# ● 刷新画面画面 (角色命令回合 : 选择敌人)
#--------------------------------------------------------------------------
def update_phase3_enemy_select
# 刷新敌人箭头
@enemy_arrow.update
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 选择敌人结束
end_enemy_select
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler_cp.current_action.target_index = @enemy_arrow.index
# 选择敌人结束
end_enemy_select
# 显示特技窗口中的情况下
if@skill_window != nil
# 结束特技选择
end_skill_select
end
# 显示物品窗口的情况下
if@item_window != nil
# 结束物品选择
end_item_select
end
start_phase4
@phase = 4
return
end
end
#--------------------------------------------------------------------------
# ● 画面更新 (角色指令回合 : 选择角色)
#--------------------------------------------------------------------------
def update_phase3_actor_select
# 刷新角色箭头
@actor_arrow.update
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 选择角色结束
end_actor_select
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler_cp.current_action.target_index = @actor_arrow.index
# 选择角色结束
end_actor_select
# 显示特技窗口中的情况下
if@skill_window != nil
# 结束特技选择
end_skill_select
end
# 显示物品窗口的情况下
if@item_window != nil
# 结束物品选择
end_item_select
end
start_phase4
@phase = 4
return
end
end
#--------------------------------------------------------------------------
# ● 开始选择特技
#--------------------------------------------------------------------------
def start_skill_select
# 生成特技窗口
@skill_window = Window_Skill.new(@active_battler_cp)
# 关联帮助窗口
@skill_window.help_window = @help_window
# 无效化角色指令窗口
@actor_command_window.active = false
@actor_command_window.visible = false
end
end
本帖来自P1论坛作者恐惧剑刃,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=373412若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]