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

Project1

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

[原创发布] 横板格斗战斗脚本使用教学 Part.3(飞行道具、AI篇)

 关闭 [复制链接]

Lv1.梦旅人

沙皇

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

贵宾

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

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

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

x
本帖最后由 后知后觉 于 2009-12-4 21:51 编辑

第一篇教程(人物创建篇)及范例下载:
http://rpg.blue/viewthread.php?tid=117219
第二篇教程(必杀技制作篇):
http://rpg.blue/viewthread.php?tid=117333

今天的教程中,第一部分是补充昨天的必杀技教程。在格斗游戏中,有一种不可忽视的必杀技,那就是“飞行道具”。如果我要做出八神的“暗拂”这个招,该怎么办呢?


在进入脚本制作前,我们先要对图像进行处理,先将上面这幅GIF处理一下,变成下面两个东东:
            
第一个是发招的动作,我们只需要人物的部分,第二个是火花图片,就用来做飞行道具。

接下来,将人物发招的动作赋予编号,比如_161到_175。然后在Battlers文件夹里新建一个“Bullet”文件夹,这个文件夹就专门用来存放飞行道具的图片,所以,把那张火花图片放进去,随便取个名,比如“Fire-01”

然后进入脚本进行设置。在FullCBS part-6 (Skill & Equip)写上:
    when 7 # 百八式暗拂
      @ai_shooting_range_x_max = 600
      @ai_shooting_range_y_max = 80
      @action_duration = 32
      @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]
      @selfanimation_plan[ 1] = 11
      @weapon_move_z_plan = [  1]
      #  4:飞行道具产生
      @battle_bullet_plan[ 6] = Game_BattleBullet.new(2000)

这个必杀技的定义和普通的必杀技有什么不同呢?首先,我们没有规定何时施放特技效果,所以也不用定义收招的时间,这是因为发“暗拂”这个动作本身并不具备杀伤力,能对敌人造成杀伤的是飞行道具。其次,@weapon_move_z_plan = [  1]这句话是用来定义“暗拂”这个招的火花图片的Z坐标的。再其次,@battle_bullet_plan[ 6] = Game_BattleBullet.new(2000)这句话是说在第6帧时产生第2000号飞行道具。

那么,2000号飞行道具从哪里来呢?请大家在part-6这个脚本中搜索“class Game_BattleBullet”,看到“  def database(skill_id)”和“case skill_id”没有?这个case就是用来准备飞行道具的。那么在下面写上:
    when 2000
      @battler_name = "Bullet/Fire-01"
      @gravity_effect = false
      @piercing = false

@gravity_effect 是指这个飞行道具受不受重力影响;@piercing 是指这个飞行道具是否具有贯通作用,即是不是能穿透敌人进行一连串的杀伤。

光写到这里还没有用,我们如何来定义飞行道具的速度呢?我们可以把飞行道具也当作一个特技来写。在class Database_Motion的case skill_id里面写上:
    when 2000 #百八式暗拂
      @action_duration = 32
      @active_move_x_plan = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
      @active_move_y_plan = [0]
      @active_xspeed_plan = [20]
      @attack_rectan_plan = [Rect.new(-24,-48,48,48)]
      @attack_skl_id_plan = [7]

这里面的每一个语句,我上次都已经讲解过,不懂的可以参考第二篇教程。这里要说一下的是为什么没有设置收招的语句,这是因为:1、飞行道具击中敌人后就会自动消失;2、即使没有击中,在过了@action_duration 之后,它也会消失。

以上,就是关于飞行道具的制作方法。接下来讲述如何设置AI。
在战斗中,敌人会采取什么样的行动?如何来规定?最直观的方法,是在“数据库-敌人-行动”里面设置,不用设什么特殊条件,只需选一个特技就好。如果设置了一连串的多个行动,那么默认会以从下到上的顺序采取行动。
如果是我方同伴,采取的行动以“数据库-职业-特技”为准,同样是以从下到上的顺序读取。

接下来是更为复杂的进阶设定。
一、AI如何判断远程必杀技和近身必杀技的区别?
答案是依靠@ai_shooting_range_x_max和@ai_shooting_range_y_max这两个语句。@ai_shooting_range_x_max设置得越大,那么即使离得远,敌人也会使用这个招,否则,敌人会走到你跟前再使用。

