赞 | 0 |
VIP | 9 |
好人卡 | 61 |
积分 | 1 |
经验 | 20182 |
最后登录 | 2016-6-8 |
在线时间 | 470 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 470 小时
- 注册时间
- 2010-6-25
- 帖子
- 316
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 Sion 于 2013-12-16 23:03 编辑
效果,战斗的时候使用一个特技,我方脚下出现法阵。用同类特技可以替换法阵图案和效果,战斗结束法阵消失(这个随意啦)。人物位置变化的话在最底下。
这个应该还没人发过吧,因为我以前搜的时候没搜到,后来想了好久才懂的。所以肯定我不是百分百原创,看了教程(http://www.66rpg.com/articles/3242)。方法也肯定不是非常好的啦,不过可以凑合着用用。本人脚本无能,高手见谅……
阵法的话我觉得默认的战斗模式就算了……四十五度或者横版可以用用看。以下效果图:
(不要吐槽范例各种简陋。其实范例为了压缩大小,三个阵法用了同一张图片,只是位置和浓淡不同而已。)
于是有心情看下去的话下面是改法。依次是
45度的改法(还是挺详细的啦,伪教程)、
改过以后的脚本、
范例工程、
超级横版的改法(无工程无改过后的脚本)。
位置改动法
45度的改法
两种战斗脚本改法不太一样,首先是45度(脚本来源:http://www.66rpg.com/articles/2862)的改法:
因为45度脚本里面只是改了人物战斗图的位置和血条,和战斗背景那一块没什么关系,所以只要改原来的东西,不用改那个脚本。
首先是:
在这句脚本后面- # 生成战斗背景活动块
- @battleback_sprite = Sprite.new(@viewport1)
复制代码 加一句- @magic_sprite = Sprite.new(@viewport1)
复制代码 因为是魔法阵嘛……所以就叫magic了,叫什么都可以啦,@xxx_sprite = Sprite.new(@viewport1)
然后是这里- @battleback_sprite.dispose
复制代码 后面加一句释放一下。接下来在这句话后面- @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
- @battleback_sprite.src_rect.set(0, 0, 640, 480)
- end
复制代码 加上- case $game_variables[1] #改动
- when 1
- @magic_sprite.bitmap = RPG::Cache.autotile("1") #图片名称
- @magic_sprite.x = 148 #X坐标
- @magic_sprite.y = 180 #Y坐标
- @magic_sprite.opacity = 150 #不透明度
- when 2
- @magic_sprite.bitmap = RPG::Cache.autotile("2")
- @magic_sprite.x = 240
- @magic_sprite.y = 180
- @magic_sprite.opacity = 255
- when 3
- @magic_sprite.bitmap = RPG::Cache.autotile("3")
- @magic_sprite.x = 240
- @magic_sprite.y = 180
- @magic_sprite.opacity = 50
- end
复制代码 $game_variables[1]中的1指的是1号变量, $game_variables[x]就是X号变量了。
原理很简单大家都知道啦,就是变量是1的时候显示1图片,2的时候显示名字是2的图片,当然图片名把引号里面的字改了就行了。
坐标和不透明度都是数字的事大家都懂的啦。至于阵法很多的话,后面复制黏贴按照这个格式 when 4就可以了。
接下来是
这里主要是为了战斗一开始的时候是没有阵法的,也就是变量是0,所以战斗结束后再把变量改成0。
在- $scene = Scene_Gameover.new
复制代码 上面来句就可以了,这样第二次再战斗的时候,一开始是没有法阵的。
如果有阵法持续一辈子之类的,那这里就不用改了。
脚本完毕,于是事件
主要就是布阵的人领悟一个技能,如图。
1、该技能附加一个阵法状态,并把其他阵法状态消去。
这些状态改成“定量为0”,这样用了阵法以后状态的名字就不会显示出来。而且是不能抵抗。
至于状态的其他就看阵法的效果了。如果想要队长和队友有不同效果我目前还没想法。
2、该技能联系一个公共事件,公共事件的内容就是改变变量1的值。
这样就算完成了。最后素材的话随便提一句:
@magic_sprite.bitmap = RPG::Cache.autotile("1")这句脚本的“autotile”说明图片放在“工程\Graphics\Autotiles”
我只是随手选了个文件夹而已,你可以新建文件夹,或者把它改成“battleback”什么的。
图片的素材的话我在6R上看到过一个华丽魔法阵,挺好的,现在我也不太清楚它在哪里= =。
于是就这样了。
改过的脚本
下面是改过的Spriteset_Battle “#改动”标记处
Scene_Battle 1要改的地方太少了我就不放了……- #==============================================================================
- # ■ Spriteset_Battle
- #------------------------------------------------------------------------------
- # 处理战斗画面的活动块的类。本类在 Scene_Battle 类
- # 的内部使用。
- #==============================================================================
- class Spriteset_Battle
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_reader :viewport1 # 敌人方的显示端口
- attr_reader :viewport2 # 角色方的显示端口
- #--------------------------------------------------------------------------
- # ● 初始化变量
- #--------------------------------------------------------------------------
- def initialize
- # 生成显示端口
- @viewport1 = Viewport.new(0, 0, 640, 480) #改动
- @viewport2 = Viewport.new(0, 0, 640, 480)
- @viewport3 = Viewport.new(0, 0, 640, 480)
- @viewport4 = Viewport.new(0, 0, 640, 480)
- @viewport2.z = 101
- @viewport3.z = 200
- @viewport4.z = 5000
- # 生成战斗背景活动块
- @battleback_sprite = Sprite.new(@viewport1)
- @magic_sprite = Sprite.new(@viewport1) #改动
- # 生成敌人活动块
- @enemy_sprites = []
- for enemy in $game_troop.enemies.reverse
- @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
- end
- # 生成敌人活动块
- @actor_sprites = []
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- # 生成天候
- @weather = RPG::Weather.new(@viewport1)
- # 生成图片活动块
- @picture_sprites = []
- for i in 51..100
- @picture_sprites.push(Sprite_Picture.new(@viewport3,
- $game_screen.pictures[i]))
- end
- # 生成计时器块
- @timer_sprite = Sprite_Timer.new
- # 刷新画面
- update
- end
- #--------------------------------------------------------------------------
- # ● 释放
- #--------------------------------------------------------------------------
- def dispose
- # 如果战斗背景位图存在的情况下就释放
- if @battleback_sprite.bitmap != nil
- @battleback_sprite.bitmap.dispose
- end
- # 释放战斗背景活动块
- @battleback_sprite.dispose
- @magic_sprite.dispose #改动
- # 释放敌人活动块、角色活动块
- for sprite in @enemy_sprites + @actor_sprites
- sprite.dispose
- end
- # 释放天候
- @weather.dispose
- # 释放图片活动块
- for sprite in @picture_sprites
- sprite.dispose
- end
- # 释放计时器活动块
- @timer_sprite.dispose
- # 释放显示端口
- @viewport1.dispose
- @viewport2.dispose
- @viewport3.dispose
- @viewport4.dispose
- end
- #--------------------------------------------------------------------------
- # ● 显示效果中判定
- #--------------------------------------------------------------------------
- def effect?
- # 如果是在显示效果中的话就返回 true
- for sprite in @enemy_sprites + @actor_sprites
- return true if sprite.effect?
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- # 刷新角色的活动块 (对应角色的替换)
- @actor_sprites[0].battler = $game_party.actors[0]
- @actor_sprites[1].battler = $game_party.actors[1]
- @actor_sprites[2].battler = $game_party.actors[2]
- @actor_sprites[3].battler = $game_party.actors[3]
- # 战斗背景的文件名与现在情况有差异的情况下
- 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, 480)
- end
- case $game_variables[1] #改动
- when 1
- @magic_sprite.bitmap = RPG::Cache.autotile("1")
- @magic_sprite.x = 148
- @magic_sprite.y = 180
- @magic_sprite.opacity = 150
- when 2
- @magic_sprite.bitmap = RPG::Cache.autotile("1")
- @magic_sprite.x = 240
- @magic_sprite.y = 180
- @magic_sprite.opacity = 255
- when 3
- @magic_sprite.bitmap = RPG::Cache.autotile("1")
- @magic_sprite.x = 240
- @magic_sprite.y = 180
- @magic_sprite.opacity = 50
- end
- # 刷新战斗者的活动块
- for sprite in @enemy_sprites + @actor_sprites
- sprite.update
- end
- # 刷新天气图形
- @weather.type = $game_screen.weather_type
- @weather.max = $game_screen.weather_max
- @weather.update
- # 刷新图片活动块
- for sprite in @picture_sprites
- sprite.update
- end
- # 刷新计时器活动块
- @timer_sprite.update
- # 设置画面的色调与震动位置
- @viewport1.tone = $game_screen.tone
- @viewport1.ox = $game_screen.shake
- # 设置画面的闪烁色
- @viewport4.color = $game_screen.flash_color
- # 刷新显示端口
- @viewport1.update
- @viewport2.update
- @viewport4.update
- end
- end
复制代码 以下范例,不带a的是纯加图片。
带a的是顺便发动阵法会改X坐标。
人物位置改法详见最下面。
Project8.rar
(266.24 KB, 下载次数: 164)
Project8a.rar
(266.29 KB, 下载次数: 143)
最后是超级横版的改法的说明的超级简略版
因为超级横版里面改过: Spriteset_Battle,
所以原有的“ Spriteset_Battle”改完,在横版脚本里面涉及“ Spriteset_Battle“也要改。
(或者说,有些地方超级横版动过了,改原来的已经没用了。)
位置的改法
关于人物位置变化45度战斗脚本还是比较容易实现的
当中有这样的语句- case self.index
- when 0
- return 350
- when 1
- return 430
- when 2
- return 510
- when 3
- return 580
- else
- return 600
- end
复制代码 这个是人物X坐标,在外面套个CASE语句就可以了。- case $game_variables[1] #改动
- when 0
- case self.index
- when 0
- return 350
- when 1
- return 430
- when 2
- return 510
- when 3
- return 580
- else
- return 600
- end
- when 1
- case self.index
- when 0
- return 200
- when 1
- return 300
- when 2
- return 400
- when 3
- return 500
- else
- return 600
- end
- when 2
- case self.index
- when 0
- return 400
- when 1
- return 400
- when 2
- return 400
- when 3
- return 400
- else
- return 600
- end
- when 3
- case self.index
- when 0
- return 200
- when 1
- return 400
- when 2
- return 200
- when 3
- return 400
- else
- return 600
- end
- end
复制代码 Y可以用同样的原理改。至于人物的位置就是数字慢慢调整的事情啦。
END……勿拍砖。
|
评分
-
查看全部评分
|