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

Project1

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

[原创发布] 【教程】让汝的游戏多一个属性(类似于HP、SP)

[复制链接]

Lv1.梦旅人

小小的百鬼夜行<

梦石
0
星屑
54
在线时间
579 小时
注册时间
2010-7-29
帖子
2682

贵宾

跳转到指定楼层
1
发表于 2010-10-10 10:49:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 退屈£无聊 于 2010-10-24 14:39 编辑

本来想把这功能放的将要发布的游戏当中的说- - 也不知道是否曾经有人发布过这类的教程。
我还是厚颜无耻地发表一下。
这有什么用处呢。?主要是能为你的游戏增加一个除了HPSP以外的另外一个P。(这里暂时盗用TP)
方便那些想做点什么的人 - -,本教程纯属渣物,有一定脚本功底的人慎入。
通过这个教程可以任由汝增加多少P哦。从AP-ZP都可以 ( - -!
教程前言:
在更改脚本之前要先备份哦!小心餐具。
一、增加TP的变量
我们都知道,游戏中HPMP相关的变量基本上是HP、SP或者MAXHP、MAXSP,所以要填加一个TP,也必须添上与其相同的变量。
控制战斗者的部分主要是Game_Battler,于是大家可以打开脚本编辑器找到Game_Battler 1,在一开始的变量设置里增加一个变量。
  1. attr_reader   :tp            #TP
复制代码
再在初始化对象里增加几行字
  1. @tp = 0
  2. @maxtp_plus = 0
复制代码
由于在原脚本中本就定义了HP和MAXTP_PLUS,我们也要照做。
二、仿照HP、MP设置设定TP的最大值及其变动
继续翻啊翻,我们可以翻到这么一处脚本
  1. #--------------------------------------------------------------------------
  2.   # ● 获取 MaxSP
  3.   #--------------------------------------------------------------------------
复制代码
把其复制一遍,或手动敲入,改成
  1. #--------------------------------------------------------------------------
  2.   # ● 获取 MaxTP
  3.   #--------------------------------------------------------------------------
  4.   def maxtp
  5.     n = [[base_maxtp + @maxtp_plus, 0].max, 9999].min
  6.     n = [[Integer(n), 0].max, 9999].min
  7.     return n
  8.   end
复制代码
类似的,找到设置MAXSP的地方,照样的。。。
  1. #--------------------------------------------------------------------------
  2.   # ● 设置 MaxTP
  3.   #     maxtp : 新的 MaxTP
  4.   #--------------------------------------------------------------------------
  5.   def maxtp=(maxtp)
  6.     @maxtp_plus += maxtp - self.maxtp
  7.     @maxtp_plus = [[@maxtp_plus, -9999].max, 9999].min
  8.     @tp = [@tp, self.maxtp].min
  9.   end
复制代码
再增加控制TP改变的地方。
  1. #--------------------------------------------------------------------------
  2.   # ● 更改 TP
  3.   #     tp : 新的 TP
  4.   #--------------------------------------------------------------------------
  5.   def tp=(tp)
  6.     @tp = [[tp, maxtp].min, 0].max
  7.   end
复制代码
如果汝还需要在全恢复时增加TP,在全恢复(recover_all)里增加这么一行
  1. @tp = maxtp
复制代码
设置到这里还不够,回到脚本选择框。
找到Game_Actor
在设置中跟 HP、SP一样增加
  1. @tp = maxtp
复制代码
  1. @maxtp_plus = 0
复制代码
找到
  1. #--------------------------------------------------------------------------
  2.   # ● 获取基本 MaxSP
  3.   #--------------------------------------------------------------------------
  4.   def base_maxsp
  5.     return $data_actors[@actor_id].parameters[1, @level]
  6.   end
复制代码
这段有什么用呢?这段是获取当前角色最大SP值用的。如果这里设置错了那么整个系统就全部报废了哦。
跟上面一样,复制一遍再把所有的SP改为TP,但是这里要注意了,默认的档案里是没有TP的曲线的。我们需要自己动手增加一条直线(只能是直线- -)
  1. $data_actors[@actor_id].parameters[1, @level]
复制代码
改为
  1. @level * 40 + 20
  2. # 40为你每级增加的数,20为0级的初始值
  3. #照此,1级为60,2级为100
复制代码
当然了,你也可以把它设置的不同一点。比如说,根据职业的不同- -
  1. case @class_id
  2. when 1
  3. return @level * 50 + 1
  4. when 2
  5. when 3
  6. when 4
  7. ...
  8. end
复制代码
这段怎么用呢?case 比较直白的说是获取某个变量的值,在..的情况下,执行什么脚本
例如,在职业为1的情况下,角色的TP初始值为1,每级增加50哦。
在改变等级时,也要改变TP的大小- -
找到
  1. #--------------------------------------------------------------------------
  2.   # ● 更改 EXP
  3.   #     exp : 新的 EXP
  4.   #--------------------------------------------------------------------------
  5.   def exp=(exp)
复制代码
,在END前填加
  1. @tp = [@tp, self.maxtp].min
复制代码
这样就在游戏里彻底增加了这么一个变量。
三、TP的显示
太简单了,仿照Window_Base 里的显示HP、MP,自己敲进去这么一段
  1. #--------------------------------------------------------------------------
  2.   #     actor : 角色
  3.   #     x     : 描画目标 X 坐标
  4.   #     y     : 描画目标 Y 坐标
  5.   #     width : 描画目标的宽
  6.   #--------------------------------------------------------------------------
  7.   def draw_actor_tp(actor, x, y, width = 144)
  8.     # 描绘字符串 "TP"
  9.     self.contents.font.color = system_color
  10.     self.contents.draw_text(x, y, 32, 32, "TP")
  11.     # 计算描绘 MaxTP 所需的空间
  12.     if width - 32 >= 108
  13.       sp_x = x + width - 108
  14.       flag = true
  15.     elsif width - 32 >= 48
  16.       sp_x = x + width - 48
  17.       flag = false
  18.     end
  19.     # 描绘 TP
  20.     self.contents.font.color = actor.tp == 0 ? knockout_color :
  21.       actor.tp <= actor.maxtp / 4 ? crisis_color : normal_color
  22.     self.contents.draw_text(sp_x, y, 48, 32, actor.tp.to_s, 2)
  23.     # 描绘 MaxTP
  24.     if flag
  25.       self.contents.font.color = normal_color
  26.       self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
  27.       self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxtp.to_s)
  28.     end
  29.   end