二、怎样设置硬直?
首先大家要知道,如果不设置硬直,敌人的发招间隙几乎为0,角色中招之后会几无还手之力。但是,其实脚本中已经定义过所谓的“硬直”。在FullCBS part-7 (AI)的364行左右,有这么一段:
    if @me.ai_wait_level > 0
      if @me.motion.action_duration <= 0
      # AI待ち
        if @wait_duration > 0
          @wait_duration -= 1
          return
        end
      end
    end

意思就是当角色的@me.ai_wait_level 大于0时,角色会采取待机行动,即什么也不做,这段时间就称为“硬直”。而待机的时间,即@wait_duration ,默认是8帧左右,在358行可以改。

所以这样一来,我们在定义角色或敌人属性的时候,就要加上一行@ai_wait_level        = 1(只要大于0就行)。这样,电脑AI就会在每次行动的间隙等上8帧左右的时间。

三、怎样让电脑AI自动防御、奔跑、跳跃等?
奔跑、防御和跳跃,都属于除了必杀技之外的基本动作。在我修改过的脚本中,已经将这些特殊动作编入AI之中。在FullCBS part-7 (AI)的457行左右,是这样写的:
  1.           if @me.motion.now_jumps == 0
  2.             if @me.ai_dash_level > rand(100)
  3.               @me.motion.dashing = true
  4.             else
  5.               @me.motion.dashing = false
  6.             end
  7.             if @me.ai_jump_level > rand(100)
  8.               @me.motion.act_derive = XRXS_BS1::ACT_JUMP
  9.               @me.motion.do_crouch_to_jump
  10.             end
  11.             if @me.ai_defence_level > 0 and 100 * @me.hp / @me.maxhp < @me.ai_defence_level * 25 and diff.abs <= 200 and 50 > rand(100)
  12.               @me.motion.do_act(201)
  13.               #defencive = true
  14.             end
  15.             @me.motion.do_walk(sign)
  16.           else
  17.             if diff.abs <= 400
  18.               @me.motion.do_act(132)
  19.             end  
  20.             @me.motion.do_airwalk(sign)
  21.           end
复制代码
意思是当角色站立着时,@ai_dash_level 有多少,就有百分之多少的概率奔跑,同理@ai_jump_level 是指跳跃的概率,而@ai_defence_level 这个防御的概率,只有1、2、3、4四个档次,档次越高,防御的概念越强。

如果您把上面这段脚本看懂了的话,就会知道下一步该怎么做了。没错,我们得在定义人物或敌人属性的时候,加上这几个变量,@ai_dash_level 和@ai_jump_level 直接设为100之内的数字,这就是百分比概率,而@ai_defence_level 设为4以内的正整数。

以上,通过这三篇教程,我把自己对Full CBS这个脚本的理解与大家分享了。所谓的“使用教学”也到这里结束。希望大家能够更深刻地理解这个脚本,争取自己开发出更丰富多彩的战斗效果!

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

Lv3.寻梦者

无限の阿尔艾克斯

梦石
0
星屑
951
在线时间
304 小时
注册时间
2007-6-24
帖子
2106

贵宾

2
发表于 2009-2-3 23:26:43 | 只看该作者
速度好快,再次顶LZ
兴趣使然的独立开发者
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
87 小时
注册时间
2006-1-3
帖子
227
3
发表于 2009-2-4 20:47:39 | 只看该作者
完结了?支持楼主阿~
可是怎么回帖的人这么少?
难道没人玩过传说系列?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

沙皇

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

贵宾

4
 楼主| 发表于 2009-2-4 21:04:26 | 只看该作者
以下引用swabwind于2009-2-4 12:47:39的发言:

完结了?支持楼主阿~
可是怎么回帖的人这么少?
难道没人玩过传说系列?

大家对这个脚本都不熟悉呀~
----------------------------------------- http://hi.baidu.com/gaadra 为剧情而苦恼中~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-2-4
帖子
7
5
发表于 2009-2-4 21:27:10 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-1-20
帖子
6
6
发表于 2009-2-9 23:19:02 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
245 小时
注册时间
2007-8-6
帖子
329
7
发表于 2009-2-9 23:24:55 | 只看该作者
{/jy}   对热血不感兴趣。。飘过。。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-30
帖子
57
8
发表于 2009-2-12 07:56:06 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

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

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-2-6
帖子
46
10
发表于 2009-3-19 15:38:21 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 08:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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