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

Project1

 找回密码
 注册会员
搜索

请教一下有关module的赋值操作。

查看数: 2485 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-3-10 18:06

正文摘要:

比如这样写: module A age = 10 end 以上是module模块的一个数值。 我想在按键的时候改变他。 如下: if Input.trigger?(Input::RIGHT)   age = - age   end if Input.trigger?(Input::LEFT) ...

回复

SixRC 发表于 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 精品文章

查看全部评分

SixRC 发表于 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
文雅夕露 发表于 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
文雅夕露 发表于 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
SixRC 发表于 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 虽然虚拟类不能实例化 不信你试试
但是方法定义却又的的确确是自己用而不是实例化变量用的方法
有点乱吧 我也有点乱 可能说的不好或不对
请见谅
张咚咚 发表于 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
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-14 15:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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