Project1

标题: NowLoading v0.1 [打印本页]

作者: hide秀    时间: 2008-9-26 07:48
标题: NowLoading v0.1
=begin

  NowLoading v0.1
  
  作者:秀秀
  
  功能: 实现了场景转换用 NowLonding 画面来读取数据 图片可以自定义
  
        StartNowLondingTr模块的self.start里面的 随便定义多少张图都可以
        
        别忘记释放= =
        
        默认用了黑色矩形填充

  使用方法:把脚本最下面的 main 一兰里的 Graphics.freeze 注释掉
  
            否则会因为画面冻结而显示不出标题的 NowLonding 画面

=end

module Graphics
  @@ori = method("transition")
  def self.transition(*args)
     StartNowLondingTr.stop
     @@ori.call(*args)
  end  
end  

module StartNowLondingTr
  def self.start
    @start = Thread.new do
      @nowLsprite = Sprite.new
      @nowLbitmap = Bitmap.new(640,480)
      @nowLsprite.bitmap = @nowLbitmap
      @nowLsprite.bitmap.fill_rect(0,0,640,480,Color.new(0,0,0,255))
      @nowLsprite.x = 0
      @nowLsprite.y = 0
      @nowLsprite.z = 99999999
      @nowLsprite.visible = true
      @nowLsprite.bitmap.draw_text(400,420,200,60,"NOW LONDING...")
      loop do
        sleep 0.001
        Graphics.update
      end
    end
  end
  def self.stop
    @start.exit
    @nowLsprite.dispose
    @nowLsprite.bitmap.dispose
  end
end

class Class
  alias ori_new new
  def new(*args)
    if self.method_defined? :main
      StartNowLondingTr.start
      @obj =  ori_new(*args)
      return @obj
    else
      return ori_new(*args)
    end
  end
end
作者: slick    时间: 2008-9-26 07:57
囧了。。。Orz这个{/gg},,,不过场景转换效果很不错滴{/tp}
作者: 灯笼菜刀王    时间: 2008-9-26 10:33
我来拜一下这个@nowLsprite.z = 99999999....

难得秀秀殿发布我看得懂的东西= =.....

不过虽然这样,还是有几个地方不懂...
module Graphics
@@ori = method("transition")
def self.transition(*args)
    StartNowLondingTr.stop
    @@ori.call(*args) end  
end  
红色的部分不能理解...= = 能不能解释下~~
作者: 灼眼的夏娜    时间: 2008-9-26 15:20
以下引用灯笼菜刀王于2008-9-26 2:33:29的发言:


module Graphics
@@ori = method("transition")
def self.transition(*args)
   StartNowLondingTr.stop
  @@ori.call(*args) end  
end  


method -> 返回一个方法对象 @@ori... 这个对象常用的方法有,
1、call:调用方法,用指定的参数
2、arity:获取方法的参数个数。。。

这里先获取原来 transition 的 方法 到@@ori,  然后重定义了 transition, 然后用@@ori.call(参数)调用原来的transition方法。。。
*args  这是ruby的不定个数参数形式。。。

*号处于定义方法时参数的位置时用于标示这是一个不定参数,然后args是一个数组

*号处于调用方法时参数的位置时用于将数组展开,比如 [1,2,3] : *[1,2,3] ->1,2,3

作者: TERENCE    时间: 2008-9-26 17:06
秀秀殿
可不可以加上一个游戏开关来控制.....
想用NowLonding的时候就把开关给ON
不想用时则反之为OFF....
这样活用的空间可以更广,
才不会每次场景转换都用 NowLonding 画面

作者: 浩气青天    时间: 2008-9-26 17:31
恩,先谢谢秀秀前辈。再问下和龙皇同志同样的问题,能解决吗?
作者: 塑望    时间: 2008-9-26 19:26
你还真写了LOADING....
貌似不是大型素材就用不上...
我是尽量不让地图过渡时间出现在1秒以上...{/gg}
作者: MJMJMJMJMJ    时间: 2008-9-27 01:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: 做游戏的新手    时间: 2008-9-27 01:50
秀秀啊
MS是loading吧。。。
作者: 灯笼菜刀王    时间: 2008-9-27 02:59
以下引用灼眼的夏娜于2008-9-26 7:20:16的发言:
method -> 返回一个方法对象 @@ori... 这个对象常用的方法有,
1、call:调用方法,用指定的参数
2、arity:获取方法的参数个数。。。

