| 赞 | 2 |
| VIP | |
| 好人卡 | |
| 积分 | 18 |
| 经验 | |
| 最后登录 | 2026-5-24 |
| 在线时间 | 1313 小时 |
- 梦石
- 0
- 星屑
- 1788
- 在线时间
- 1313 小时
- 注册时间
- 2012-8-4
- 回帖
- 724
|
发表于 2016-5-23 14:52:06
|
显示全部楼层
本帖最后由 夜狠简单 于 2016-5-23 19:31 编辑
cmmd1 发表于 2016-5-23 14:48 
好像被魔法攻击,受伤就没有震动了
战斗画面震动[pre lang="ruby"]#by RK
#插到Main前
$shakeswitches=40#40号开关。可以改
$shakeswitches1=41
$shakeswitches2=42
# ■ Scene_Battle (分割定义 4)
#------------------------------------------------------------------------------
# 处理战斗画面的类。
#==============================================================================
#■ ■ ■ 在45行和51行....可以改变震动的
# 敌人震动 Interpreter.new.command_726(强度,速度,帧数[这个游戏应该是40帧为1秒],id不要动)
# 角色震动 Interpreter.new.command_725(强度,速度,帧数,id不要动)
# 其他震动地方自己可以搜索改强度,94行处开关40开启角色被攻击画面震动,95行出开启敌人被....
class Scene_Battle
def start_enemy_select
# 生成敌人箭头
@enemy_arrow = Arrow_Enemy.new(@spriteset.viewport14)
# 关联帮助窗口
@enemy_arrow.help_window = @help_window
# 无效化角色指令窗口
@actor_command_window.active = false
@actor_command_window.visible = false
end
#--------------------------------------------------------------------------
# ● 开始选择角色
#--------------------------------------------------------------------------
def start_actor_select
# 生成角色箭头
@actor_arrow = Arrow_Actor.new(@spriteset.viewport16)
@actor_arrow.index = @actor_index
# 关联帮助窗口
@actor_arrow.help_window = @help_window
# 无效化角色指令窗口
@actor_command_window.active = false
@actor_command_window.visible = false
end
#--------------------------------------------------------------------------
# ● 生成基本行动结果
#--------------------------------------------------------------------------
alias make_basic_action_result20160523 make_basic_action_result
def make_basic_action_result
if @active_battler.is_a?(Game_Enemy)
if @active_battler.current_action.basic ==0
#角色攻击时震动一下
Interpreter.new.command_726(5,5,5,@active_battler.index)
end
end
if @active_battler.is_a?(Game_Actor)
if @active_battler.current_action.basic ==0
#敌人攻击时震动一下
Interpreter.new.command_725(5,5,5,@active_battler.id)
end
end
make_basic_action_result20160523
end
#生成特技行动结果
alias make_skill_action_result20160523 make_skill_action_result
def make_skill_action_result
if @active_battler.is_a?(Game_Enemy)
#角色施法时震动一下
Interpreter.new.command_726(5,5,5,@active_battler.index)
end
if @active_battler.is_a?(Game_Actor)
#敌人施法时震动一下
Interpreter.new.command_725(5,5,5,@active_battler.id)
end
make_skill_action_result20160523
end
#生成物品行动结果
alias make_item_action_result20160523 make_item_action_result
def make_item_action_result
if @active_battler.is_a?(Game_Enemy)
#角色使用物品时震动一下
Interpreter.new.command_726(5,5,5,@active_battler.index)
end
if @active_battler.is_a?(Game_Actor)
#敌人使用物品时震动一下
Interpreter.new.command_725(5,5,5,@active_battler.id)
end
make_item_action_result20160523
end
def update_phase4_step4
# 对像方动画
for target in @target_battlers
target.animation_id = @animation2_id
target.animation_hit = (target.damage != "Miss")
if target.damage != nil
#角色震动
if target.is_a?(Game_Actor) and target.damage.to_i>0
Interpreter.new.command_725(8,5,10,target.id)
@spriteset.viewport15.oy = $game_screen.start_shake3(8, 5,10) if $game_switches[$shakeswitches]==true
end
#敌人震动
if target.is_a?(Game_Enemy) and target.damage.to_i>0
Interpreter.new.command_726(8,5,10,target.index)
@spriteset.viewport15.oy = $game_screen.start_shake3(8, 5,10) if $game_switches[$shakeswitches1]==true
#画面跟着震动强度为角色震动强度
end
end
end
# 限制动画长度、最低 8 帧
@wait_count = 8
# 移至步骤 5
@phase4_step = 5
end
end
#==============================================================================
# ■ Game_Screen
#------------------------------------------------------------------------------
# 更改色调以及画面闪烁、保存画面全体关系处理数据的类。本类的实例请参考
# $game_screen。
#==============================================================================
class Game_Screen
attr_reader :shake1 # 震动位置
attr_reader :shake2 # 震动位置
attr_reader :shake3 # 震动位置
attr_reader :shake_id # 震动的角色
attr_reader :shake_id1 # 震动的敌人
alias initialize20160523 initialize
def initialize
@shake_power1 = 0
@shake_speed1 = 0
@shake_power2 = 0
@shake_speed2 = 0
@shake_power3 = 0
@shake_speed3 = 0
@shake_duration1 = 0
@shake_direction1 = 1
@shake_duration2 = 0
@shake_direction2 = 1
@shake_duration3 = 0
@shake_direction3 = 1
@shake_id=0
@shake_id1=0
@shake1 = 0
@shake2 = 0
@shake3 = 0
initialize20160523
end
#角色震动
def start_shake1(power, speed, duration,id)
@shake_power1 = power
@shake_speed1 = speed
@shake_id=id
@shake_duration1 = duration
end
#敌人震动
def start_shake2(power, speed, duration,id)
@shake_power2 = power
@shake_speed2 = speed
@shake_id1=id
@shake_duration2 = duration
end
#画面震动
def start_shake3(power, speed, duration)
@shake_power3 = power
@shake_speed3 = speed
@shake_duration3 = duration
end
#刷新画面
alias update20160523 update
def update
update20160523
if @shake_duration1 >= 1 or @shake1 != 0
delta1 = (@shake_power1 * @shake_speed1 * @shake_direction1) / 10.0
if @shake_duration1 <= 1 and @shake1 * (@shake1 + delta1) < 0
@shake1 = 0
else
@shake1 += delta1
end
if @shake1 > @shake_power1 * 2
@shake_direction1 = -1
end
if @shake1 < - @shake_power1 * 2
@shake_direction1 = 1
end
if @shake_duration1 >= 1
@shake_duration1 -= 1
end
end
if @shake_duration2 >= 1 or @shake2 != 0
delta2 = (@shake_power2 * @shake_speed2 * @shake_direction2) / 10.0
if @shake_duration2 <= 1 and @shake2 * (@shake2 + delta2) < 0
@shake2 = 0
else
@shake2 += delta2
end
if @shake2 > @shake_power2 * 2
@shake_direction2 = -1
end
if @shake2 < - @shake_power2 * 2
@shake_direction2 = 1
end
if @shake_duration2 >= 1
@shake_duration2 -= 1
end
end
if @shake_duration3 >= 1 or @shake3 != 0
delta3 = (@shake_power3 * @shake_speed3 * @shake_direction3) / 10.0
if @shake_duration3 <= 1 and @shake3 * (@shake3 + delta3) < 0
@shake3 = 0
else
@shake3 += delta3
end
if @shake3 > @shake_power3 * 2
@shake_direction3 = -1
end
if @shake3 < - @shake_power3 * 2
@shake_direction3 = 1
end
if @shake_duration3 >= 1
@shake_duration3 -= 1
end
end
end
end
#==============================================================================
# ■ Spriteset_Battle
#------------------------------------------------------------------------------
# 处理战斗画面的活动块的类。本类在 Scene_Battle 类
# 的内部使用。
#==============================================================================
class Spriteset_Battle
# 敌人方的显示端口
attr_reader :viewport8
attr_reader :viewport9
attr_reader :viewport10
attr_reader :viewport11
attr_reader :viewport12
attr_reader :viewport13
attr_reader :viewport14
attr_reader :viewport15
# 角色方的显示端口
attr_reader :viewport5
attr_reader :viewport6
attr_reader :viewport7
attr_reader :viewport16
#其他显示端口
#alias initialize20160523 initialize
def initialize
# 生成显示端口
#initialize20160523
@viewport1 = Viewport.new(0, 0, 640, 540)
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport4 = Viewport.new(0, 0, 640, 480)
@viewport15 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 101
@viewport3.z = 200
@viewport4.z = 5000
# 生成战斗背景活动块
@battleback_sprite = Sprite.new(@viewport1)
# 生成敌人活动块
#敌人
@viewport8 = Viewport.new(0, 0, 640, 480)
@viewport9 = Viewport.new(0, 0, 640, 480)
@viewport10 = Viewport.new(0, 0, 640, 480)
@viewport11 = Viewport.new(0, 0, 640, 480)
@viewport12 = Viewport.new(0, 0, 640, 480)
@viewport13 = Viewport.new(0, 0, 640, 480)
@viewport14 = Viewport.new(0, 0, 640, 480)
@enemy_sprites1 = []
for enemy in $game_troop.enemies.reverse
@enemy_sprites1.push(Sprite_Battler.new(@viewport1, enemy))
end
@enemy_sprites = []
for enemy in $game_troop.enemies.reverse
case enemy.index
when 0
@enemy_sprites.push(Sprite_Battler.new(@viewport15, enemy))
when 1
@enemy_sprites.push(Sprite_Battler.new(@viewport8, enemy))
when 2
@enemy_sprites.push(Sprite_Battler.new(@viewport9, enemy))
when 3
@enemy_sprites.push(Sprite_Battler.new(@viewport10, enemy))
when 4
@enemy_sprites.push(Sprite_Battler.new(@viewport11, enemy))
when 5
@enemy_sprites.push(Sprite_Battler.new(@viewport12, enemy))
when 6
@enemy_sprites.push(Sprite_Battler.new(@viewport13, enemy))
when 7
@enemy_sprites.push(Sprite_Battler.new(@viewport14, enemy))
end
end
#角色
@viewport5 = Viewport.new(0, 0, 640, 480)
@viewport6 = Viewport.new(0, 0, 640, 480)
@viewport7 = Viewport.new(0, 0, 640, 480)
@viewport16= Viewport.new(0, 0, 640, 480)
@viewport5.z = 101
@viewport6.z = 101
@viewport7.z = 101
@viewport16.z = 101
@actor_sprites1 = []
@actor_sprites1.push(Sprite_Battler.new(@viewport2))
@actor_sprites1.push(Sprite_Battler.new(@viewport2))
@actor_sprites1.push(Sprite_Battler.new(@viewport2))
@actor_sprites1.push(Sprite_Battler.new(@viewport2))
@actor_sprites = []
@actor_sprites.push(Sprite_Battler.new(@viewport16))
@actor_sprites.push(Sprite_Battler.new(@viewport5))
@actor_sprites.push(Sprite_Battler.new(@viewport6))
@actor_sprites.push(Sprite_Battler.new(@viewport7))
# 生成天候
@weather = RPG::Weather.new(@viewport1)
# 生成图片活动块
@picture_sprites = []
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3,
$game_screen.pictures))
end
# 生成计时器块
@timer_sprite = Sprite_Timer.new
# 刷新画面
update
end
#释放
alias dispose20160523 dispose
def dispose
dispose20160523
for sprite in @enemy_sprites + @actor_sprites+@enemy_sprites1 + @actor_sprites1
sprite.dispose
end
@viewport5.dispose
@viewport6.dispose
@viewport7.dispose
@viewport8.dispose
@viewport9.dispose
@viewport10.dispose
@viewport11.dispose
@viewport12.dispose
@viewport13.dispose
@viewport14.dispose
@viewport15.dispose
@viewport16.dispose
end
#--------------------------------------------------------------------------
# ● 显示效果中判定
#--------------------------------------------------------------------------
def effect?
# 如果是在显示效果中的话就返回 true
for sprite in @enemy_sprites + @actor_sprites+@enemy_sprites1 + @actor_sprites1
return true if sprite.effect?
end
return false
end
#刷新画面
alias update20160523 update
def update
update20160523
# 战斗背景的文件名与现在情况有差异的情况下
if @battleback_name != $game_temp.battleback_name
@battleback_name = $game_temp.battleback_name
if @battleback_sprite.bitmap != nil
@battleback_sprite.bitmap.dispose
end
@battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
# @battleback_sprite.src_rect.set(0, 0, 640, 320)
@battleback_sprite.src_rect.set(0, 120, 640, 480)
end
# 刷新战斗者的活动块,开关打开后是另一种效果
for sprite in @enemy_sprites1 + @actor_sprites1
sprite.update if $game_switches[$shakeswitches2]==true
end
tongban=[]
diren=[]
for i in 0...$game_party.actors.size
tongban=$game_party.actors.id
end
case $game_screen.shake_id
when tongban[0]
@viewport16.oy = $game_screen.shake1
when tongban[1]
@viewport5.oy = $game_screen.shake1
when tongban[2]
@viewport6.oy = $game_screen.shake1
when tongban[3]
@viewport7.oy = $game_screen.shake1
end
for i in 0...$game_troop.enemies.size
diren=$game_troop.enemies.index
end
case $game_screen.shake_id1
when diren[0]
@viewport15.oy = $game_screen.shake2
when diren[1]
@viewport8.oy = $game_screen.shake2
when diren[2]
@viewport9.oy = $game_screen.shake2
when diren[3]
@viewport10.oy = $game_screen.shake2
when diren[4]
@viewport11.oy = $game_screen.shake2
when diren[5]
@viewport12.oy = $game_screen.shake2
when diren[6]
@viewport13.oy = $game_screen.shake2
when diren[7]
@viewport14.oy = $game_screen.shake2
end
@viewport1.oy = $game_screen.shake3
#刷新显示端口
@viewport5.update
@viewport6.update
@viewport7.update
@viewport8.update
@viewport9.update
@viewport10.update
@viewport11.update
@viewport12.update
@viewport13.update
@viewport14.update
@viewport15.update
@viewport16.update
end
end
#==============================================================================
# ■ Interpreter
#------------------------------------------------------------------------------
# 执行事件命令的解释器。本类在 Game_System 类
# 与 Game_Event 类的内部使用。
#==============================================================================
class Interpreter
def command_725(x,y,z,id)
# 角色震动开始
$game_screen.start_shake1(x, y,z*2,id)
# 继续
return true
end
def command_726(x,y,z,id)
# 敌人震动开始
$game_screen.start_shake2(x, y,z*2,id)
# 继续
return true
end
def command_727(x,y,z)
# 敌人震动开始
$game_screen.start_shake3(x, y,z*2)
# 继续
return true
end
end
[/pre]
应该会和其他类战斗冲突吧。
具体的用法写在脚本注释里面了,这里有范例
|
|