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

Project1

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

[推荐问答] 请问一个RGSS的问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3925
在线时间
254 小时
注册时间
2013-10-13
帖子
790
跳转到指定楼层
1
发表于 2014-11-9 11:06:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
3,
  def draw_actor_graphic(actor, x, y)
    bitmap = RPG::Cache.character(actor.character_name,     actor.character_hue)
    src_rect = Rect.new(0, 0, 32, 48)
    self.contents.blt(x, y , bitmap, src_rect)
  end
a,文件名 的各种表示法:有直接用""的,也有用""+参数.文件名,那么这个语句actor.character_name的表达法合理吗?character_name是哪个类的方法?
b,参数actor是局部变量,不是需要被赋值后才能用吗?我搜了全局了,在 窗口菜单类 里面有,可是里面的actor 似乎 也未被赋值的。

点评

楼主,8楼增加了些东西,可以看看。  发表于 2014-11-9 20:49

评分

参与人数 1星屑 +100 收起 理由
RyanBern + 100 推荐问答

查看全部评分

Lv5.捕梦者

梦石
0
星屑
31927
在线时间
5080 小时
注册时间
2012-11-19
帖子
4877

开拓者

2
发表于 2014-11-9 11:20:24 | 只看该作者
本帖最后由 芯☆淡茹水 于 2014-11-9 11:24 编辑

1: actor 是传递过来的参数,比如在 Window_MenuStatus 里的一句:
  1. actor = $game_party.actors[i]
  2. draw_actor_graphic(actor, x - 40, y + 80)
复制代码
这个 actor 也就是 Game_Actor ,而 Game_Actor 里:attr_reader   :character_name 。
所以这个 character_name 就是这么来的。
2:同上面所说, actor 是传递过来的参数,不需要赋值。只需在使用这个方法的时候赋值。也可以预先设定某个参数的
缺省值。

点评

我看懂了第一个问题了,可是对于 在使用方法的时候赋值 还是不明白的。 2个语句连接起来就表达出 文件名 也无法理解。谢谢了!  发表于 2014-11-9 11:24
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
31927
在线时间
5080 小时
注册时间
2012-11-19
帖子
4877

开拓者

3
发表于 2014-11-9 11:39:13 | 只看该作者
  1. # 比如预先定义一个 数值计算 的方法 :numerical ,而这个方法需要 2 个
  2. # 数值相加。这 2 个数值在方法参数里可以随意用变量名表示,这里为:var1 和 var2
  3. def numerical(var1, var2)
  4.   p var1 + var2
  5. end
  6. # 括号里的 var1 和 var2 分别代表使用这个方法是传递过来的2个数值参数。
  7. # 在运用这个方法时:
  8. numerical(2, 3) # 显示是:5
  9. # 所以不用纠结于方法参数里的变量名,也可以把 actor 改为 a ,比如下面这样
  10. #也行:
  11. def draw_actor_graphic(a, x, y)
  12.     bitmap = RPG::Cache.character(a.character_name,     a.character_hue)
  13.     src_rect = Rect.new(0, 0, 32, 48)
  14.     self.contents.blt(x, y , bitmap, src_rect)
  15.   end
  16. # 只要在运用这个方法时,传递过来的参数无误就行。
复制代码

评分

参与人数 1星屑 +200 收起 理由
RyanBern + 200 精品文章

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9497
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

4
发表于 2014-11-9 12:19:56 | 只看该作者
补充芯大的,那个+不是文件名特有的表示法,而是字符串的一个方法self + other,表示把两个字符串连起来。
文件名的话,因为是RPG::Cache.character方法,所以不用输入完整的路径+文件名,只需要图片的名字就可以了。
不过Bitmap.new("filename")这里就要输入路径+文件名。
第二个问题是你没搞清参数和局部变量的区别,形式参数在函数定义中可以放心使用,因为它的值是由实际参数确定的,只要你的实际参数是正确的,那么就没什么问题(所以可以理解为这个变量在方法刚开始执行的时候就有值了,值为你传递的实际参数)。

点评

建议加加精,理由:内容谈到点上,而且基本内涵俱全  发表于 2014-11-9 21:12
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3925
在线时间
254 小时
注册时间
2013-10-13
帖子
790
5
 楼主| 发表于 2014-11-9 19:21:15 | 只看该作者
本帖最后由 RyanBern 于 2014-11-9 19:57 编辑

继续我的问题(回去看了下,还有疑惑,所以继续 下来了):
1,Window_MenuStatus类里面有:
RUBY 代码复制
  1. actor = $game_party.actors[i]
  2. draw_actor_graphic(actor, x, y)
  3. 我就去查Game_Party类了,结果查出
  4. attr_reader   :actors                   # 角色
  5. def initialize
  6.     # 建立角色序列
  7.     @actors = []
  8. end

问题是:我发现$game_party.actors后面带了[ ],actors是属性@actors,那么[ ]不知道什么意思?   
2,Game_Actor类里面有:
attr_reader   :character_name           # 角色 文件名
问题:RPG::Cache.character(aaaactor.character_name,     aaaactor.character_hue)参数aaaactor是传递来的量,是属于Game_Party类的,怎么可以调用起Game_Actor类的方法来呢?

@RyanBern,@芯☆淡茹水,@恐惧剑仞

点评

@RyanBern,@芯☆淡茹水,@恐惧剑仞  发表于 2014-11-9 19:23
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2207
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

6
发表于 2014-11-9 19:40:15 | 只看该作者
本帖最后由 taroxd 于 2014-11-9 19:42 编辑
kvkv97 发表于 2014-11-9 19:21
继续我的问题(回去看了下,还有疑惑,所以继续 下来了):
1,Window_MenuStatus类里面有:
actor = $gam ...


$game_party 才是 Game_Party 类的。

你想知道 actor 是什么类的实例的话,可以执行 p actor.class 查看。

另外,好的命名习惯很重要。比如说,看到 actor、actors 的变量名,我就知道变量里是什么类的实例了。

点评

谢谢了,但我说的两个问题是一楼问题的追加  发表于 2014-11-9 20:03
你误解我的问题了,我说的是参数,这个量actor是$Game_Party类的数据,被引用到 Window_MenuStatus 类来了,所以才追查下去,发现无根,就晕了  发表于 2014-11-9 20:02

评分

参与人数 1星屑 +200 收起 理由
RyanBern + 200 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
31927
在线时间
5080 小时
注册时间
2012-11-19
帖子
4877

开拓者

7
发表于 2014-11-9 20:10:35 | 只看该作者
本帖最后由 芯☆淡茹水 于 2014-11-9 20:17 编辑

Game_Party 的 actors 是包含游戏队伍所有角色的数组,里面的每个单元都是一个 Game_Actor 。
而 [] 是调用与索引相对应的 actors 里的某个角色:Game_Actor

点评

我明天弄个来给你们看看,你们居然怎么好学啊!  发表于 2014-11-10 21:10
1+[i] 233333 这是指针吗  发表于 2014-11-10 21:06
学这个后就学Ruby,学Ruby后就学C,学C后就学计算机原理,学计算机机原理后学QB,学QB后学汇编,估计时间要花2年  发表于 2014-11-10 20:50
[1+[i]] 是要汇编的节奏?  发表于 2014-11-10 12:43
↓ 那这种写法 $actor[1+[i]] 可能就是俺没有学到过的,看谁知道的可以帮你讲解一下。  发表于 2014-11-9 20:48
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

匿·蹤

梦石
0
星屑
65
在线时间
99 小时
注册时间
2006-3-19
帖子
456
8
发表于 2014-11-9 20:18:01 | 只看该作者
本帖最后由 OCTSJimmy 于 2014-11-9 20:48 编辑
kvkv97 发表于 2014-11-9 19:21
继续我的问题(回去看了下,还有疑惑,所以继续 下来了):
1,Window_MenuStatus类里面有:
actor = $gam ...


首先问题1:@actors = [] 中 []表示数组。
数组举例:
比如现在我有三个数字要放在变量中,可以a=1,b=2,c=3但是使用的时候,就只能使用 x=a, x=b, x=c这样子,可万一在循环中就完蛋了,例如:
for i in 1..3
   p a
   p b
   p c
end
可这样子,循环的时候a、b、c全都被打印了三遍。
假如换成数组的话:
RUBY 代码复制
  1. a[0] = 1
  2. a[1] = 2
  3. a[2] = 3
  4. for i in 0..2
  5.    p a[i]
  6. end

这样子就会a[0]至a[2]每个数字各打印一遍了。
问题二:
楼主或许没有太理解方法/函数/过程(它们指的是一个东东,只是叫法不同)的概念。
函数的定义:

def 函数名称([传入参数1变量名], [传入参数2变量名], [传入参数3变量名]...)
   #代码段
end
例如:
def a(canshu1)
  p canshu1#这里就用到了传入的参数1
end

