Project1
标题: RMXP脚本问题 [打印本页]
作者: 夕仔 时间: 2014-9-18 17:56
标题: RMXP脚本问题
用$sence0=Alert.new("停顿了")调用,在地图中全局都停止了,直到消息框消失,角色才能动。请问要怎么解决,同时又要让 消息框停留几秒时间- class Alert
- def initialize(str)
- @str = str
- @view = Viewport.new(195,150,250,40)
- @view.z = 9999
- @back = Sprite.new(@view)
- @back.bitmap = RPG::Cache.picture("提醒背景")
- @back.bitmap.font.size = 16
- @back.bitmap.font.name = ["宋体"]
- @back.bitmap.draw_text(10,0,200,40,@str)
- i = 0
- #通用循环==========================================================
- Graphics.transition
- loop do
- Graphics.update
- Graphics.update
- Input.update
- # update
- if i >= 25
- break
- end
- i +=1
- end
- #===================================================================
- @view.dispose
- @back.bitmap.dispose
- @back.dispose
- end
- end
复制代码
作者: RyanBern 时间: 2014-9-18 21:09
本帖最后由 RyanBern 于 2014-9-19 08:31 编辑
如果想在地图上生成一个提示框比较恰当的做法是把它整合到地图场景(Scene_Map)里面去而不是独立于场景之外单独生成它。下面是参考的做法:
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
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
做好这个简易的类之后,在Scene_Map中加入它的自动更新部分即可。这里只是个简易版本,没有淡入淡出什么的。实际使用中,在地图场景下调用
可以看到效果。
调用:
$scene.change_alert_text("新文字")
$scene.change_alert_text("新文字")
可以改变提示的文字。
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
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
没有进行测试,有问题通知我下。
作者: 夕仔 时间: 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)里面去而不是独立于场景之外 ...
问个问题
我在其他窗口调用 你这个脚本的时候 消息框不会消失 当返回地图的时候 消息框才会消失
下面是脚本- # 作者:风若·飘絮
- # 二次更改:个快快
- # 三次更改:夕仔
- class Rw_Cw
- def initialize
- @sjx=180
- @sjy=128
- @view = Viewport.new(160,144,319,191)
- @view.z = 9998
- @back = Sprite.new(@view)
- @back.x = 0
- @back.y = 0
- @back.bitmap = RPG::Cache.picture("宠物.png")
- @art = Bitmap.new(257,451)
- @a = Sprite.new(@view)
- @a.bitmap = @art
- @a.bitmap.font.size = 15
- @a.bitmap.font.name = ["宋体","方正像素16"]#方正像素16
- @a.bitmap.font.color = Color.new(0,0,0)
- @jn = Window_Command1.new(130,["杯具","杯具"],1,22)
- @jn.x = 320 #563
- @jn.y = 235 #235
- @jn.contents_opacity = 0
- @jn.opacity = 0
- @jn.back_opacity = 0
- @jnblt = RPG::Cache.picture("升级1")
-
- @sprite = Sprite.new(@view)
- @sprite.bitmap = Bitmap.new(319,191)
- @sprite.bitmap.font.size = 15
- @sprite.bitmap.font.name = ["黑体"]
- @sprite.bitmap.font.color = Color.new(0,0,0)
-
- $dqjy = $game_party.actors[0].exp
- if $sxjy == nil
- $zhengshisxjy=1
- $cwjl=0
- $sxjy = 1
-
-
- end
-
- refresh
- Graphics.transition
- loop do
- Graphics.update
- Graphics.update
- Input.update
- update
- if Input.trigger?(Input::B)
- # $scene0 = nil
- break
- end
- end
-
- @jn.dispose
- @back.dispose
- @a.bitmap.dispose
- @art.dispose
- @view.dispose
- @sprite.dispose
-
- end
-
- def shengji
- $dqjy = $game_party.actors[0].exp
- a = $dqjy - $sxjy
- if a > 0
- $game_party.actors[0].exp -= $sxjy
- $sxjy *= 2
- $zhengshisxjy *= 2
- $cwjl += 1
- $sxjy = $zhengshisxjy
- refresh
- else
- $sxjy -=$game_party.actors[0].exp
- $game_party.actors[0].exp = 0
- if $sxjy == 0
- $sxjy *= 2
- $zhengshisxjy *= 2
- $cwjl += 1
- $sxjy = $zhengshisxjy
- refresh
- else
- refresh
- $scene.alert_start
- $scene.change_alert_text("经验不足")
- end
- end
- end
- def update
-
- @jn.update
- @jnblt = RPG::Cache.picture("升级1") #175,380
- @a.bitmap.blt(@sjx,@sjy,@jnblt,Rect.new(0,0,130,22))
- a = @jn.index
- case @jn.index
- when 1
- @jnblt = RPG::Cache.picture("升级3")
- @a.bitmap.blt(@sjx,@sjy,@jnblt,Rect.new(0,0,130,22))
- if Input.trigger?(Input::C)
- # 命令窗口的光标位置的分支
- @jnblt = RPG::Cache.picture("升级2")
- @a.bitmap.blt(@sjx,@sjy,@jnblt,Rect.new(0,0,130,22))
- @jn.active = false
- shengji
- # @jnn = Rw_Jn.new(@id)
- end
- end
-
- end
- def refresh
- @a.bitmap.clear
- @a.bitmap.blt(@sjx,@sjy,@jnblt,Rect.new(0,0,130,22))
- @sprite.bitmap.clear
- @sprite.bitmap.draw_text(215,49,100,30,"悲鸟爱飞")
- @sprite.bitmap.draw_text(215,72,100,30,$cwjl)
- @sprite.bitmap.draw_text(215,97,100,30,$sxjy)
- # @sprite.bitmap.draw_text(230,122,100,30,"0/100")
- # @sprite.bitmap.blt(65,65,@s,@rect)
- end
- end
复制代码
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |