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

Project1

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

[已经过期] 谢谢!明白如何Update了 可惜代码还是出错

[复制链接]

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
跳转到指定楼层
1
发表于 2010-12-11 19:13:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 kula1900 于 2010-12-11 19:57 编辑

module Graphics
  alias oldupdate update
  def update
    oldupdate
    $game_bass.update()
  end
end
提示错误!
丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%

Lv3.寻梦者

孤独守望

梦石
0
星屑
3132
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

2
发表于 2010-12-11 19:39:56 | 只看该作者
直接挂Graphics的update里即可……
开线程的话用Thread类
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
3
 楼主| 发表于 2010-12-11 19:43:53 | 只看该作者
恩啊!谢谢啦 在写 BASS模块 能吧 BGM 减掉 支持OGG只要有解码器的话 呵呵!


kula1900于2010-12-11 19:55补充以下内容:
那在弱弱的问下 为啥这样不行哟
module Graphics
  alias oldupdate update
  def update
    oldupdate
    $game_bass.update()
  end
end
丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
4
发表于 2010-12-11 21:51:05 | 只看该作者
本帖最后由 苏小脉 于 2010-12-12 09:09 编辑

回复 kula1900 的帖子

因为在模块上下文中用 alias 通过符号查找方法的时候,其接收端是模块的实例上下文(模块实例的上下文,而不是模块对象的单例上下文。当然模块不能有实例,但这个模块实例上下文却可以和其后定义的 class 进行 mixin 后重新建立)。Graphics.update 这个方法是 Graphics 的模块方法,严谨地说是 Graphics 这个 Module 对象的单例方法,故而属于 Graphics 模块对象的单例上下文(模块上下文),所以在 Graphics 的实例上下文中是找不到 update 的。
你可以通过 Ruby 匿名单例类的语法去重新获取 Graphics 的单例上下文:
  1. class << Graphics
  2.   alias oldupdate update
  3.   def update
  4.     oldupdate
  5.     $game_bass.update()
  6.   end
  7. end
复制代码
除此之外还有些别的途径,利用 Object#instance_eval 也可以重新获取 Graphics 模块对象的单例上下文:
  1. Graphics.instance_eval do
  2.   alias oldupdate update
  3.   def update
  4.     oldupdate
  5.     $game_bass.update()
  6.   end
  7. end
复制代码
你还可以通过 Object#method 方法去获取并绑定一个模块、类的单例方法对象(Method 对象),然后在 update 中通过 Method#call 调用。Object#method 之所以能获取到 update,是因为 Object#method 可以任意指定接收者,而如果在模块上下文中,不指定接收者就默认为 self(模块对象本身)了。要注意在定义方法时必须要显示指定 self (或直接指定 Graphics)表明是定义模块对象单例方法。

  1. module Graphics
  2.   @@oldupdate = method(:update)
  3.   def self.update
  4.     @@oldupdate.call
  5.     $game_bass.update()
  6.   end
  7. end
复制代码
或者:

  1. @@oldupdate = Graphics.method(:update)
  2. def Graphics.update
  3.   @@oldupdate.call
  4.   $game_bass.update()
  5. end
复制代码

点评

恩 ok了 谢谢  发表于 2010-12-12 08:00

评分

参与人数 1星屑 +2 收起 理由
kula1900 + 2 忘记怎么结贴了

查看全部评分

[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 02:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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