这里先获取原来 transition 的 方法 到@@ori,  然后重定义了 transition, 然后用@@ori.call(参数)调用原来的transition方法。。。
*args  这是ruby的不定个数参数形式。。。

*号处于定义方法时参数的位置时用于标示这是一个不定参数,然后args是一个数组

*号处于调用方法时参数的位置时用于将数组展开,比如 [1,2,3] : *[1,2,3] ->1,2,3

感谢夏娜殿的解说~~~

这些在F1里都查不到~  不过按目前我的程度只理解了“这里先获取原来 transition 的 方法 到@@ori,  然后重定义了 transition, 然后用@@ori.call(参数)调用原来的transition方法。。。”这段....,和 Proc.new 的CALL是一样的吧?(前几天刚涉及的东东,现在还是一知半解的= =)

现在记得 *XXX 是不定个数参数。 *[X,X,X]是将参数展开~ (记是记下了,原理和作用还不解= =,要慢慢消化...)

还有个没弄清楚。

@@XXX 这个语法是什么意思呢? 一个@是在同一类中通用的变量,两个@是什么...在一些很抽象的效果脚本中- -b经常可以看到这个~

作者: dbshy    时间: 2008-9-27 04:33
回答LS的问题
以@@开始的变量是类变量。在类的定义中定义类变量,可以在类的特殊方法、实例方法等处对类变量进行引用 OR 赋值

又看到了Thread = =
以前也问过线程的问题,当时也半懂不懂
希望LZ能详细讲一下线程...我承认我很贪心
作者: 灯笼菜刀王    时间: 2008-9-27 05:44
所以了? @@ori.call(*args)这里的@@ori是引用了method的方法还是 Graphics的方法?

抱歉= =,DBSHY君的那些文字组合给我的信息好象有反作用~~~

本来我根据夏娜殿的解说,@@ori.call应该是引用了method的方法~~现在觉得好象自己理解错了...

= =我现在想知道这部分内容是属于什么的~,F1里搜不到帮助,我怕这样下去我的问题会越来越多~~,还是系统的完整学比较好....

作者: lhbadsl    时间: 2008-9-27 10:41
。。。。。。。
貌似作用不大{/gg},过场动画读入的时候,如果背景图片太大还是会直接过去,而没有卡住,背景依然黑色一片,可能是读入了图片可是还是没有显示出来,如果这个脚本是这样就此为止的话,貌似没有实现其应有的功能(好像loading就是要读取过后,图像什么的要完全显示才叫真正的loading的吧。。。{/gg}如果只是读入了图片而没有显示出来的话,那貌似就不太实用了)。。。。。。。没有完整一点的吗。。。这个脚本还是不能完全解决问题,读取的时候一个画面就过去了,图像还是没有显示出来,这样作用就好像一个loading图片而已。。。。并且不能随便调用。。。。请秀大再继续努力一点,搞个智能化和可以自行调用的完整版出来,等待中。。。。不过有了这个脚本做参考我想我也能够搞出来了。。。非常感谢。。。
我试用过后问题还是依然,貌似这个脚本的功能还是不够位。。。这里就提下试用中第一时间出现的问题以望改进,如果不好请无视。。。。。。
作者: hide秀    时间: 2008-9-27 17:20
。。。。。。。
貌似作用不大,过场动画读入的时候,如果背景图片太大还是会直接过去,而没有卡住,背景依然黑色一片,可能是读入了图片可是还是没有显示出来,如果这个脚本是这样就此为止的话,貌似没有实现其应有的功能(好像loading就是要读取过后,图像什么的要完全显示才叫真正的loading的吧。。。如果只是读入了图片而没有显示出来的话,那貌似就不太实用了)。。。。。。。没有完整一点的吗。。。这个脚本还是不能完全解决问题,读取的时候一个画面就过去了,图像还是没有显示出来,这样作用就好像一个loading图片而已。。。。并且不能随便调用。。。。请秀大再继续努力一点,搞个智能化和可以自行调用的完整版出来,等待中。。。。不过有了这个脚本做参考我想我也能够搞出来了。。。非常感谢。。。
我试用过后问题还是依然,貌似这个脚本的功能还是不够位。。。这里就提下试用中第一时间出现的问题以望改进,如果不好请无视。。。。。。

