赞 | 1 |
VIP | 0 |
好人卡 | 0 |
积分 | 8 |
经验 | 0 |
最后登录 | 2024-11-11 |
在线时间 | 49 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 776
- 在线时间
- 49 小时
- 注册时间
- 2020-8-28
- 帖子
- 23
|
8楼
楼主 |
发表于 2021-9-8 00:30:27
|
只看该作者
本帖最后由 这是一个昵称9 于 2021-9-8 00:36 编辑
此贴可以暂时终结,我找到了问题所在
是显示图片之后,虽然图片消失了,但是图片obj还在,精灵还在,只是bitmap变成了空的,导致画面卡顿
(原脚本优化不当导致的,类似的还有parallax,也是优化问题,如果你不用远景图就会掉帧)
改动方法很简单,sprite_picture里覆盖掉update_bitmap和update_origin
- def update_bitmap
- if @picture.name != ""
- self.bitmap = Cache.picture(@picture.name) if [email protected]_name
- self.bitmap = Cache.face(@picture.name) if @picture.f_name
- elsif self.bitmap && !self.bitmap.disposed?
- self.bitmap.dispose
- self.bitmap = nil
- end
- end
-
- def update_origin
- if @picture.origin == 0
- self.ox = 0
- self.oy = 0
- elsif self.bitmap
- self.ox = bitmap.width / 2
- self.oy = bitmap.height / 2
- end
- end
复制代码
如果还想去掉不用的图片,把spriteset_map里update_pictures改成这样
- def update_pictures
- @picture_sprites.compact.each do |pic|
- pic.update
- end
- if $game_map.screen.pictures.compact.size != @picture_sprites.compact.size
- $game_map.screen.pictures.each do |pic|
- if pic
- @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
- @picture_sprites[pic.number].update
- elsif @picture_sprites[pic.number]
- @picture_sprites[pic.number].dispose
- @picture_sprites[pic.number] = nil
- end
- end
- end
- end
复制代码
并且在game_pictures里加上- def compact
- @data.compact
- end
复制代码 (要让上面的有用得在事件管理器里把消除图片的加上screen消除game_pictures里的picture)
优化远景图- def update_parallax
- if @parallax_name != $game_map.parallax_name
- @parallax_name = $game_map.parallax_name
- if @parallax && @parallax_name == ""
- @parallax.bitmap.dispose if @parallax.bitmap
- @parallax.dispose
- @parallax = nil
- elsif @parallax_name != ""
- create_parallax if !@parallax
- @parallax.bitmap = Cache.parallax(@parallax_name)
- Graphics.frame_reset
- @paraw = @parallax.bitmap.width
- @parah = @parallax.bitmap.height
- end
- end
- if @parallax
- @parallax.ox = $game_map.parallax_ox(@paraw)
- @parallax.oy = $game_map.parallax_oy(@parah)
- end
- end
- def create_parallax
- if $game_map.parallax_name != ""
- @parallax = Plane.new(@viewport1)
- @parallax.z = -100
- @parallax_name = $game_map.parallax_name
- @parallax.bitmap = Cache.parallax(@parallax_name)
- Graphics.frame_reset
- @paraw = @parallax.bitmap.width
- @parah = @parallax.bitmap.height
- else
- if @parallax
- @parallax.bitmap.dispose
- @parallax.dispose
- @parallax = nil
- end
- end
- end
复制代码 |
评分
-
查看全部评分
|