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

Project1

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

[已经解决] 请教一下有关module的赋值操作。

[复制链接]

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
跳转到指定楼层
1
发表于 2018-3-10 18:06:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
比如这样写:
module A
age = 10
end
以上是module模块的一个数值。
我想在按键的时候改变他。
如下:
if Input.trigger?(Input::RIGHT)
  age = - age
  end
if Input.trigger?(Input::LEFT)
  age = age
  end
发现会出现语法错误。
请问该怎么样在场景里改变module模块里的数值?

点评

@age = 10 .... @age = -@age  发表于 2018-3-10 18:28
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。

Lv4.逐梦者

梦石
0
星屑
19403
在线时间
3098 小时
注册时间
2013-1-11
帖子
1290
2
发表于 2018-3-10 18:39:32 | 只看该作者
module A
  AGE = 10
end
A::AGE = 50

点评

试过了,还是一样...  发表于 2018-3-10 18:51
首字母大写  发表于 2018-3-10 18:46
写在场景的按键执行里会出错...  发表于 2018-3-10 18:45
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
3
 楼主| 发表于 2018-3-10 18:40:47 | 只看该作者
@SailCat
不行的说...
这么改会出现类型错误的。

点评

是class Scene_Select。  发表于 2018-3-10 19:57
你难道是module Scene_Select而不是class Scene_Select吗?  发表于 2018-3-10 19:44
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

4
发表于 2018-3-10 18:46:46 | 只看该作者
RUBY 代码复制
  1. module A
  2.   module_function
  3.   @a=1
  4.   def a
  5.     @a
  6.   end
  7.   def a=(a)
  8.     @a=a
  9.   end
  10. end
  11. p A.a
  12. A.a=2
  13. p A.a

或者
RUBY 代码复制
  1. module A
  2.   @a=1
  3. end
  4. class << A
  5.   def a
  6.     @a
  7.   end
  8.   def a=(a)
  9.     @a=a
  10.   end
  11. end
  12. p A.a
  13. A.a=2
  14. p A.a

模块也是实例变量
不过又有类的特殊性
你要去定义方法去取得实例变量的属性
第二个例子不能在 class << A 下面直接对 @a 赋值
是因为那个时候在虚拟类中 有点像一般类下的操作 你写 @a 不是自己的 @a 虽然虚拟类不能实例化 不信你试试
但是方法定义却又的的确确是自己用而不是实例化变量用的方法
有点乱吧 我也有点乱 可能说的不好或不对
请见谅
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
5
 楼主| 发表于 2018-3-10 18:53:22 | 只看该作者
SixRC 发表于 2018-3-10 18:46
module A
  module_function
  @a=1

就是说要定义了才能在class内部给实例赋值咯?
我想在class里的update的按键处理下改变他的值。
并且在整体脚本运行中,马上实现改变他的值呈现的效果。

点评

你代码是怎么写的 我有点奇怪  发表于 2018-3-10 19:25
很抱歉,用不了,提示内容如3楼那样。  发表于 2018-3-10 19:08
嗯?你定义读取方法就行 你用在哪没什么关系啊 快去试试吧 我得吃饭去啦  发表于 2018-3-10 18:57
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
6
 楼主| 发表于 2018-3-10 19:43:03 | 只看该作者
本帖最后由 文雅夕露 于 2018-3-10 19:46 编辑

RUBY 代码复制
  1. module Actor
  2.   module_function
  3.   @angle= 10
  4. end
  5.  
  6. def angle
  7.     @angle
  8.   end
  9.  
  10.   def angle=(angle)
  11.    @angle = angle
  12.   end
  13.  
  14. class Scene_A
  15. def main
  16.         @magic2= Sprite.new
  17.           @magic2.bitmap = RPG::Cache.picture("magic")
  18.     # 执行过渡
  19.     Graphics.transition
  20.     # 主循环
  21.     loop do
  22.      @magic.angle +=@angle
  23.       # 刷新游戏画面
  24.       Graphics.update
  25.       # 刷新输入信息
  26.       Input.update
  27.       # 刷新画面
  28.       update
  29.       # 如果切换画面就中断循环
  30.       if $scene != self
  31.         break
  32.       end
  33.     end
  34.     # 准备过渡
  35.     Graphics.freeze
  36.     # 释放窗口
  37.    @magic2.dispose
  38.     @magic2.bitmap.dispose
  39.   end
  40. #--------------------------------------------------------------------------
  41.   # ●刷新
  42.   #--------------------------------------------------------------------------
  43.   def update
  44.   #--------------------------------------------------------------------------
  45.   # ●按左时
  46.   #--------------------------------------------------------------------------
  47.    if Input.trigger?(Input::LEFT)
  48.     $game_system.se_play($data_system.cursor_se)
  49.    @angle = -@angle
  50.     return
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ●按右时
  54.   #--------------------------------------------------------------------------
  55.    if Input.trigger?(Input::RIGHT)
  56.     $game_system.se_play($data_system.cursor_se)
  57.     @angle = @angle
  58.     return
  59.   end
  60. end


以上是脚本
@SixRC

点评

可以的话,麻烦前辈了。  发表于 2018-3-10 20:03
需要根据你的脚本进行修改以作例子吗  发表于 2018-3-10 20:00
你根本没理解啊 好好看范例脚本..此外 你的 end 数 不会出错吗  发表于 2018-3-10 19:50
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

7
发表于 2018-3-10 19:55:56 | 只看该作者
文雅夕露 发表于 2018-3-10 19:43
module Actor
  module_function
  @angle= 10

首先 module_function 表示下面定义的方法是单体方法 即它自己的而不是拿来继承的
并且这句语句不需要 end
其次 你的 angle 和 angle= 定义到哪里去了.. 没定义到模块里
再次 如我所例 你应该以 Module.xxx 来得到或改变某属性
最次 你最下面少了个 end?
嗯 先理解语法 再写脚本啦 不要急于求成

点评

嗯 没关系 慢慢来就好 我改好你参考一下  发表于 2018-3-10 20:03
抱歉,看来漏了些内容呢。不过我并不会写脚本,我只能做简单的修改...  发表于 2018-3-10 20:02
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

8
发表于 2018-3-10 20:19:39 | 只看该作者
本帖最后由 SixRC 于 2018-3-10 20:23 编辑
文雅夕露 发表于 2018-3-10 19:43
module Actor
  module_function
  @angle= 10


RUBY 代码复制
  1. module Actor
  2.   @angle = 10 # 这句话在 module_function 之前或之后都是没关系的
  3.   module_function #改变了此后定义的方法的属性
  4.   def angle
  5.     @angle
  6.   end
  7.   def angle=(angle)
  8.     @angle = angle
  9.   end
  10. end
  11. class Scene_A
  12.   def main
  13.     @magic2 = Sprite.new
  14.     @magic2.bitmap = RPG::Cache.picture("magic")
  15.     # 执行过渡
  16.     Graphics.transition
  17.     # 主循环
  18.     loop do
  19.       @magic.angle += Actor.angle
  20.       # 刷新游戏画面
  21.       Graphics.update
  22.       # 刷新输入信息
  23.       Input.update
  24.       # 刷新画面
  25.       update
  26.       # 如果切换画面就中断循环
  27.       # 此处也可以为 break if $scene != self 大概看喜好?
  28.       if $scene != self
  29.         break
  30.       end
  31.     end
  32.     # 准备过渡
  33.     Graphics.freeze
  34.     # 释放窗口
  35.     @magic2.dispose
  36.     @magic2.bitmap.dispose
  37.   end
  38. #--------------------------------------------------------------------------
  39.   # ●刷新
  40.   #--------------------------------------------------------------------------
  41.   def update
  42.   #--------------------------------------------------------------------------
  43.   # ●按左时
  44.   #--------------------------------------------------------------------------
  45.     if Input.trigger?(Input::LEFT)
  46.       $game_system.se_play($data_system.cursor_se)
  47.       # 这里你想表达按左就变负值吧?
  48.       Actor.angle = -Actor.angle.abs
  49.       # 末尾的 return 是可以省略的 默认传回最后的值
  50.       # 不需要传回值的情况也不需要特意的 return
  51.     end
  52.   #--------------------------------------------------------------------------
  53.   # ●按右时
  54.   #--------------------------------------------------------------------------
  55.     if Input.trigger?(Input::RIGHT)
  56.       $game_system.se_play($data_system.cursor_se)
  57.       Actor.angle = Actor.angle.abs
  58.     end
  59.   end
  60. end

点评

十分感谢前辈的范例和指导,顺利的实现效果了。原来是这么做的啊,又学到一个技能了,谢谢。  发表于 2018-3-10 20:28

评分

参与人数 2星屑 +120 +2 收起 理由
RyanBern + 120 + 1 赞耐心的回答
文雅夕露 + 1 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-13 15:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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