这样啊 自定义图片的话 有这个可能 因为Bitmap.new需要一定时间 如果数据读取的时间少于Bitmap.new的时间 可能就显示不了nowLoading图片了
其实这个问题也很好解决
在Thread.new之前把Bitmap.new和Sprite.new处理了 这样不管怎样都会先显示NowLoad图片 然后再开始读取场景数据
@xxx = Sprite.new
@xxx.bitmap.new = RPG:Cache.....
Thread.new {
......
.....
}
这样处理试试看{/wx}





作者: lhbadsl    时间: 2008-9-27 19:56
这样啊 自定义图片的话 有这个可能 因为Bitmap.new需要一定时间 如果数据读取的时间少于Bitmap.new的时间 可能就显示不了nowLoading图片了
其实这个问题也很好解决
在Thread.new之前把Bitmap.new和Sprite.new处理了 这样不管怎样都会先显示NowLoad图片 然后再开始读取场景数据
@xxx = Sprite.new
@xxx.bitmap.new = RPG:Cache.....
Thread.new {
......
.....
}
这样处理试试看

可能我不是太会使用这个脚本。。。。。。。。{/gg}
不是十分理解,不过秀大可能把我的问题理解错误,并不是这个脚本完全不起作用,而是不完整。其实我没有自定义图片,用的都是你的默认的那种,其实效果也非常不错。。而问题是插入你的脚本后在过场动画剧情的的时候会有now loading显示。。就是说这个脚本实现了一些功能,其实是生效的。。。可是因为背景图都十分的大型(使用了大型的三远景脚本,而这些过场动画是用事件做成的,方法是事件:场所移动:[003,地图名],(000,000),就是自动场所移动,上面用事件做出人物动画,对话之类的东西,这种过场剧情也是比较普遍的做法),不知道是不是电脑的问题,当now loading显示后背景图片依然没有显示(其实背景图可能已经读入,因为地图提示脚本已经报出地名),而是背景图没有显示出来而造成黑色的一片,而本身我用事件强行等待一段时间是可以显示的,只是这个方法没有智能,几乎不管电脑好坏,一律等待。。。造成了游戏流程方面有很大的破坏,虽然是解决了问题,可是好像就是一种璋眼法一类的东西。。。。头痛。。。如果秀大的脚本能够处理像这些问题的话,那么我就不用想的头都暴了。。。{/cy}
看了看你的代码,这个脚本的功能好像是在不同场景中过场(战斗和地图切换的时候就会有,还有开始的时候标题也会有,而真正在同是地图场景中剧情过场要用到的时候反而没有了,可能是我用法有误。。。汗)的时候自行调用而出现loading图片,当图片什么的读入时候解冻,不好的是图片没有完全显示的时候就解冻了(造成了图片没有显示的时候自动事件已经开始,剧情在一片“黑暗”中进行),我想最好是做成当图片没有显示的时候,一律把所有的东西都冻结,等所有图片都显示完毕然后再解封。。。这个是所有loading的最基本的功能,不过可能rm实现这个可能真的非常困难。。。。如果没有办法也就这样了。。。用这个再配合一下等待,也就过去了。。。。。。。。还有就是当在原地图同场景过场也是会读入的(当一段剧情过后,要清除一些角色,重订场景,再做一段新的剧情,这样背景图就会再次读入,可是这个时候就没有loading了。。。。)其实我觉得这个脚本思路方向上有点错误,应该做成可以用事件脚本调用的那种就更好了。。。这样就可以解决原地同场景过场的问题了。并且也可以让作者有选择的使用这个。。。不然没有需要这个的时候也有,真正要的时候反而没有用到。
作者: TERENCE    时间: 2008-9-28 00:16
其实我们好像都误会这个脚本的功能了!
误会秀秀这一句......

功能: 实现了场景转换用 NowLonding 画面来读取数据......

这里的场景转换並非指的是事件中的场所移动
是指$scene的转换,换句话说.....
MS游戏如果执行到$scene = ****.new时,就会有NowLonding效果
[LINE]1,#dddddd[/LINE]
之所以场所移动沒调用NowLonding效果
因为游戏这之间都是在$scene=Scene_Map.new下。
作者: dbshy    时间: 2008-9-28 00:44
以下引用灯笼菜刀王于2008-9-26 21:44:55的发言:

