本帖最后由 RyanBern 于 2014-11-2 20:44 编辑
可能出现的问题:
1.如果TEXT为空会发生RGSSError
几个个人方面的建议:
1.变量还可以精简下,不必用到的变量目前发现有@return_scene和局部变量y(控制那个循环可以用@sprite.y控制)。
2.为什么要用平面来生成图形呢?是为了能够无缝拼接吗?其实很少有人使用Panorama里面的图片当背景,所以还是单纯的Sprite为好。
3.用Window作为载体看起来好不习惯,建议使用Sprite+Viewport,好处是结构简单,而且可以限制字幕在屏幕上的区域(Viewport的神奇作用)
↓瞎改的,最好不要用
class Scene_Credit TEXT = <<END_CREDIT 静夜思 [唐]李白 床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。 END_CREDIT end class Sprite_Credit < Sprite def initialize(text, viewport = nil) super(viewport) # 根据显示区域的不同改变那个w w = 640 self.bitmap = Bitmap.new(w, text.size == 0 ? 1 : text.size * 32) refresh end def refresh for i in 0...text.size self.bitmap.draw_text(0,i*32,640,32,text[i], 1) end end end class Scene_Credit def main Audio.bgm_play("Audio/BGM/End Credits", 100, 100) @sprite = Sprite.new @sprite.bitmap = RPG::Cache.title("001-Title01") @view = Viewport.new(50, 50, 400, 200) @sprite_credit = Sprite_Credit.new(TEXT.split("\n"), @view) @sprite_credit.y = @view.rect.height Graphics.transition while @view.oy <= @sprite_credit.bitmap.height + @view.rect.height @view.oy += 2 Graphics.update end Graphics.freeze @sprite_credit.dispose @view.dispose @sprite.bitmap.dispose @sprite.dispose $scene = Scene_Title.new end end
class Scene_Credit
TEXT = <<END_CREDIT
静夜思
[唐]李白
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
END_CREDIT
end
class Sprite_Credit < Sprite
def initialize(text, viewport = nil)
super(viewport)
# 根据显示区域的不同改变那个w
w = 640
self.bitmap = Bitmap.new(w, text.size == 0 ? 1 : text.size * 32)
refresh
end
def refresh
for i in 0...text.size
self.bitmap.draw_text(0,i*32,640,32,text[i], 1)
end
end
end
class Scene_Credit
def main
Audio.bgm_play("Audio/BGM/End Credits", 100, 100)
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title("001-Title01")
@view = Viewport.new(50, 50, 400, 200)
@sprite_credit = Sprite_Credit.new(TEXT.split("\n"), @view)
@sprite_credit.y = @view.rect.height
Graphics.transition
while @view.oy <= @sprite_credit.bitmap.height + @view.rect.height
@view.oy += 2
Graphics.update
end
Graphics.freeze
@sprite_credit.dispose
@view.dispose
@sprite.bitmap.dispose
@sprite.dispose
$scene = Scene_Title.new
end
end
|