Project1
标题:
求该脚本的优化
[打印本页]
作者:
TheRebirth
时间:
2012-8-17 12:05
标题:
求该脚本的优化
本帖最后由 TheRebirth 于 2012-8-18 19:04 编辑
优化前弊病:进入画质设置(标题画面中第三个选项(此时$index = 2))界面时FPS会明显降低
Ex:为防止剽窃,图像素材和音乐素材都未放出
class Scene_Title < Scene_Base
def start
@sprite1 = TitleSprite1.new
@sprite2 = TitleSprite2.new
$index = 0
end
def update
if $switch == 1
@sprite3 = TitleSprite3.new
@sprite32 = TitleSprite32.new
@sprite4 = TitleSprite4.new
@sprite5 = TitleSprite5.new
@sprite6 = TitleSprite6.new
@sprite7 = TitleSprite7.new
@sprite8 = TitleSprite8.new
@sprite9 = TitleSprite9.new
@sprite10 = TitleSprite10.new
@sprite10.x = 500
@sprite10.y = 120
$switch = 4
Audio.bgm_play("Audio/BGM/Title.ogg") #LOOP;START=6027890;LENGTH=6027310
elsif $switch == 4
@sprite3.update
@sprite32.update
@sprite4.update
@sprite5.update
@sprite6.update
@sprite7.update
@sprite8.update
@sprite9.update
@sprite10.update if @sprite6.opacity == 255
if Input.trigger?(Input::UP)
Audio.se_play("Audio/SE/Switch.ogg", 100, 100)
$index -= 1
$index = 3 if $index < 0
case $index
when 0
@sprite10.x = 500
@sprite10.y = 120
when 1
@sprite10.x = 475
@sprite10.y = 170
when 2
@sprite10.x = 450
@sprite10.y = 220
when 3
@sprite10.x = 425
@sprite10.y = 270
end
elsif Input.trigger?(Input::DOWN)
Audio.se_play("Audio/SE/Switch.ogg", 100, 100)
$index += 1
$index = 0 if $index > 3
case $index
when 0
@sprite10.x = 500
@sprite10.y = 120
when 1
@sprite10.x = 475
@sprite10.y = 170
when 2
@sprite10.x = 450
@sprite10.y = 220
when 3
@sprite10.x = 425
@sprite10.y = 270
end
elsif Input.trigger?(Input::C)
case $index
when 0
$switch = 6
@sprite10.opacity = 0
@sprite13 = TitleSprite13.new
$index2 = 0
$page = 1
@sprite12 = TitleSprite12.new
@sprite12.x = 48
@sprite12.y = 115
when 1
$switch = 7
@sprite10.opacity = 0
@sprite13 = TitleSprite13.new
$index2 = 0
$page = 1
@sprite12 = TitleSprite12.new
@sprite12.x = 48
@sprite12.y = 115
when 2
@sprite10.opacity = 0
$index3 = 0
@time = 0
@sprite6.vx = 0
@sprite7.vx = 0
@sprite8.vx = 0
@sprite9.vx = 0
for i in 0...64
@time += 1
Graphics.wait(1)
@sprite4.x -= 1 if @sprite4.opacity != 0
@sprite5.x += 3 if @sprite4.opacity != 0
@sprite6.vx += 4 if @sprite6.opacity != 0
@sprite7.vx += 4 if @sprite7.opacity != 0
@sprite8.vx += 4 if @sprite8.opacity != 0
@sprite9.vx += 4 if @sprite9.opacity != 0
@sprite3.opacity -= 8
@sprite4.opacity -= 8
@sprite5.opacity -= 8
@sprite6.opacity -= 8
@sprite7.opacity -= 8
@sprite8.opacity -= 8
@sprite9.opacity -= 8
@sprite32.opacity -= 4
if @time == 64
@sprite4.dispose
@sprite5.dispose
@sprite12 = TitleSprite12.new
@sprite12.zoom_y = 0.90
@sprite14 = TitleSprite14.new
@sprite15 = TitleSprite15.new
@sprite16 = TitleSprite16.new
@sprite12.x = 94
@sprite12.y = 144
$switch = 8
end
end
when 3
@sprite10.opacity = 0
Audio.bgm_fade(750)
@sprite6.vx = 0
@sprite7.vx = 0
@sprite8.vx = 0
@sprite9.vx = 0
@sprite6.sx = @sprite6.x << 5
@sprite7.sx = @sprite7.x << 5
@sprite8.sx = @sprite8.x << 5
@sprite9.sx = @sprite9.x << 5
$switch = 999
loop do
Graphics.wait(1)
@sprite6.update
@sprite7.update
@sprite8.update
@sprite9.update
@sprite4.x -= 1
@sprite5.x += 2
@sprite6.vx += 2
@sprite7.vx += 2
@sprite8.vx += 2
@sprite9.vx += 2
@sprite32.opacity -= 8
@sprite4.opacity -= 8
@sprite5.opacity -= 8
@sprite6.opacity -= 8
@sprite7.opacity -= 8
@sprite8.opacity -= 8
@sprite9.opacity -= 8
exit if @sprite6.opacity == 0
end
end
end
elsif $switch == 6
@sprite13.update
@sprite12.update if @sprite13.opacity == 255
@sprite12.x = 45
@sprite12.y = 112 + $index2 * 30
if Input.repeat?(Input::UP)
$index2 -= 1
$index2 = 0 if $index2 > 9
$index2 = 9 if $index2 < 0
elsif Input.repeat?(Input::DOWN)
$index2 += 1
$index2 = 0 if $index2 > 9
$index2 = 9 if $index2 < 0
elsif Input.trigger?(Input::LEFT)
$page -= 1
$page = 2 if $page < 1
@sprite13.bitmap = Cache.load_bitmap("Title#{3+$page}-2")
elsif Input.repeat?(Input::RIGHT)
$page += 1
$page = 1 if $page > 2
@sprite13.bitmap = Cache.load_bitmap("Title#{3+$page}-2")
elsif Input.repeat?(Input::C)
if $page == 1
case $index2
when 0
when 1
when 2
when 3
when 4
when 5
when 6
when 7
when 8
when 9
end
elsif $page == 2
case $index2
when 0
when 1
when 2
when 3
when 4
when 5
when 6
when 7
when 8
when 9
@sprite12.dispose
@sprite13.dispose
@sprite10.x = 500
@sprite10.y = 120
$index = 0
$index2 = 0
$switch = 4
GC.start
end
end
end
elsif $switch == 7
@sprite13.update
@sprite12.update if @sprite13.opacity == 255
@sprite12.x = 45
@sprite12.y = 112 + $index2 * 30
if Input.repeat?(Input::UP)
$index2 -= 1
$index2 = 0 if $index2 > 9
$index2 = 9 if $index2 < 0
elsif Input.repeat?(Input::DOWN)
$index2 += 1
$index2 = 0 if $index2 > 9
$index2 = 9 if $index2 < 0
elsif Input.trigger?(Input::LEFT)
$page -= 1
$page = 2 if $page < 1
@sprite13.bitmap = Cache.load_bitmap("Title#{3+$page}")
elsif Input.repeat?(Input::RIGHT)
$page += 1
$page = 1 if $page > 2
@sprite13.bitmap = Cache.load_bitmap("Title#{3+$page}")
elsif Input.repeat?(Input::C)
if $page == 1
case $index2
when 0
when 1
when 2
when 3
when 4
when 5
when 6
when 7
when 8
when 9
end
elsif $page == 2
case $index2
when 0
when 1
when 2
when 3
when 4
when 5
when 6
when 7
when 8
when 9
@sprite12.dispose
@sprite13.dispose
@sprite10.x = 500
@sprite10.y = 170
$index = 1
$index2 = 0
$switch = 4
GC.start
end
end
end
elsif $switch == 8
@sprite14.update
@sprite12.update if @sprite16.opacity == 255
@sprite15.update if @sprite14.opacity == 255
@sprite16.update if @sprite14.opacity == 255
if @sprite16.opacity == 255
if Input.repeat?(Input::UP)
$index3 -= 1
$index3 = 6 if $index3 < 0
case $index3
when 0
@sprite12.x = 94
@sprite12.y = 144
@sprite12.zoom_y = 0.90
when 1
@sprite12.y = 176
@sprite12.zoom_y = 0.90
when 2
@sprite12.y = 208
@sprite12.zoom_y = 0.70
when 3
@sprite12.y = 232
@sprite12.zoom_y = 0.70
when 4
@sprite12.y = 256
@sprite12.zoom_y = 0.70
when 5
@sprite12.y = 280
@sprite12.zoom_y = 0.70
when 6
@sprite12.x = 80
@sprite12.y = 330
@sprite12.zoom_y = 1.50
end
elsif Input.repeat?(Input::DOWN)
$index3 += 1
$index3 = 0 if $index3 > 6
case $index3
when 0
@sprite12.x = 94
@sprite12.y = 144
@sprite12.zoom_y = 0.90
when 1
@sprite12.y = 176
@sprite12.zoom_y = 0.90
when 2
@sprite12.y = 208
@sprite12.zoom_y = 0.70
when 3
@sprite12.y = 232
@sprite12.zoom_y = 0.70
when 4
@sprite12.y = 256
@sprite12.zoom_y = 0.70
when 5
@sprite12.y = 280
@sprite12.zoom_y = 0.70
when 6
@sprite12.x = 80
@sprite12.y = 330
@sprite12.zoom_y = 1.50
end
elsif Input.trigger?(Input::LEFT)
elsif Input.trigger?(Input::RIGHT)
elsif Input.trigger?(Input::C)
case $index3
when 0
when 1
when 2
when 3
when 4
when 5
when 6
$switch = 81
@sprite12.dispose
@time = 0
end
end
end
elsif $switch == 81
@sprite15.update
@sprite16.update
@time += 1
@sprite15.x -= 2 if @sprite15.opacity != 0
@sprite15.opacity -= 8
@sprite16.opacity -= 8
if @time == 64
$switch = 82
end
elsif $switch == 82
@sprite14.update
@sprite14.opacity -= 8
if @sprite14.opacity == 0
$index = 2
@sprite6.vx = -128
@sprite7.vx = -128
@sprite8.vx = -128
@sprite9.vx = -128
@sprite6.x = 628
@sprite7.x = 603
@sprite8.x = 578
@sprite9.x = 553
@sprite6.sx = @sprite6.x << 5
@sprite7.sx = @sprite7.x << 5
@sprite8.sx = @sprite8.x << 5
@sprite9.sx = @sprite9.x << 5
$switch = 83
@sprite14.dispose
@sprite4 = TitleSprite4.new
@sprite5 = TitleSprite5.new
end
elsif $switch == 83
@sprite3.update
@sprite4.update
@sprite5.update
@sprite6.update
@sprite7.update
@sprite8.update
@sprite9.update
@sprite4.x += 1
@sprite5.x -= 1
@sprite6.vx += 2
@sprite7.vx += 2
@sprite8.vx += 2
@sprite9.vx += 2
@sprite3.opacity += 4
@sprite32.opacity += 1
@sprite6.opacity += 4
@sprite7.opacity += 4
@sprite8.opacity += 4
@sprite9.opacity += 4
if @sprite9.opacity == 255
$switch = 4
GC.start
end
else
@sprite1.update
@sprite2.update
end
end
end
复制代码
class TitleSprite1 < Sprite
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("Logo1")
self.ox = 64
self.oy = 64
self.x = 320
self.y = 240
self.z = 1
self.opacity = 0
@time = 0
end
def update
if not disposed?
self.opacity += 2 if self.opacity < 255 and @time <= 240
self.angle -= 3
@time += 1
if @time > 240
self.opacity -= 8 if self.opacity > 0
dispose if self.opacity <= 0
end
end
end
end
class TitleSprite2 < Sprite
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("Logo2")
self.ox = 200
self.oy = 64
self.x = 320
self.y = 240
self.z = 2
self.opacity = 0
@time = 0
end
def update
self.opacity += 3 if self.opacity < 255 and @time <= 240
@time += 1
if @time > 240
self.opacity -= 3 if self.opacity > 0
$switch = 1 if self.opacity <= 0
dispose if self.opacity <= 0
end
end
end
class TitleSprite3 < Sprite
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("Title1.jpg")
self.x = 0
self.y = 0
self.z = 1
self.opacity = 0
end
def update
super
self.opacity += 3 if self.opacity < 255
end
end
class TitleSprite32 < Sprite
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("Title1-2.png")
self.x = 0
self.y = 0
self.z = 2
self.opacity = 0
@time = 0
end
def update
super
@time += 1
@time = 0 if @time > 360
self.opacity += 2 if self.opacity < 96 and @time < 330
if @time < 360 and @time > 330
self.x = rand(64) - 32
self.opacity = rand(48) + 48
elsif @time == 0
self.x = 0
end
end
end
class TitleSprite4 < Sprite
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("Title2.png")
self.x = -128
self.y = 0
self.z = 5
self.opacity = 0
@sx = self.x << 4
@vx = 128
end
def update
@sx += @vx if @vx > 0
@vx -= 4 if @vx > 0
self.x = @sx >> 4
self.opacity += 3 if self.opacity < 255
end
end
class TitleSprite5 < Sprite
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("Title3.png")
self.ox = 320
self.oy = 240
self.x = 380
self.y = 240
self.z = 3
self.opacity = 0
end
def update
self.opacity += 4 if self.opacity < 255
self.x -= 1 if self.x > 320
end
end
class TitleSprite6 < Sprite
attr_accessor :vx
attr_accessor :sx
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("TitleSet1")
self.ox = 128
self.oy = 24
self.x = 628
self.y = 120
self.z = 3
self.opacity = 0
@sx = self.x << 5
@vx = -128
end
def update
if self.opacity < 255 and $switch < 10
@sx += @vx
self.x = @sx >> 5
self.opacity += 4
@vx += 2
elsif self.opacity < 255 and $switch >= 5
@sx += @vx
self.x = @sx >> 5
elsif $switch == 999
@sx += @vx
self.x = @sx >> 5
self.opacity -= 8
end
end
end
class TitleSprite7 < Sprite
attr_accessor :vx
attr_accessor :sx
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("TitleSet2")
self.ox = 128
self.oy = 24
self.z = 3
self.x = 603
self.y = 170
self.opacity = 0
@sx = self.x << 5
@vx = -128
end
def update
if self.opacity < 255 and $switch < 10
@sx += @vx
self.x = @sx >> 5
self.opacity += 4
@vx += 2
elsif self.opacity < 255 and $switch >= 5
@sx += @vx
self.x = @sx >> 5
elsif $switch == 999
@sx += @vx
self.x = @sx >> 5
self.opacity -= 8
end
end
end
class TitleSprite8 < Sprite
attr_accessor :vx
attr_accessor :sx
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("TitleSet3")
self.ox = 128
self.oy = 24
self.z = 3
self.x = 578
self.y = 220
self.opacity = 0
@sx = self.x << 5
@vx = -128
end
def update
if self.opacity < 255 and $switch < 10
@sx += @vx
self.x = @sx >> 5
self.opacity += 4
@vx += 2
elsif self.opacity < 255 and $switch >= 5
@sx += @vx
self.x = @sx >> 5
elsif $switch == 999
@sx += @vx
self.x = @sx >> 5
self.opacity -= 8
end
end
end
class TitleSprite9 < Sprite
attr_accessor :vx
attr_accessor :sx
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("TitleSet4")
self.ox = 128
self.oy = 24
self.x = 553
self.y = 270
self.z = 3
self.opacity = 0
@sx = self.x << 5
@vx = -128
end
def update
if self.opacity < 255 and $switch < 5
@sx += @vx
self.x = @sx >> 5
self.opacity += 4
@vx += 2
elsif self.opacity < 255 and $switch >= 5
@sx += @vx
self.x = @sx >> 5
elsif $switch == 999
@sx += @vx
self.x = @sx >> 5
self.opacity -= 8
end
end
end
class TitleSprite10 < Sprite
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("Selection1")
self.ox = 96
self.oy = 24
self.x = 0
self.y = 0
self.opacity = 0
self.z = 4
@time = 0
end
def update
@time += 3
@time = 0 if @time > 180
if $switch % 4 == 0
self.opacity = (@time - 90.00).abs / 90.00 * 255.00
end
end
end
class TitleSprite11 < Sprite
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("LoadSign")
self.ox = 168
self.oy = 60
self.x = 640
self.y = 480
self.opacity = 0
end
def update
end
end
class TitleSprite12 < Sprite
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("Selection2")
self.x = 0
self.y = 0
self.opacity = 0
self.z = 12
@time = 0
end
def update
@time += 1
@time = 0 if @time > 60
self.opacity = (@time - 30.00).abs / 30.00 * 255.00
end
end
class TitleSprite13 < Sprite
def initialize
super(nil)
if $switch == 6
self.bitmap = Cache.load_bitmap("Title4-2")
else
self.bitmap = Cache.load_bitmap("Title4")
end
self.x = 0
self.y = 0
self.z = 11
self.opacity = 0
self.blend_type = 0
end
def update
self.opacity += 8 if self.opacity < 255
end
end
class TitleSprite14 < Sprite
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("Title6")
self.x = 0
self.y = 0
self.z = 11
self.opacity = 0
end
def update
self.opacity += 4 if self.opacity < 255 and $switch == 8
end
end
class TitleSprite15 < Sprite
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("Title7")
self.x = -128
self.y = 0
self.z = 12
self.opacity = 0
@sx = self.x << 4
@vx = 64
end
def update
if self.opacity < 255
@sx += @vx
@vx -= 1
self.opacity += 4
end
self.x = @sx >> 4
end
end
class TitleSprite16 < Sprite
def initialize
super(nil)
self.bitmap = Cache.load_bitmap("Title8")
self.x = 0
self.y = 0
self.z = 13
self.opacity = 0
end
def update
self.opacity += 4 if self.opacity < 255 and $switch == 8
end
end
class TitleSprite < Sprite
def initialize
super(nil)
end
def update
end
end
复制代码
作者:
limaolinghu
时间:
2012-8-17 13:20
本帖最后由 limaolinghu 于 2012-8-17 13:23 编辑
1个建议,update函数太长了,最好分几个函数写
2个建议,变量名称毫无意义啊,都是1,2,3,4结尾,也没有注释,这个以后自己再看得时候也会很痛苦的。
另外,update里面和重绘的时候,能不做的属性赋值就不做,可以记录下之前的sprite状态,如果一致就不设置属性,频繁设置属性,也会减少fps
作者:
蕾米莉亚·斯卡雷特
时间:
2012-8-17 13:58
一堆毫无意义的类, 其实都是可以合并在一起的.
然后是合并之后其实可以去掉一些全局变量.
请尽量不要在 Update 里初始化一个类. 这个函数每帧调用一次, 而且在初始化之前或者在函数调用之后都会隐式的先释放这个类然后才初始化.
TitleSprite 这个只定义然后没有使用到. 不知道到底是做啥的?
最后就是, 这脚本到底是做什么的啊, 想修改都难.
作者:
devilg
时间:
2012-8-17 21:35
好吧,我是不会说我一句话也没看懂的,其实完全可以放出素材啊,这个代码就是最好的加密器了
功能应该类似那种光标在哪,那个选项就特别大其他选项淡化之类的,只不过某编译君为了方便把所有的东西全部合到一块了。单论机能问题,几个sprite的更新是没问题的,index==2的处理也没有太大的问题,用sideview的都知道spriteset_battle里也是对所有的sprite更新,因为本人对sprite不熟悉,看描述的状况应该是sprite的多重opacity更新所产生的fps降低吧。
刚才自己做了个实验,战斗中7个sprite不停透明再不透明感觉会有一点点慢,应该是电脑机能的问题吧。
p.s.通读一遍代码,刚才看的时候发现一个sprite5写成sprite4的,这些小错也可能导致loop下不来
作者:
TheRebirth
时间:
2012-8-18 19:02
本帖最后由 TheRebirth 于 2012-8-18 19:04 编辑
脚本优化完成,感谢各位的解答
另:回复 铅笔描绘的思念 : 系统默认脚本已被作了改动,因此这种用法应该是没问题的
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1