| 赞 | 67 |
| VIP | |
| 好人卡 | |
| 积分 | 170 |
| 经验 | |
| 最后登录 | 2026-10-2 |
| 在线时间 | 6058 小时 |
- 梦石
- 0
- 星屑
- 17038
- 在线时间
- 6058 小时
- 注册时间
- 2011-7-18
- 回帖
- 152

|
发表于 2019-8-2 03:00:11
|
显示全部楼层
本帖最后由 gqxastg 于 2019-8-3 18:35 编辑
脚本- #==============================================================================
- # ■ Game_Map
- #==============================================================================
- class Game_Map
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :zelda_scroll
- #--------------------------------------------------------------------------
- # ● 初始化对象
- #--------------------------------------------------------------------------
- alias initialize_zelda_old initialize
- def initialize
- initialize_zelda_old
- @zelda_scroll = false
- end
- #--------------------------------------------------------------------------
- # ● 设置
- #--------------------------------------------------------------------------
- def zelda_scroll_setup(style, param = 1)
- @zelda_scroll = style ? [style, param] : false
- end
- end
- #==============================================================================
- # ■ Scene_Map
- #==============================================================================
- class Scene_Map < Scene_Base
- #--------------------------------------------------------------------------
- # ● 处理场所移动
- #--------------------------------------------------------------------------
- alias perform_transfer_zelda_old perform_transfer
- def perform_transfer
- if $game_map.zelda_scroll
- style = $game_map.zelda_scroll[0]
- param = $game_map.zelda_scroll[1]
- case style
- when 0,1,2,3
- $sprite1 = Sprite.new; $sprite1.z = 300
- $sprite1.bitmap = Graphics.snap_to_bitmap.clone
- $sprite1.visible = false
- perform_transfer_zelda_old
- @spriteset.update
- $sprite2 = Sprite.new; $sprite2.z = 300
- $sprite2.bitmap = Graphics.snap_to_bitmap.clone
- $sprite1.visible = true
- case style
- when 0; $sprite2.y = Graphics.height
- when 1; $sprite2.x = -Graphics.width
- when 2; $sprite2.x = Graphics.width
- when 3; $sprite2.y = -Graphics.height; end
- loop do
- break if (style == 0 && $sprite2.y <= 0) ||
- (style == 1 && $sprite2.x >= 0) ||
- (style == 2 && $sprite2.x <= 0) ||
- (style == 3 && $sprite2.y >= 0)
- case style
- when 0; $sprite1.y = [$sprite1.y - param, -Graphics.height].max
- $sprite2.y = [$sprite2.y - param, 0].max
- when 1; $sprite1.x = [$sprite1.x + param, Graphics.width].min
- $sprite2.x = [$sprite2.x + param, 0].min
- when 2; $sprite1.x = [$sprite1.x - param, -Graphics.width].max
- $sprite2.x = [$sprite2.x - param, 0].max
- when 3; $sprite1.y = [$sprite1.y + param, Graphics.height].min
- $sprite2.y = [$sprite2.y + param, 0].min; end
- Graphics.update
- end
- $sprite1.bitmap.dispose; $sprite1.dispose
- $sprite2.bitmap.dispose; $sprite2.dispose
- end
- $game_map.zelda_scroll_setup(false)
- else
- perform_transfer_zelda_old
- end
- end
- end
复制代码
临时随便写了一个,跨地图的仿塞尔达式屏幕卷动
在场所移动前用事件中的脚本功能调用$game_map.zelda_scroll_setup(style, param)
即可(淡入淡出要选择“无”)
style为屏幕卷动的风格序号,目前有4种,从0到3分别为向下、向右、向左、向上的匀速普通卷动(比如门在地图最右边就应该向左卷动)【废话
param为屏幕卷动的风格参数,目前为每帧卷动的像素数,数字越大速度越快(最好是能被分辨率整除的数)
以防本人表达能力太差导致听不懂,最后附上范例工程
跨地图仿塞尔达屏幕滚动.7z
(292.96 KB, 下载次数: 49)
【原理很简单,就是分别获取场所移动前后的屏幕截图来卷动显示,所以兼容性不好,如果场所移动时画面上有窗口、图片等都会被截到,请在用该脚本场所移动前暂时关闭【或者有特殊需要的话告诉我用的脚本等我更新【Pia
RGD专用改进版(范例没更新)
8/2 不用特别隐藏窗口、图片、计时器、之类的了
8/3 追加保持场景切换前远景图位置的机能,以防止场景切换时滚动远景图割裂的违和感,默认不使用,想使用的话像这样在后面加个true即可
$game_map.zelda_scroll_setup(style, param, true)
脚本- #==============================================================================
- # ■ Spriteset_Map
- #==============================================================================
- class Spriteset_Map
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :viewport1; attr_accessor :viewport2; attr_accessor :viewport3
- end
- #==============================================================================
- # ■ Game_Map
- #==============================================================================
- class Game_Map
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :zelda_scroll
- attr_accessor :parallax_x; attr_accessor :parallax_y
- #--------------------------------------------------------------------------
- # ● 初始化对象
- #--------------------------------------------------------------------------
- alias initialize_zelda_old initialize
- def initialize
- initialize_zelda_old
- @zelda_scroll = false
- end
- #--------------------------------------------------------------------------
- # ● 设置
- #--------------------------------------------------------------------------
- def zelda_scroll_setup(style, param = 1, keep_bg_pos = false)
- @zelda_scroll = style ? [style, param, keep_bg_pos] : false
- end
- end
- #==============================================================================
- # ■ Scene_Map
- #==============================================================================
- class Scene_Map < Scene_Base
- #--------------------------------------------------------------------------
- # ● 处理场所移动
- #--------------------------------------------------------------------------
- alias perform_transfer_zelda_old perform_transfer
- def perform_transfer
- if $game_map.zelda_scroll
- style = $game_map.zelda_scroll[0]
- param = $game_map.zelda_scroll[1]
- keep_bg_pos = $game_map.zelda_scroll[2]
- old_bg_pos = [$game_map.parallax_x, $game_map.parallax_y] if keep_bg_pos
- case style
- when 0,1,2,3
- $sprite1 = Sprite.new; $sprite1.z = 49
- $sprite1.tone = $game_map.screen.tone
- $sprite1.bitmap = @spriteset.viewport1.snap_to_bitmap
- perform_transfer_zelda_old
- $game_map.parallax_x = old_bg_pos[0] if keep_bg_pos
- $game_map.parallax_y = old_bg_pos[1] if keep_bg_pos
- @spriteset.update
- $sprite2 = Sprite.new; $sprite2.z = 49
- $sprite2.tone = $game_map.screen.tone
- $sprite2.bitmap = @spriteset.viewport1.snap_to_bitmap
- case style
- when 0; $sprite2.y = Graphics.height
- when 1; $sprite2.x = -Graphics.width
- when 2; $sprite2.x = Graphics.width
- when 3; $sprite2.y = -Graphics.height; end
- loop do
- break if (style == 0 && $sprite2.y <= 0) ||
- (style == 1 && $sprite2.x >= 0) ||
- (style == 2 && $sprite2.x <= 0) ||
- (style == 3 && $sprite2.y >= 0)
- case style
- when 0; $sprite1.y = [$sprite1.y - param, -Graphics.height].max
- $sprite2.y = [$sprite2.y - param, 0].max
- when 1; $sprite1.x = [$sprite1.x + param, Graphics.width].min
- $sprite2.x = [$sprite2.x + param, 0].min
- when 2; $sprite1.x = [$sprite1.x - param, -Graphics.width].max
- $sprite2.x = [$sprite2.x - param, 0].max
- when 3; $sprite1.y = [$sprite1.y + param, Graphics.height].min
- $sprite2.y = [$sprite2.y + param, 0].min; end
- Graphics.update
- end
- $sprite1.bitmap.dispose; $sprite1.dispose
- $sprite2.bitmap.dispose; $sprite2.dispose
- end
- $game_map.zelda_scroll_setup(false)
- else
- perform_transfer_zelda_old
- end
- end
- end
复制代码
|
评分
-
查看全部评分
|