还是建议楼主多看F1,不行就照抄,觉得该抄什么就抄,抄下来不合用就自己改,改完了就直接运行,挂了就知道没改对,去找找有没有类似的代码片段,与要改的这节有什么不同,不同的地方差不多就是可以改的,继续试。




为了避免连帖,我就在这里编辑吧。

在F1中有说明各个系统自带类的来龙去脉的。
(以下脱离RM环境,纯解释类的概念)

另外Game_Party可以认为是一个队伍类,那么可以这样思考:
队伍类中需要包含什么?
1、队员,队员由角色组成,因此每位队员就是一个Game_Actor
2、队伍需要在地图的任意一个点显示,因此哪个点就很关键了,这就是坐标
3、队伍有一个包裹,用来装每个角色用不到的装备,以及大家都能使用的物品、药剂等
4、队伍里有一个钱袋,放着大家所有的钱钱
5、……等等等等……
如此封装后,就成了队伍类,需要队伍中的数据,就可以通过队伍类中的方法或成员获取到了。
类中可以引用其他类,作为成员封装进该类中。
比如角色,它也是一个类,那么怎样描述一位角色呢?
1、角色有一个炫酷的外形
2、角色有生命值、魔法值、经验值
3、角色有各个部位的装备
4、角色有它的成名绝技,各种技能
5、角色有它的攻击力、防御力、躲避率
6、角色的各种状态
7、……等等……

还比如,生命值,它也可以封装为一个类,例如:
1、当前生命值
2、最大生命值
3、最小生命值,低于这个数就死亡啦。
4、生命值回复周期
5、上一次生命值回复的时间
6、生命值的成长比例
7、变更生命值的方法
       这里为什么把变更生命值的方法放在生命值的类中呢?因为生命值最大不能超过最大生命值,最小不能小于最小生命值(否则返回死亡状态)。
       这样在其他地方应用的时候,就不需要再判定最大生命值、最小生命值等等东西了,直接使用这个方法,是不是轻松得多?
8、……等等……

点评

纠正一下,Game_Party类不存放坐标,而是Game_Player类存放  发表于 2014-11-10 00:34
谢谢了,这个帖子可以跟教学帖 较高低了  发表于 2014-11-9 21:17
这个帖子6楼...  发表于 2014-11-9 20:35
6L是什么意思?橙光吗  发表于 2014-11-9 20:33
检测方法见6L  发表于 2014-11-9 20:28

评分

参与人数 2星屑 +200 梦石 +1 收起 理由
myownroc + 1 精品文章
RyanBern + 200 精品文章

查看全部评分

卐忍 → 解忍 → 元忍 → 隐忍 → 卍忍 → 匿踪(最终)
完全退步到了卐忍阶段
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3925
在线时间
254 小时
注册时间
2013-10-13
帖子
790
9
 楼主| 发表于 2014-11-10 21:02:21 | 只看该作者
本帖最后由 kvkv97 于 2014-11-10 21:07 编辑

我还有问题 存在疑惑:
draw_actor_graphic(actor, x, y) 中 的actor参数是引用语句actor = $game_party.actors的 局部变量actor吗?
actor = $game_party.actors中的 actors是 Game_Party的属性,被 attrrc_reader了 ,意思是返回@actors,那么在初始化里 @actors=[ ],意思是 @actors的值是 [ ],那么,actors怎么 可能 是 [ ][ ]——意思是actors实际是返回值@actors,而返回值@actors的值是[ ],所以actors被我理解成了[ ][ ]了?

点评

坐等中................  发表于 2014-11-10 21:58
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
9956
在线时间
5019 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

10
发表于 2014-11-10 22:25:24 | 只看该作者
draw_actor_graphic(actor, x, y) 中 的actor参数是引用语句actor = $game_party.actors的 局部变量actor吗?

看使用这个方法的上下文,如果有定义actor = $game_party.actors那就是,否则看看这个类里或者父类或者祖父类等等里有没定义actor这个方法
actor = $game_party.actors中的 actors是 Game_Party的属性,被 attrrc_reader了 ,意思是返回@actors,那么在初始化里 @actors=[ ],意思是 @actors的值是 [ ],那么,actors怎么 可能 是 [ ][ ]——意思是actors实际是返回值@actors,而返回值@actors的值是[ ],所以actors被我理解成了[ ][ ]了?

引用实例变量需要初始化,否则为nil。@actors是一个储存队员实例的数组,如果在使用前没有初始化为一个数组的话,对它调用 push 方法就会报错。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-25 20:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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