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

Project1

 找回密码
 注册会员
搜索
查看: 4680|回复: 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 似乎 也未被赋值的。

评分

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

查看全部评分

Lv5.捕梦者

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

开拓者

14
发表于 2014-11-11 14:02:17 | 只看该作者
本帖最后由 芯☆淡茹水 于 2014-11-11 14:08 编辑

补充LS:
LZ 应该先理解 Game_Party 里的这句:attr_reader   :actors
定义实例变量的读取方法,等同于下面这个效果:
  1. def actors
  2.   return @actors
  3. end
复制代码
在 Game_Party  内部使用时,直接调用 @actors
而在外部调用时,就需要 Game_Party  生成的实例 $game_party ,再加上方法 actors
所以就  $game_party.actors
利用其定义的 actors 方法,调用 Game_Party  内部的实例变量 @actors  。

$game_party.actors  的 actors  是方法。
而在 Game_Party  内部的 @actors  是实例变量。
在外部 --> 使用方法 actors  --> 调用其内部的实变量 @actors  
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

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

开拓者贵宾

13
发表于 2014-11-11 12:40:14 | 只看该作者
这里的方括号[]是数组类的一个方法,
self[nth] 表示获取数组的第nth个元素,索引由0开始,若为负数则倒数。超过范围则返回nil
上面就说过了,一开始的@actors=[ ] 这个只是一个初始化,把@actors赋值为一个空数组。
actors只是Game_Party类的一个方法。

点评

就是游戏里的变量$game_variables和开关$game_switches才有 [](i)这种方法  发表于 2014-11-12 13:43
变量开关是什么呀?我晕了,计算机的术语要用好啊,要不很麻烦的。  发表于 2014-11-12 13:35
啊,不对,这个是变量开关里面重定义了[]方法后才有的。233  发表于 2014-11-12 13:09
a[1]等价于a[](1)  发表于 2014-11-12 13:04
谢谢了,我终于弄明白了,是数组A=[],那么A[ ](I)就是调用数组的附加玛  发表于 2014-11-12 12:53
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

12
发表于 2014-11-11 12:38:25 | 只看该作者
kvkv97 发表于 2014-11-11 09:25
我的意思是:我无法理解actor=$game_party.actors[ i ]的actors[ i ]是怎么和@actors=[ ]联系起来解释的?
...

根据优先级,
  1. $game_party.actors[i]
复制代码
等价于
  1. ($game_party.actors)[i]
复制代码
也就相当于

  1. actors = $game_party.actors
  2. actors[i]
复制代码

点评

谢谢了,我终于弄明白了,原来变量真的是变量啊,姚秦三藏法师翻译佛经的智慧报果然 有用!  发表于 2014-11-12 12:47
回复 支持 反对

使用道具 举报

Lv3.寻梦者

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

  1. Game_Party 的 actors 是包含游戏队伍所有角色的数组,里面的每个单元都是一个 Game_Actor 。
  2. 而 [ ] 是调用与索引相对应的 actors 里的某个角色:Game_Actor
复制代码
我的意思是:我无法理解actor=$game_party.actors[ i ]的actors[ i ]是怎么和@actors=[ ]联系起来解释的?
actors和@actors=[]是一样的吗?
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
9961
在线时间
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 方法就会报错。
回复 支持 反对

使用道具 举报

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被我理解成了[ ][ ]了?
回复 支持 反对

使用道具 举报

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、……等等……

评分

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

查看全部评分

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

使用道具 举报

Lv5.捕梦者

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

开拓者

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

Game_Party 的 actors 是包含游戏队伍所有角色的数组,里面的每个单元都是一个 Game_Actor 。
而 [] 是调用与索引相对应的 actors 里的某个角色:Game_Actor
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

梦石
0
星屑
2208
在线时间
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 的变量名,我就知道变量里是什么类的实例了。

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-5 05:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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