设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
Project1 查看内容

横版格斗战斗脚本使用教学 Part.2(必杀技制作篇)

2009-3-15 15:49| 发布者: ONEWateR| 查看: 5028| 评论: 0|原作者: 我爱龙|来自: 点此进入发布帖

摘要: 第一篇教程(人物创建篇)及范例下载:http://bbs.66rpg.com/forumTopicRead.asp?id=117219第三篇教程(飞行道具、AI篇):http://bbs.66rpg.com/forumTopicRead.asp?id=117455看过上面的教程,相信大家已经能做出一个
第一篇教程(人物创建篇)及范例下载:
http://bbs.66rpg.com/forumTopicRead.asp?id=117219
第三篇教程(飞行道具、AI篇):
http://bbs.66rpg.com/forumTopicRead.asp?id=117455

看过上面的教程,相信大家已经能做出一个人物的基本动作了。那么,今天就来教大家怎样制作必杀技。
还是以红丸为例,在上一篇教程中,我们已经制作了红丸的各种基本动作,包括普通攻击技能。那么,如果我要制作红丸的必杀技“雷刃拳”,就像下面这样:

该怎么做呢?

方法还是一样,用gif movie gear打开这幅gif,另存为一张张png,因为一共有22帧,所以编号是从BENIMARU_161到BENIMARU_182

将这些图片也都放到Battlers文件夹里。

再来就是进入游戏工程进行设置。先在游戏的数据库中的“特技”一栏里设置,比如将1号特技设置为“雷刃拳”,消费的SP、威力等相关属性都自己设好。

接下来就是重点。打开脚本编辑器,在FullCBS part-6 (Skill & Equip)中找到127行左右的case skill_id,然后将when 1的内容改成如下:
   when 1 # 雷刃拳
     @ai_shooting_range_x_max = 100
     @ai_shooting_range_y_max = 350
     @action_duration = 44
     @attack_motion_plan = [161,nil,162,nil,163,nil,164,nil,165,nil,166,nil,167,nil,168,nil,169,nil,170,nil,171,nil,172,nil,173,nil,174,nil,175,nil,176,nil,177,nil,178,nil,179,nil,180,nil,181,nil,182,nil]
     @selfanimation_plan[ 1] = 1      
     @attack_skl_id_plan[ 15] = 1
     @attack_rectan_plan[ 15] = Rect.new(-1,-156,96,66)
     @attack_skl_id_plan[ 33] =   0

下面我来逐个说明。
@ai_shooting_range_x_max 是指电脑AI自动判断的出招距离。=100也就是说当两人的横向距离小于等于100的时候,电脑就会自动出这招“雷刃拳”。同理,@ai_shooting_range_y_max 是指电脑自动判断的纵向距离。
@action_duration 是指这个招式的持续时间。本来有22张图片,我们让每张图片持续2帧的时间,否则动作会变得太快,反而不太正常。所以这招的持续时间就是44帧(单位姑且就叫做“帧”吧)
@attack_motion_plan 就是施放这个动作的编号,把161-182号写在后面,它就会按顺序播放。要注意每个编号中间要空一个nil,这就是每张图片持续2帧时间的意思。
@selfanimation_plan[ 1] = 1是指在第一帧的时候,播放1号动画。方括号里的1是指第一帧,后面的1是指1号动画。这个的作用是在出招时播放一些音效,比如人物的叫喊“喝啊哈”之类的。注意,不能在“特技”的使用方动画里设置,那是无效的。
@attack_skl_id_plan[ 15] = 1是指从第15帧开始,实施1号特技的效果。这是很重要的一条,就是说对方在第几帧的时候中招。如果不设置,你会看到当红丸刚把手举起来,还没打出去的时候,对方已经中招了。
@attack_rectan_plan[ 15] = Rect.new(-1,-156,96,66)这是指第15帧施放攻击时的判定范围,和人物的坐标大小的设置方法一模一样。在脚本的part-8里改一改,也可以看到画出来的攻击判定的矩形框,而这框是红色的。
@attack_skl_id_plan[ 33] =   0是指在第33帧的时候,必杀技的实施效果结束,或曰“收招”。这样,在第15帧到第33帧之间都是有效的攻击时间段。即使敌人在第15帧时没有中招,只要他在第33帧之前接触到你的攻击判定范围,也会中招。注意每个招式都要设置收招的时间。

这样一来,一个简单的必杀技“雷刃拳”就制作完成了。红丸这个人物的职业如果是战士,那就让战士职业学会“雷刃拳”这个特技,然后在战斗中装备起来使用看看吧!

