查看: 1901|回复: 5

[已经解决] RMXP脚本问题

[复制链接]
梦石
0
星屑
85
在线时间
210 小时
注册时间
2013-7-26
回帖
265
发表于 2014-9-18 17:56:41 | 显示全部楼层 |阅读模式

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

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

×
用$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
复制代码
梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2014-9-18 21:09:27 | 显示全部楼层
本帖最后由 RyanBern 于 2014-9-19 08:31 编辑

如果想在地图上生成一个提示框比较恰当的做法是把它整合到地图场景(Scene_Map)里面去而不是独立于场景之外单独生成它。下面是参考的做法:
[pre lang="Ruby"]class Sprite_Alert < Sprite
  def initialize(text)
    @viewport = Viewport.new(195, 150, 250, 40)
    @viewport.z = 9999
    super(@viewport)
    self.visible = false
  end
  def text=(text)
    if @text != text
      @text = text
      if self.bitmap != nil
        self.bitmap.dispose
        self.bitmap = nil
      end
      self.bitmap = RPG::Cache.picture("提醒背景")
      self.bitmap.font.size = 16
      self.bitmap.font.size.name = ["宋体"]
      self.bitmap.draw_text(10, 0, 200, 40, @text)
    end
  end
  def dispose
    @viewport.dispose
    super
  end
end[/pre]
做好这个简易的类之后,在Scene_Map中加入它的自动更新部分即可。这里只是个简易版本,没有淡入淡出什么的。实际使用中,在地图场景下调用
[pre lang="Ruby"]$scene.alert_start[/pre]
可以看到效果。
调用:
[pre lang="Ruby"]$scene.change_alert_text("新文字")[/pre]
可以改变提示的文字。
[pre lang="Ruby"]class Scene_Map
  alias rb_main main
  def main
    @alert= Sprite_Alert.new("提示文字")
    @alert_showing = 0
    rb_main
    @alert.dispose
  end
  alias rb_update update
  def update
    if @alert_showing > 0
      @alert_showing -= 1
    end
    if @alert_showing == 0
      @alert.visible = false
    end
    rb_update
  end
  def alert_start
     # 在这里可以设置提示停留的时间,40帧/秒
    @alert_showing = 40
    @alert.visible = true
  end
  def change_alert_text(new_text)
    @alert.text = new_text
  end
end[/pre]
没有进行测试,有问题通知我下。

点评

OK可以了 谢谢  发表于 2014-9-19 13:00
改了最后一段脚本的14行,是笔误。这回再看看。  发表于 2014-9-18 22:35
谢谢,是显示出来了,可是不会释放,不会消失..  发表于 2014-9-18 22:29

评分

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

查看全部评分

回复

使用道具 举报

梦石
0
星屑
85
在线时间
210 小时
注册时间
2013-7-26
回帖
265
 楼主| 发表于 2014-9-18 22:34:35 | 显示全部楼层
RyanBern 发表于 2014-9-18 21:09
如果想在地图上生成一个提示框比较恰当的做法是把它整合到地图场景(Scene_Map)里面去而不是独立于场景之外 ...

$scene.alert_start  放在 def update 的 loop do 里面
然后新建了两个组分别放那两个类

点评

你想要它显示的时候就随时可以调用(调用完毕后经过固定时间会自动消失),比较有灵活性。如果你是想周期地调用,还需要改动。  发表于 2014-9-18 22:49
。。每次都要调用? 还是调用一次就好了?  发表于 2014-9-18 22:44
这么使用是不对的,$scene.alert_start是即时调用脚本,可以在事件脚本中使用,不能放到loop do里面。  发表于 2014-9-18 22:42
回复

使用道具 举报

梦石
0
星屑
85
在线时间
210 小时
注册时间
2013-7-26
回帖
265
 楼主| 发表于 2014-9-18 22:50:16 | 显示全部楼层
RyanBern 发表于 2014-9-18 21:09
如果想在地图上生成一个提示框比较恰当的做法是把它整合到地图场景(Scene_Map)里面去而不是独立于场景之外 ...

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

我用脚本一起调用了这两个 可以了 谢谢
回复

使用道具 举报

梦石
0
星屑
85
在线时间
210 小时
注册时间
2013-7-26
回帖
265
 楼主| 发表于 2014-9-18 23:55:03 | 显示全部楼层
RyanBern 发表于 2014-9-18 21:09
如果想在地图上生成一个提示框比较恰当的做法是把它整合到地图场景(Scene_Map)里面去而不是独立于场景之外 ...

发现bug了...第二调用 换别的内容,会和第一次调用的内容重叠

点评

已更改(第一个脚本11~14行),这回呢?  发表于 2014-9-19 08:32
回复

使用道具 举报

梦石
0
星屑
85
在线时间
210 小时
注册时间
2013-7-26
回帖
265
 楼主| 发表于 2014-9-27 21:31:55 | 显示全部楼层
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
复制代码

点评

调用方法 是 $secne0=Rw_Cw.new  发表于 2014-9-27 22:19
只要是在地图上(Scene_Map)打开这个消息框,它的消失就没有问题。如果在别的场景打开消息框肯定不能消除。你这个Rw_Cw是一个场景的类吗?  发表于 2014-9-27 21:49
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部