复制代码
在所有draw_acotr_hp后都增加draw_actor_tp,注意x\y的值哦。
四、使用TP
变量做出来了不用可不行。但默认的游戏编辑器没有办法执行啊。?怎么办呢。?
比方说我在用第一个技能(治疗)时,要求必须有50点体力。
找到Game_Actor的可以使用特技判定,增加
  1. if $data_skills[skill_id].id == 1
  2.       return false if @tp < 50
  3.     end
复制代码
这样就能保证在TP低于50时不能使用该技能。
如果要在使用后减少体力,则  = =
找到Scene_Battle 4 中的● 生成特技行动结果
在扣除SP后增加
  1. if @skill.id == 1
  2.       @active_battler.tp -= 50
  3.     end
复制代码
这样就能在使用时扣除50点体力了。
(喂,你可别告诉我只能在ID为1情况下才能用哦。)
最终效果图


物品同理。光耗费体力不恢复也是不行的。至于这个……基本上把skill改为item就大功告成了- -

编辑哟==给伸手党的福音==以下是工程
新的属性范例.rar (285.49 KB, 下载次数: 1637)
但还是鼓励各位自己动手试试。
=================编辑一之敌人TP的设定====================
我到现在还没想好敌人弄那么复杂干什么。
不过既然有人问了,那我就告诉你好了。
敌人的设定是在Game_Enemy中的。
  1. #--------------------------------------------------------------------------
  2.   # ● 获取基本 MaxSP
  3.   #--------------------------------------------------------------------------
  4.   def base_maxsp
  5.     return $data_enemies[@enemy_id].maxsp
  6.   end