如果学会了上面的制作方法,我们就可以向更多元化的效果发起挑战了。我们来看下面两个必杀技:


第一种必杀技,我们称之为“突进技”,第二种称为“对空技”。他们的特点是施放的时候,人物并不是站着不动的,而是前冲或是跳跃。那么这种技能该如何制作呢?

其实也很简单,比如第一种“突进技”。我们在制作的时候大体和制作“雷刃拳”相同,只不过在脚本中定义招式属性的时候,要多加一行内容。比如我在制作这个“冲刺拳”的时候,就是这样写的:
   when 49 # 冲刺拳
     @ai_shooting_range_x_max = 500
     @ai_shooting_range_y_max = 350
     @action_duration = 46
     @active_xspeed_plan[ 3] = 20
     @attack_motion_plan = [211,nil,212,nil,213,nil,214,nil,215,nil,216,nil,217,nil,218,nil,219,nil,220,nil,221,nil,222,nil,223,nil,224,nil,225,nil,226,nil,227,nil,228,nil,229,nil,230,nil,231,nil,232,nil,233,nil]
     @selfanimation_plan[ 1] = 38      
     @attack_skl_id_plan[ 13] = 49
     @attack_rectan_plan[ 13] = Rect.new(  0,-200,86,120)
     @attack_skl_id_plan[25] =   0

您发现了吧?多了一行@active_xspeed_plan[ 3] = 20。这句话的意思是在第3帧的时候,赋予人物+20的横向速度。那么,同样也可以将这速度设为负数,这样一来,人物出招时就是向后退。

您也许会问,那么制作人物跳跃的技能,是不是加一行@active_yspeed_plan就可以了呢?很可惜,原脚本中并没有定义过这个变量,如果我们要自己定义的话要修改很多地方,太麻烦。其实有这样一种方法,用这个语句@active_move_y_plan = [nil,nil,20,nil,20,nil,20,nil,10,nil]
这句话的意思是说,在第3帧、第5帧、第7帧和第9帧时分别让人物在y方向上上升20、20、20和10的距离。这样一来,在游戏中不就有了类似与跳跃的效果了吗?同样的,这里的数字也可以设为负数,不用担心,人物不会因为这样就钻到地下去了哦设为负数可以用来制作在空中急速下降的效果。

脚本中定义了@active_move_y_plan 这个变量,也同样定义了@active_move_x_plan ,他也可以用来制作人物的横向移动。那么@active_move_x_plan 和@active_xspeed_plan有什么区别呢?前者是用来规定人物移动的方向和距离,而后者是用来规定人物的移动方向和速度。您如果有兴趣的话,可以尝试看看,原版脚本和我修改的脚本有什么不同。您会发现,原版脚本中,战斗时人物与敌人接触后可以径直穿过对方,而我修改后的版本,人物与敌人相遇就像撞墙一样,无法穿过对方。而事实上一般的格斗游戏,也是不允许人物之间相互穿透的。所以我说我修改的版本,更多的是模仿格斗游戏的风格。

而我修改的方法,就是降低人物移动的速度。原理是,当人物与敌人的横向距离小于一定值时,双方的速度就逐步降低,到双方相遇时,速度几乎为0,所以无法穿过对方。所以这样一来,用@active_xspeed_plan定义的人物移动,也是无法穿越对方的。而@active_move_x_plan 由于是直接规定了人物的位移,所以可以穿过对方的身体。在定义必杀技时,大家可以根据制作需要选择。

最后,是关于必杀技的施放效果。在格斗游戏中,有很多招式,中招的人会被弹飞几米远。那么,怎样在游戏中制作出这种效果,以体现出招式的威力呢?在脚本FullCBS part-2的430行左右,有一句blow    = skill.power,blow就是吹飞值,我把他直接映射为招式的威力。吹飞值有什么用呢?在这个脚本的477行左右,找到if blow >= 20,我把他定义为当招式的威力大于等于20时,中招角色就会被吹飞,而吹飞=true的话,中招的人就会倒地。

再来是490多行的self.now_x_speed = skill.eva_f * direction和self.now_y_speed = skill.variance 意思就是被吹飞的x速度就是招式的“回避 F”,而被吹飞的y速度就是招式的“分散度”。一般将回避或分散度设在12以上,就会看到中招角色被弹飞蛮远了。

如果理解了上述定义规则,您也可以自己更改吹飞值、吹飞条件和速度定义等。

对必杀技制作还有什么不懂的可以跟帖留言,下个教程准备讲述敌人AI的设置。

欢迎拍砖
8

鲜花

刚表态过的朋友 (8 人)

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-26 00:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部