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

Project1

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

[已经解决] 莫非在类里不能操作自身被赋的变量?

[复制链接]

Lv1.梦旅人

幻想天神

梦石
0
星屑
55
在线时间
166 小时
注册时间
2012-3-24
帖子
404
跳转到指定楼层
1
发表于 2014-1-26 12:20:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
比如 $ss = Apple

发现在Apple类里写$ss = nil是无效的,在其他类写有效,莫非在类里不能操作自身被赋的变量?

Lv1.梦旅人

幻想天神

梦石
0
星屑
55
在线时间
166 小时
注册时间
2012-3-24
帖子
404
2
 楼主| 发表于 2014-1-26 12:31:08 | 只看该作者
我建立一个界面,召唤时不想让地图黑屏,就没用$scene控制,用的$scene0
然后在Update里判断按下Esc时,$scene0 = nil (理论上实例化后$scene应该不为空吧?),然后loop循环里判断,当$scene == nil时break

这样做出现了奇怪的现象,进入游戏第一次唤出界面秒退,第二次以后正常,而且初步判断第一次$scene实例化后直接为0,根本没经过update这个步骤

点评

贴出来脚本吧  发表于 2014-1-26 14:24
后来在类外让$scene = 0,就正常了。。好奇怪。。求解答  发表于 2014-1-26 12:32
回复 支持 反对

使用道具 举报

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
3
发表于 2014-1-26 14:25:47 | 只看该作者
本帖最后由 恋′挂机 于 2014-1-26 14:36 编辑
风若·飘絮 发表于 2014-1-26 12:31
我建立一个界面,召唤时不想让地图黑屏,就没用$scene控制,用的$scene0
然后在Update里判断按下Esc时,$sc ...


不想让地地图黑屏?
不明白
显示地图直接 = Spriteset_Map.new 就好了


以上请无视

不知道 是不是这个意思

退出场景
场景中按下esc键使得 $scene0 = nil
然后main里的 if $scene != self. 什么什么什么的  改成 if $scene0 == nil 什么什么什么什么的

其实不用
返回地图直接 $scene = Scene_Map.new 即可

至于为什么会这样

第一次执行因为$scene0没有赋值所以为nil,如果是nil就立刻中断循环,所以刚进入场景就立刻返回
第二次按下esc之后$scene0 = 0 循环中条件满足 “正常”这样做的话实际上有很严重的BUG!!!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

幻想天神

梦石
0
星屑
55
在线时间
166 小时
注册时间
2012-3-24
帖子
404
4
 楼主| 发表于 2014-1-26 14:35:32 | 只看该作者
恋′挂机 发表于 2014-1-26 14:25
不想让地地图黑屏?
不明白
显示地图直接 = Spriteset_Map.new 就好了
  1. class Rw_Zt
  2.   def initialize
  3.   @view = Viewport.new(383,0,257,451)
  4.   @back = Sprite.new(@view)
  5.   @back.x  = 0#383
  6.   @back.y  = 0
  7.   @back.bitmap = RPG::Cache.picture("状态栏1.png")
  8.   @art = Bitmap.new(257,451)
  9.   @a = Sprite.new(@view)
  10.   @a.bitmap = @art
  11.   @a.bitmap.font.size = 15
  12.   @a.bitmap.font.name = ["宋体"]
  13.   @a.bitmap.font.color = Color.new(0,0,0,255)
  14.   refresh
  15.     Graphics.transition
  16.     loop do
  17.       Graphics.update
  18.       Input.update
  19.       update
  20.       if Input.trigger?(Input::B)
  21.        # $scene0 = nil
  22.         break
  23.       end
  24.     end
  25.       @back.dispose
  26.    @a.bitmap.dispose
  27.    @art.dispose
  28.    @view.dispose
  29.   end
  30.   def update

  31.    end
  32.   def refresh
  33.   @a.bitmap.draw_text(60,30,35,20,$game_party.actors[0].level.to_s)
  34.   @a.bitmap.draw_text(170,30,35,20,$game_party.actors[0].name.to_s)
  35.   @a.bitmap.draw_text(85,77,35,20,"梦幻社区")
  36.   @a.bitmap.draw_text(216,77,35,20,"0")
  37.   @a.bitmap.draw_text(85,100,35,20,$game_party.actors[0].class_name.to_s)
  38.   @a.bitmap.draw_text(216,100,35,20,"0")
  39.   @a.bitmap.draw_text(170,30,35,20,$game_party.actors[0].name.to_s)
  40.   end
  41. end


复制代码
然后在MAP脚本update写上:
  1. if Input.trigger?(Input::B)
  2.       if $scene0 == nil
  3.         $scene0 = Rw_Zt.new #Scene_Menu.new
  4.         $scene0 = nil
  5.       end
  6.     end
复制代码
这样确实正常了,(已经关闭召唤菜单,所以不会B键冲突)可以正常关闭,不过感觉我的写法怪怪的。并且这样地图人物不能动了,我想做到那种开着道具界面,地图上人物又能上下左右走动的效果。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
5
发表于 2014-1-26 14:44:07 | 只看该作者
本帖最后由 恋′挂机 于 2014-1-26 15:03 编辑
风若·飘絮 发表于 2014-1-26 14:35
然后在MAP脚本update写上:这样确实正常了,(已经关闭召唤菜单,所以不会B键冲突)可以正常关闭,不过感 ...


表示看不懂
写法很奇怪
  1. if Input.trigger?(Input::B)
  2.       if $scene0 == nil
  3.         $scene0 = Rw_Zt.new #Scene_Menu.new
  4.         $scene0 = nil
  5.       end
  6.     end
复制代码
if scene0 == nil
   xxxx
   $scene0 = nil
end
不知道在干什么。。。


希望能再较详细的描述下您想要的效果,会有比这个更巧妙的写法



(另外你的那个脚本根本不是场景,除非你把 初始化方法改为主方法<main>, 场景必须有main)

从一个场景到另一个场景直接 $scene = Xxxx.newz 即可

如果是在某场景中按下某个按出现一个(窗口)显示一些东西
那么也无需这样

先写好一个窗口
  1. class Win < Window_Base
  2.   def initialize
  3.     super(383,0,257,451)
  4.     self.visible = false
  5.     self.contents = Bitmap.new(width - 32, height - 32)
  6.     @a = RPG::Cache.picture("状态栏1.png")
  7.     refresh
  8.   end
  9.   def refresh
  10.    
  11.     self.contents.clear
  12.     self.contents.blt(0, 0, @a, Rect.new(@a.width, @a.height))
  13.     self.contents.font.name = "宋体"
  14.     self.contents.font.size = 15
  15.     self.contents.font.Color = Color.new(0,0,0,255)
  16.    
  17.    
  18.     self.contents.draw_text(60,30,35,20,$game_party.actors[0].level.to_s)
  19.     self.contents.draw_text(170,30,35,20,$game_party.actors[0].name.to_s)
  20.     self.contents.draw_text(85,77,35,20,"梦幻社区")
  21.     self.contents.draw_text(216,77,35,20,"0")
  22.     self.contents.draw_text(85,100,35,20,$game_party.actors[0].class_name.to_s)
  23.     self.contents.draw_text(216,100,35,20,"0")
  24.     self.contents.draw_text(170,30,35,20,$game_party.actors[0].name.to_s)
  25.   
  26.   end
  27. end
复制代码
先在场景main 中生成 @aa = Win.new

如果要显示它 就 @aa.visible = true
不显示就 @aa.visible = false

点评

啊,明白了  发表于 2014-1-26 15:07

评分

参与人数 1星屑 +120 收起 理由
myownroc + 120 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-26 00:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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