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

Project1

 找回密码
 注册会员
搜索
查看: 11347|回复: 24
打印 上一主题 下一主题

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

 关闭 [复制链接]

Lv1.梦旅人

沙皇

梦石
0
星屑
50
在线时间
30 小时
注册时间
2006-7-6
帖子
304

贵宾

跳转到指定楼层
1
发表于 2009-2-2 22:05:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
第一篇教程(人物创建篇)及范例下载:
http://rpg.blue/viewthread.php?tid=117219
第三篇教程(飞行道具、AI篇):
http://rpg.blue/viewthread.php?tid=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的距离。这样一来,在游戏中不就有了类似与跳跃的效果了吗?同样的,这里的数字也可以设为负数,不用担心,人物不会因为这样就钻到地下去了哦{/tp}设为负数可以用来制作在空中急速下降的效果。

脚本中定义了@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的设置。

欢迎拍砖{/hx}
----------------------------------------- http://hi.baidu.com/gaadra 为剧情而苦恼中~

Lv2.观梦者

梦石
0
星屑
250
在线时间
28 小时
注册时间
2009-7-30
帖子
270
25
发表于 2009-8-15 09:31:43 | 只看该作者
FullCBS part-6 (Skill & Equip)在哪啊,找不到
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
49 小时
注册时间
2008-2-26
帖子
367
24
发表于 2009-4-11 00:38:40 | 只看该作者
这脚本好卡呀 希望改良到128不卡就好了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
帖子
643
23
发表于 2009-4-10 04:23:02 | 只看该作者
不错,不过就是麻烦了点,我还是用ActionGameMaker吧
最近在研究XAS
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
310
在线时间
1 小时
注册时间
2009-4-10
帖子
3
22
发表于 2009-4-10 04:02:15 | 只看该作者
          这位兄台..
         能加我QQ嘛?446740101
        我有好多问题想请教你?{/cy}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
3 小时
注册时间
2009-3-5
帖子
25
21
发表于 2009-3-16 18:11:53 | 只看该作者
今天才看到~
谢谢我爱龙大大,问题已经全部解决了,战斗系统已经完成~

话说有这样的战斗系统太帅了!

谢谢
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
20
发表于 2009-3-16 00:00:22 | 只看该作者
发布完毕
http://rpg.blue/web/htm/news1245.htm
vip += 2
回复 支持 反对

使用道具 举报

Lv1.梦旅人

沙皇

梦石
0
星屑
50
在线时间
30 小时
注册时间
2006-7-6
帖子
304

贵宾

19
 楼主| 发表于 2009-3-13 23:07:48 | 只看该作者
@me.voice.play(XRXS_BS1::VOICE_ID_DAMAGE)这个受伤的声音放在Audio\SE里面,如果你的人物名字叫IORI,那么这个受伤的声音就命名为IORI_damage.wav,同样的,还有IORI_attack,IORI_dead,IORI_win等,分别对应不同状况时的声音。
@me.voice.play和@self.voice.play其实没什么区别,看me和self怎么定义的而已,如果之前定义为battler,就是敌我双方,如果定义为@handle_battler,就是自己。但是不能随便改,如果改了就得从最开始定义的地方也一起改。其实在这个脚本里,任何一个敌人都是从我方战斗人物改过来的,也就是说先做好一个我方的战斗人物,然后再把他添加到敌人的数据库里,所以声音什么的敌我双方用的都是同一个文件。
----------------------------------------- http://hi.baidu.com/gaadra 为剧情而苦恼中~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
3 小时
注册时间
2009-3-5
帖子
25
18
发表于 2009-3-12 17:46:22 | 只看该作者
lz今天没上线~没关系,小弟一直等着你~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
3 小时
注册时间
2009-3-5
帖子
25
17
发表于 2009-3-11 11:58:42 | 只看该作者
谢谢lz!吹飞的问题解决了

声音的问题也差不多了,就差一点点....又要麻烦你了

@me.voice.play(XRXS_BS1::VOICE_ID_DAMAGE)

这句,应该是受伤时我方人物的声音,这个的对应文件应该放在什么地方?命名应该是什么呀?

虽然直接写Audio.se.play也行,但是敌人被攻击和我方被攻击出来的声音就全都一样了....

又想起来一点,一起问了吧~

就是@me.voice.play和@self.voice.play有什么区别呀?哪个是敌人的声音哪个是我方声音呢?

真的就差这一点了,系统就可以完成了!激动中~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-16 07:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表