查看: 2348|回复: 8

[已经解决] Plane#visible为什么总是返回true?

[复制链接]

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-7-4 12:56:45 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 taroxd 于 2014-7-4 14:20 编辑

为什么我对Plane执行visible方法总是返回true?

测试代码如下:
[pre lang="ruby" line="1"]a = Plane.new
a.visible = false
p a.visible # true[/pre]

我需要这个值的原因是,我要按一个键改变可见状态,也就是 plane.visible ^= true
如果 visible 永远返回 true 的话,这样做完只会把平面的可见属性设为 false

只是要使用的话,这样就没有问题了

[pre lang="ruby" line="1"]class Plane_Base < Plane
  #---------------------------------------------------------------------------
  # ● 初始化
  #---------------------------------------------------------------------------
  def initialize(viewport = nil)
    super
    @__visible = true
  end
  #---------------------------------------------------------------------------
  # ● 设置是否可见
  #---------------------------------------------------------------------------
  def visible=(visible)
    super
    @__visible = visible
  end
  #---------------------------------------------------------------------------
  # ● 获取是否可见
  #---------------------------------------------------------------------------
  def visible
    @__visible
  end
end[/pre]

但谁能告诉我这是什么奇葩的事情?

无限の剣制

梦石
0
星屑
10445
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2014-7-4 13:49:13 | 显示全部楼层
你可能得给a指定一个显示端口,否则默认全屏幕,全屏幕是默认可见的?
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

 楼主| 发表于 2014-7-4 13:52:34 | 显示全部楼层
VIPArcher 发表于 2014-7-4 13:49
你可能得给a指定一个显示端口,否则默认全屏幕,全屏幕是默认可见的?


这只是一个例子而已,实际上我是使用viewport的(虽然那个viewport也是全屏幕)

如果你要看我真正的用法,在这里:https://rpg.blue/thread-366825-1-1.html

是用我那个Plane_Base勉强解决的(定义在基础设置里面)

我想问问这是什么卧槽bug

点评

XP的oy只能上移不能下移是一件很坑的事情,所以这样的需求我也是使用Sprite制作的,一般情况下两个就够了,不需要受Plane的气  发表于 2014-7-4 21:54
似乎可以呢。先做好一张0~9拼起来的Bitmap,然后装在Plane里面  发表于 2014-7-4 14:15
啊,我说的就是循环效果,就是之前那个翻页显示文字的问题  发表于 2014-7-4 14:12
不是滚动效果,是循环效果,就像远景图无限循环一样(事实上远景图就是Plane)  发表于 2014-7-4 14:08
你把update_bitmap这个方法用手或者脑子执行一遍应该就能懂了……  发表于 2014-7-4 14:08
回复

使用道具 举报

菜鸟飞呀飞 该用户已被删除
发表于 2014-7-4 17:01:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

 楼主| 发表于 2014-7-4 17:02:57 | 显示全部楼层
菜鸟飞呀飞 发表于 2014-7-4 17:01
tf = false
a = Plane.new
a.visible = tf

嗯,visible= 方法有效这个我知道。

我要的效果是 plane.visible ^= true ,即如果可见改为不可见,如果不可见改为可见。

我能想到最简单的办法就是上面那个子类定义了……
回复

使用道具 举报

菜鸟飞呀飞 该用户已被删除
发表于 2014-7-4 17:11:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

 楼主| 发表于 2014-7-4 17:12:50 | 显示全部楼层
菜鸟飞呀飞 发表于 2014-7-4 17:11
a.visible = !tf

逆转效果一样,何必再建一个类……

那不还是得需要一个实例变量么……

我的例子在3L

点评

万一用到呢……比如远景图啥的  发表于 2014-7-4 18:02
敢情你把Plane当Sprite使了…总之默认的Plane def visible 是返回另一个值的  发表于 2014-7-4 18:00
以后一样可以直接继承Plane_Base  发表于 2014-7-4 17:50
再有一个脚本要用plane.visible呗  发表于 2014-7-4 17:49
以后怎么会用到 = =同为实例变量。。。实在强迫症只能重写Plane  发表于 2014-7-4 17:30
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

 楼主| 发表于 2014-7-4 18:18:11 | 显示全部楼层
菜鸟飞呀飞 发表于 2014-7-4 18:16
class Plane
  alias :n_visible= :visible=
  def visible=(tf)

那不是和我的一样么

点评

暂把它看作因为bug就行…  发表于 2014-7-4 18:41
只是作为一个只返回的方法,不必纠结…它又不处理代码 代替或修改就行啦  发表于 2014-7-4 18:39
我标题就是问的“为什么”而不是“怎样解决”  发表于 2014-7-4 18:35
我只是纠结为什么默认的visible不会返回正确状态  发表于 2014-7-4 18:29
你的是子类 你不是纠结于默认层的吗。除了修改或重写 否则默认的visible不会返回你想要的可见状态  发表于 2014-7-4 18:24
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部