所以了? @@ori.call(*args)这里的@@ori是引用了method的方法还是 Graphics的方法?

抱歉= =,DBSHY君的那些文字组合给我的信息好象有反作用~~~

本来我根据夏娜殿的解说,@@ori.call应该是引用了method的方法~~现在觉得好象自己理解错了...

= =我现在想知道这部分内容是属于什么的~,F1里搜不到帮助,我怕这样下去我的问题会越来越多~~,还是系统的完整学比较好....


你如果不理解的话,看成跟 实例变量 一样,不过还是有区别
类变量是一种被类、子类以及它们的实例所共享的全局变量

method 是将self的方法对象化后得到方法对象,封装了方法
@ORZ.CALL 是运行封装在 方法对象 中的 方法

PS:问题越来越多,去提问区去问吧,感觉答这样的问题比新手问题简单的多 XD

作者: lhbadsl    时间: 2008-9-28 01:34
其实我们好像都误会这个脚本的功能了!
误会秀秀这一句......


功能: 实现了场景转换用 NowLonding 画面来读取数据......

这里的场景转换並非指的是事件中的场所移动
是指$scene的转换,换句话说.....
MS游戏如果执行到$scene = ****.new时,就会有NowLonding效果

--------------------------------------------------------------------------------

之所以场所移动沒调用NowLonding效果,
因为游戏这之间都是在$scene=Scene_Map.new下。

问题我倒不是误会了,其实我解决了这个问题,就是在要调用的时候用事件脚本写上
$scene = nil
$scene=Scene_Map.new

强行中断场景就可以在同样的地图场景中随时调用了,同场景的事件中照旧可以使用,不过问题就是就算是调用过后还是没有完全显示背景图,脚本上没有卡住。。。哎。。和我的想像中不太一样啊。。。。。。并不是说这个脚本不好。。。只是没有解决我的问题而已。你知道我不是来学习这个而是要真正想把这个脚本应用起来的。。。。。。。loading最重要是卡住和调用过后完全显示图片(当然也要显示其他的东西了,不过我就想要显示大型的背景图就可以了,其他的都非常容易显示)。。。。。用尽了一切脚本的事件的方法还是没有在这个脚本的架构内完全解决问题。。。可惜。。。
作者: 轮回者    时间: 2008-9-28 20:55
以下引用TERENCE于2008-9-26 9:06:19的发言:

秀秀殿
可不可以加上一个游戏开关来控制.....
想用NowLonding的时候就把开关给ON
不想用时则反之为OFF....
这样活用的空间可以更广,
才不会每次场景转换都用 NowLonding 画面


这里:if self.method_defined? :main
改为:if self.method_defined?(:main) and $g_v[X] # 某开关对应的脚本


作者: 轮回者    时间: 2008-9-28 21:00
以下引用灯笼菜刀王于2008-9-26 21:44:55的发言:

所以了? @@ori.call(*args)这里的@@ori是引用了method的方法还是 Graphics的方法?

抱歉= =,DBSHY君的那些文字组合给我的信息好象有反作用~~~

本来我根据夏娜殿的解说,@@ori.call应该是引用了method的方法~~现在觉得好象自己理解错了...

= =我现在想知道这部分内容是属于什么的~,F1里搜不到帮助,我怕这样下去我的问题会越来越多~~,还是系统的完整学比较好....


我来解释一下脚本好了……

module Graphics
# 利用"method"方法将原"transition"方法储存至类变量@@ori
@@ori = method("transition")
# 定义新的transition方法
def self.transition(*args)
    # 调用StartNowLondingTr模块的stop
    StartNowLondingTr.stop
    # 调用原"transition"方法
    @@ori.call(*args)
end  
end  


作者: 轮回者    时间: 2008-9-28 21:02
以下引用lhbadsl于2008-9-27 17:34:47的发言:
  $scene = nil
  $scene=Scene_Map.new
[本贴由作者于 2008-9-27 18:21:49 最后编辑]

个人认为这么做是不对的。
作者: lhbadsl    时间: 2008-9-29 01:05
个人认为这么做是不对的。

我也知道不对,会出现非常多问题,如果是三远景的话更会令到后面的loading进入死循环,只是我急于试用这个脚本的功能而已。。。。。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1