复制代码
同样的,我们复制一遍并作相应改动。
但是呢,敌人没有等级这一个属性。。
所以你也可以直接把SP搬过来用。
或者对SPHP作加法减法乘法除法随汝的便了。
同样的,按照技能的方法设定就可以了。

点评

怎么回复没懂,求指点  发表于 2013-5-26 10:19
。。。随你自己编写。  发表于 2010-10-17 13:20
不错。对了,TP是干什么吃的?VIP+66  发表于 2010-10-17 13:12
赞一个!VIP + NaN  发表于 2010-10-10 14:31

评分

参与人数 4星屑 +802 收起 理由
clande + 40 塞糖 几角钱的糖,不过是上限哦.
奶油小胖 + 2 找到了仙剑四的感觉…………
仲秋启明 + 60 终于又找到了
后知后觉 + 700 很不错的教程.鼓励III

查看全部评分

某只PHP/HTML小白鼠→退屈の间


Cause I knew you were trouble when you walked in
So shame is on me now
I flow me to place i ve never been
till you put me down oh
Now Im lying on the cold hard ground

Lv3.寻梦者

梦石
0
星屑
1316
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
2
发表于 2010-10-10 11:10:06 | 只看该作者
写的真的很不错!
鼓励 之
经验+9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

醉啸 长风万里

梦石
0
星屑
6057
在线时间
6586 小时
注册时间
2007-12-16
帖子
4501

贵宾

3
发表于 2010-10-10 13:28:30 | 只看该作者
来研究一下,一直想要做一个这样的效果,一直没有动手研究

还在龟速填坑中
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3263
在线时间
3616 小时
注册时间
2006-9-6
帖子
37399

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

4
发表于 2010-10-10 15:11:57 | 只看该作者
写的还是挺详细的……
不过如果物品也用判断技能那个办法做,不如直接带个公共事件加变量 = =
回复 支持 反对

使用道具 举报

Lv1.梦旅人

小小的百鬼夜行<

梦石
0
星屑
54
在线时间
579 小时
注册时间
2010-7-29
帖子
2682

贵宾

5
 楼主| 发表于 2010-10-10 15:35:21 | 只看该作者
也是哈= =
不过如果是要用公共事件的话。。。。。
某只PHP/HTML小白鼠→退屈の间


Cause I knew you were trouble when you walked in
So shame is on me now
I flow me to place i ve never been
till you put me down oh
Now Im lying on the cold hard ground
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
87
在线时间
303 小时
注册时间
2006-7-12
帖子
958
6
发表于 2010-10-10 16:54:21 | 只看该作者
Window_Skill也可以适当改一下哈,技能不同显示不同的skill.sp_cost或skill.tp_cost
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2009-8-30
帖子
465
7
发表于 2010-10-10 17:06:58 | 只看该作者
喵的
我还以为就我做出来了
算了,反正我已经完成了一套包括回复之类的东西,可怜了我的能力上升功能啊
回复 支持 反对

使用道具 举报

Lv1.梦旅人

小小的百鬼夜行<

梦石
0
星屑
54
在线时间
579 小时
注册时间
2010-7-29
帖子
2682

贵宾

8
 楼主| 发表于 2010-10-13 17:21:41 | 只看该作者
回复 嫁衣 的帖子
一般来说..这方法不可行吧- -?
毕竟没有数据库里的设定

   
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
381
在线时间
1398 小时
注册时间
2010-9-23
帖子
557
9
发表于 2010-10-20 19:30:36 | 只看该作者
谢谢,终于找到了,个人感觉蛮难。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

小小的百鬼夜行<

梦石
0
星屑
54
在线时间
579 小时
注册时间
2010-7-29
帖子
2682

贵宾

10
 楼主| 发表于 2010-10-21 18:18:41 | 只看该作者
补充说明:

如果....如果你认为特技界面只显示法术消耗不美观的话,可以在显示消耗时增加判断.
然后再显示你想要的特定数字.

呵呵,个人感觉蛮麻烦的. - -
某只PHP/HTML小白鼠→退屈の间


Cause I knew you were trouble when you walked in
So shame is on me now
I flow me to place i ve never been
till you put me down oh
Now Im lying on the cold hard ground
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-2 18:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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