查看: 2982|回复: 22

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

[复制链接]
梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
回帖
1074
发表于 2018-3-10 18:06:51 | 显示全部楼层 |阅读模式

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

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

×
比如这样写:
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新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
梦石
0
星屑
19426
在线时间
3082 小时
注册时间
2013-1-11
回帖
1207
发表于 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
回复

使用道具 举报

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
回帖
1074
 楼主| 发表于 2018-3-10 18:40:47 | 显示全部楼层
@SailCat
不行的说...
这么改会出现类型错误的。
QQ截图20180310183948.png

点评

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

使用道具 举报

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

R考场第七期纪念奖

发表于 2018-3-10 18:46:46 | 显示全部楼层
[pre lang="ruby"]module A
  module_function
  @a=1
  def a
    @a
  end
  def a=(a)
    @a=a
  end
end
p A.a
A.a=2
p A.a[/pre]
或者
[pre lang="ruby"]module A
  @a=1
end
class << A
  def a
    @a
  end
  def a=(a)
    @a=a
  end
end
p A.a
A.a=2
p A.a[/pre]
模块也是实例变量
不过又有类的特殊性
你要去定义方法去取得实例变量的属性
第二个例子不能在 class << A 下面直接对 @a 赋值
是因为那个时候在虚拟类中 有点像一般类下的操作 你写 @a 不是自己的 @a 虽然虚拟类不能实例化 不信你试试
但是方法定义却又的的确确是自己用而不是实例化变量用的方法
有点乱吧 我也有点乱 可能说的不好或不对
请见谅
回复

使用道具 举报

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
回帖
1074
 楼主| 发表于 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新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。
回复

使用道具 举报

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
回帖
1074
 楼主| 发表于 2018-3-10 19:43:03 | 显示全部楼层
本帖最后由 文雅夕露 于 2018-3-10 19:46 编辑

[pre lang="ruby"]module Actor
  module_function
  @angle= 10
end

def angle
    @angle
  end
  
  def angle=(angle)
   @angle = angle
  end

class Scene_A
def main
        @magic2= Sprite.new
          @magic2.bitmap = RPG::Cache.picture("magic")
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
     @magic.angle +=@angle
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果切换画面就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
   @magic2.dispose
    @magic2.bitmap.dispose
  end
#--------------------------------------------------------------------------
  # ●刷新
  #--------------------------------------------------------------------------
  def update
  #--------------------------------------------------------------------------
  # ●按左时
  #--------------------------------------------------------------------------
   if Input.trigger?(Input::LEFT)
    $game_system.se_play($data_system.cursor_se)
   @angle = -@angle
    return
  end
  #--------------------------------------------------------------------------
  # ●按右时
  #--------------------------------------------------------------------------
   if Input.trigger?(Input::RIGHT)
    $game_system.se_play($data_system.cursor_se)
    @angle = @angle
    return
  end
end[/pre]

以上是脚本
@SixRC

点评

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

使用道具 举报

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

R考场第七期纪念奖

发表于 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
回复

使用道具 举报

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

R考场第七期纪念奖

发表于 2018-3-10 20:19:39 | 显示全部楼层
本帖最后由 SixRC 于 2018-3-10 20:23 编辑
文雅夕露 发表于 2018-3-10 19:43
module Actor
  module_function
  @angle= 10


[pre lang="ruby"]module Actor
  @angle = 10 # 这句话在 module_function 之前或之后都是没关系的
  module_function #改变了此后定义的方法的属性
  def angle
    @angle
  end
  def angle=(angle)
    @angle = angle
  end
end
class Scene_A
  def main
    @magic2 = Sprite.new
    @magic2.bitmap = RPG::Cache.picture("magic")
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      @magic.angle += Actor.angle
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果切换画面就中断循环
      # 此处也可以为 break if $scene != self 大概看喜好?
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @magic2.dispose
    @magic2.bitmap.dispose
  end
#--------------------------------------------------------------------------
  # ●刷新
  #--------------------------------------------------------------------------
  def update
  #--------------------------------------------------------------------------
  # ●按左时
  #--------------------------------------------------------------------------
    if Input.trigger?(Input::LEFT)
      $game_system.se_play($data_system.cursor_se)
      # 这里你想表达按左就变负值吧?
      Actor.angle = -Actor.angle.abs
      # 末尾的 return 是可以省略的 默认传回最后的值
      # 不需要传回值的情况也不需要特意的 return
    end
  #--------------------------------------------------------------------------
  # ●按右时
  #--------------------------------------------------------------------------
    if Input.trigger?(Input::RIGHT)
      $game_system.se_play($data_system.cursor_se)
      Actor.angle = Actor.angle.abs
    end
  end
end[/pre]

点评

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

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部