Project1

标题: RMXP脚本问题 [打印本页]

作者: 夕仔    时间: 2014-9-18 17:56
标题: RMXP脚本问题
用$sence0=Alert.new("停顿了")调用,在地图中全局都停止了,直到消息框消失,角色才能动。请问要怎么解决,同时又要让 消息框停留几秒时间
  1. class Alert
  2.   def initialize(str)
  3.     @str = str
  4.     @view = Viewport.new(195,150,250,40)
  5.     @view.z = 9999
  6.     @back = Sprite.new(@view)
  7.     @back.bitmap = RPG::Cache.picture("提醒背景")
  8.     @back.bitmap.font.size = 16
  9.     @back.bitmap.font.name = ["宋体"]
  10.     @back.bitmap.draw_text(10,0,200,40,@str)
  11.     i  = 0
  12.     #通用循环==========================================================
  13.       Graphics.transition

  14.       loop do
  15.         Graphics.update
  16.         Graphics.update
  17.       Input.update
  18. #        update
  19.         if i >= 25
  20.           break
  21.         end
  22.         i +=1
  23.       end
  24.     #===================================================================
  25.     @view.dispose
  26.     @back.bitmap.dispose
  27.     @back.dispose
  28.   end
  29. end
复制代码

作者: RyanBern    时间: 2014-9-18 21:09
本帖最后由 RyanBern 于 2014-9-19 08:31 编辑

如果想在地图上生成一个提示框比较恰当的做法是把它整合到地图场景(Scene_Map)里面去而不是独立于场景之外单独生成它。下面是参考的做法:
RUBY 代码复制
  1. class Sprite_Alert < Sprite
  2.   def initialize(text)
  3.     @viewport = Viewport.new(195, 150, 250, 40)
  4.     @viewport.z = 9999
  5.     super(@viewport)
  6.     self.visible = false
  7.   end
  8.   def text=(text)
  9.     if @text != text
  10.       @text = text
  11.       if self.bitmap != nil
  12.         self.bitmap.dispose
  13.         self.bitmap = nil
  14.       end
  15.       self.bitmap = RPG::Cache.picture("提醒背景")
  16.       self.bitmap.font.size = 16
  17.       self.bitmap.font.size.name = ["宋体"]
  18.       self.bitmap.draw_text(10, 0, 200, 40, @text)
  19.     end
  20.   end
  21.   def dispose
  22.     @viewport.dispose
  23.     super
  24.   end
  25. end

做好这个简易的类之后,在Scene_Map中加入它的自动更新部分即可。这里只是个简易版本,没有淡入淡出什么的。实际使用中,在地图场景下调用
RUBY 代码复制
  1. $scene.alert_start

可以看到效果。
调用:
RUBY 代码复制
  1. $scene.change_alert_text("新文字")

可以改变提示的文字。
RUBY 代码复制
  1. class Scene_Map
  2.   alias rb_main main
  3.   def main
  4.     @alert= Sprite_Alert.new("提示文字")
  5.     @alert_showing = 0
  6.     rb_main
  7.     @alert.dispose
  8.   end
  9.   alias rb_update update
  10.   def update
  11.     if @alert_showing > 0
  12.       @alert_showing -= 1
  13.     end
  14.     if @alert_showing == 0
  15.       @alert.visible = false
  16.     end
  17.     rb_update
  18.   end
  19.   def alert_start
  20.      # 在这里可以设置提示停留的时间,40帧/秒
  21.     @alert_showing = 40
  22.     @alert.visible = true
  23.   end
  24.   def change_alert_text(new_text)
  25.     @alert.text = new_text
  26.   end
  27. end

没有进行测试,有问题通知我下。
作者: 夕仔    时间: 2014-9-18 22:34
RyanBern 发表于 2014-9-18 21:09
如果想在地图上生成一个提示框比较恰当的做法是把它整合到地图场景(Scene_Map)里面去而不是独立于场景之外 ...

$scene.alert_start  放在 def update 的 loop do 里面
然后新建了两个组分别放那两个类
作者: 夕仔    时间: 2014-9-18 22:50
RyanBern 发表于 2014-9-18 21:09
如果想在地图上生成一个提示框比较恰当的做法是把它整合到地图场景(Scene_Map)里面去而不是独立于场景之外 ...

        $scene.alert_start
        $scene.change_alert_text("新文字")

我用脚本一起调用了这两个 可以了 谢谢
作者: 夕仔    时间: 2014-9-18 23:55
RyanBern 发表于 2014-9-18 21:09
如果想在地图上生成一个提示框比较恰当的做法是把它整合到地图场景(Scene_Map)里面去而不是独立于场景之外 ...

发现bug了...第二调用 换别的内容,会和第一次调用的内容重叠
作者: 夕仔    时间: 2014-9-27 21:31
RyanBern 发表于 2014-9-18 21:09
如果想在地图上生成一个提示框比较恰当的做法是把它整合到地图场景(Scene_Map)里面去而不是独立于场景之外 ...

问个问题
我在其他窗口调用 你这个脚本的时候 消息框不会消失 当返回地图的时候 消息框才会消失

下面是脚本
  1. # 作者:风若·飘絮
  2. # 二次更改:个快快
  3. # 三次更改:夕仔
  4. class Rw_Cw
  5.   def initialize
  6. @sjx=180
  7. @sjy=128
  8.     @view = Viewport.new(160,144,319,191)
  9.     @view.z = 9998
  10.     @back = Sprite.new(@view)
  11.     @back.x  = 0
  12.     @back.y  = 0
  13.     @back.bitmap = RPG::Cache.picture("宠物.png")
  14.     @art = Bitmap.new(257,451)
  15.     @a = Sprite.new(@view)
  16.     @a.bitmap = @art
  17.     @a.bitmap.font.size = 15
  18.     @a.bitmap.font.name = ["宋体","方正像素16"]#方正像素16
  19.     @a.bitmap.font.color = Color.new(0,0,0)
  20.     @jn = Window_Command1.new(130,["杯具","杯具"],1,22)
  21.     @jn.x = 320 #563
  22.     @jn.y = 235 #235
  23.     @jn.contents_opacity = 0
  24.     @jn.opacity  = 0
  25.     @jn.back_opacity = 0
  26.     @jnblt = RPG::Cache.picture("升级1")
  27.    
  28.    @sprite = Sprite.new(@view)
  29.    @sprite.bitmap = Bitmap.new(319,191)
  30.    @sprite.bitmap.font.size = 15
  31.    @sprite.bitmap.font.name = ["黑体"]
  32.    @sprite.bitmap.font.color = Color.new(0,0,0)
  33.    
  34. $dqjy = $game_party.actors[0].exp
  35.    if $sxjy == nil
  36.      $zhengshisxjy=1
  37.      $cwjl=0
  38.    $sxjy = 1
  39.    
  40.    
  41.     end
  42.    
  43.     refresh
  44.     Graphics.transition
  45.     loop do
  46.       Graphics.update
  47.       Graphics.update
  48.       Input.update
  49.       update
  50.       if Input.trigger?(Input::B)
  51.        # $scene0 = nil
  52.         break
  53.       end
  54.     end
  55.    
  56.    @jn.dispose
  57.    @back.dispose
  58.    @a.bitmap.dispose
  59.    @art.dispose
  60.    @view.dispose
  61.   @sprite.dispose
  62.    
  63. end
  64.    
  65.   def shengji
  66. $dqjy = $game_party.actors[0].exp

  67. a = $dqjy - $sxjy
  68.    if a > 0
  69.      $game_party.actors[0].exp -= $sxjy
  70.      $sxjy *= 2
  71.      $zhengshisxjy *= 2
  72.      $cwjl += 1
  73.      $sxjy = $zhengshisxjy
  74.      refresh
  75.    else
  76.      $sxjy -=$game_party.actors[0].exp
  77.      $game_party.actors[0].exp = 0
  78.      if $sxjy == 0
  79.      $sxjy *= 2
  80.      $zhengshisxjy *= 2
  81.      $cwjl += 1
  82.      $sxjy = $zhengshisxjy
  83.      refresh
  84.    else
  85.      refresh
  86.         $scene.alert_start
  87.         $scene.change_alert_text("经验不足")
  88.     end
  89.     end
  90.   end

  91.   def update
  92.    
  93.    @jn.update
  94.    @jnblt = RPG::Cache.picture("升级1") #175,380
  95.    @a.bitmap.blt(@sjx,@sjy,@jnblt,Rect.new(0,0,130,22))

  96.       a = @jn.index
  97.     case @jn.index
  98.      when 1
  99.         @jnblt = RPG::Cache.picture("升级3")
  100.         @a.bitmap.blt(@sjx,@sjy,@jnblt,Rect.new(0,0,130,22))
  101.        if Input.trigger?(Input::C)
  102.          # 命令窗口的光标位置的分支
  103.           @jnblt = RPG::Cache.picture("升级2")
  104.           @a.bitmap.blt(@sjx,@sjy,@jnblt,Rect.new(0,0,130,22))
  105.           @jn.active = false
  106.           shengji
  107. #          @jnn = Rw_Jn.new(@id)
  108.        end
  109.      end
  110.    
  111.    end
  112.   def refresh
  113.   @a.bitmap.clear
  114.   @a.bitmap.blt(@sjx,@sjy,@jnblt,Rect.new(0,0,130,22))
  115.    @sprite.bitmap.clear
  116.    @sprite.bitmap.draw_text(215,49,100,30,"悲鸟爱飞")
  117.    @sprite.bitmap.draw_text(215,72,100,30,$cwjl)
  118.    @sprite.bitmap.draw_text(215,97,100,30,$sxjy)
  119. #   @sprite.bitmap.draw_text(230,122,100,30,"0/100")
  120. #   @sprite.bitmap.blt(65,65,@s,@rect)
  121.   end
  122. end
复制代码





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