赞 | 0 |
VIP | 0 |
好人卡 | 15 |
积分 | 1 |
经验 | 5333 |
最后登录 | 2022-5-25 |
在线时间 | 66 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 60
- 在线时间
- 66 小时
- 注册时间
- 2011-5-25
- 帖子
- 73
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 shoed 于 2011-8-30 16:33 编辑
这种效果是当你切换场景时以一种旋转的效果进行的,而且是实时的,
可以用来表现旧照片方式的记忆效果,上一帖中的动态模糊也是利用此
脚本写的,玩角可以根据自已的需要修改脚本,做出更炫的效果。
先上图:
脚本:- #--------------------------------------------------------------------------
- # ● 场景旋转切换效果
- # 制作者 小飞侠_shoed
- # 用法:
- # 准备渐变
- # 开关[旋转切换]=ON
- # 场所移动
- # 执行渐变
- #==============================================================================
- # ■ Scene_Map
- #==============================================================================
- $旋转切换 = 1
- class Scene_Map
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- alias plan_map_window_main main
- def main
- @blur_window = Blur_Effect.new
- plan_map_window_main
- @blur_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● 更新
- #--------------------------------------------------------------------------
- alias plan_map_window_update update
- def update
- # 循环
- loop do
- # 按照地图、实例、主角的顺序刷新
- # (本更新顺序不会在满足事件的执行条件下成为给予角色瞬间移动
- # 的机会的重要因素)
- $game_map.update
- $game_system.map_interpreter.update
- $game_player.update
- # 系统 (计时器)、画面刷新
- $game_system.update
- $game_screen.update
- # 如果主角在场所移动中就中断循环
- unless $game_temp.player_transferring
- break
- end
-
- # 执行场所移动
- transfer_player
- # 处理过渡中的情况下、中断循环
- if $game_temp.transition_processing
- break
- end
- end
- # 刷新活动块
- @spriteset.update
- # 刷新信息窗口
- @message_window.update
- # 游戏结束的情况下
- if $game_temp.gameover
- # 切换的游戏结束画面
- $scene = Scene_Gameover.new
- return
- end
- # 返回标题画面的情况下
- if $game_temp.to_title
- # 切换到标题画面
- $scene = Scene_Title.new
- return
- end
- # 处理过渡中的情况下
- if $game_temp.transition_processing
- # 清除过渡处理中标志
- $game_temp.transition_processing = false
- # 执行过渡
- if $game_switches[$旋转切换]==true
- Graphics.transition(0)
- loop do
- @blur_window.update
- # 刷新游戏画面
- Graphics.update
- if $game_switches[$旋转切换] == false
- break
- end
- end
- elsif $game_temp.transition_name == ""
- Graphics.transition(20)
- else
- Graphics.transition(40, "Graphics/Transitions/" +
- $game_temp.transition_name)
- end
- end
- # 显示信息窗口中的情况下
- if $game_temp.message_window_showing
- return
- end
- # 遇敌计数为 0 且、且遇敌列表不为空的情况下
- if $game_player.encounter_count == 0 and $game_map.encounter_list != []
- # 不是在事件执行中或者禁止遇敌中
- unless $game_system.map_interpreter.running? or
- $game_system.encounter_disabled
- # 确定队伍
- n = rand($game_map.encounter_list.size)
- troop_id = $game_map.encounter_list[n]
- # 队伍有效的话
- if $data_troops[troop_id] != nil
- # 设置调用战斗标志
- $game_temp.battle_calling = true
- $game_temp.battle_troop_id = troop_id
- $game_temp.battle_can_escape = true
- $game_temp.battle_can_lose = false
- $game_temp.battle_proc = nil
- end
- end
- end
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 不是在事件执行中或菜单禁止中
- unless $game_system.map_interpreter.running? or
- $game_system.menu_disabled
- # 设置菜单调用标志以及 SE 演奏
- $game_temp.menu_calling = true
- $game_temp.menu_beep = true
- end
- end
- # 调试模式为 ON 并且按下 F9 键的情况下
- if $DEBUG and Input.press?(Input::F9)
- # 设置调用调试标志
- $game_temp.debug_calling = true
- end
- # 不在主角移动中的情况下
- unless $game_player.moving?
- # 执行各种画面的调用
- if $game_temp.battle_calling
- call_battle
- elsif $game_temp.shop_calling
- call_shop
- elsif $game_temp.name_calling
- call_name
- elsif $game_temp.menu_calling
- call_menu
- elsif $game_temp.save_calling
- call_save
- elsif $game_temp.debug_calling
- call_debug
- end
- end
- end
-
- #--------------------------------------------------------------------------
- # ● 场所移动的变化
- #--------------------------------------------------------------------------
- alias plan_map_window_transfer_player transfer_player
- def transfer_player
- # 获取移动前的场景
- @blur_window.get_bitmap
- plan_map_window_transfer_player
- @blur_window.refresh_map
- end
- end
- #==============================================================================
- # Blur_Effect
- #==============================================================================
- class Blur_Effect
- def initialize
- @blur_map=Picture_Map.new
- @map_cw=@blur_map.width
- @map_ch=@blur_map.height
-
- @blurSprite=Sprite.new
- @blurSprite.bitmap=Bitmap.new(@map_cw,@map_ch)
- @blurSprite.z=9999
-
- @blurSprite.ox=320
- @blurSprite.oy=240
- @blurSprite.x=320
- @blurSprite.y=240
- end
-
- def get_bitmap
- @blur_map.update
- @blurSprite.bitmap.blt(0,0,@blur_map,Rect.new(0,0,@map_cw,@map_ch))
- end
-
- def update
-
- if $game_switches[$旋转切换] == true
-
- @blurSprite.visible=true
- @blurSprite.angle+=20
- @blurSprite.zoom_x-=0.02
- @blurSprite.zoom_y-=0.02
-
- if @blurSprite.zoom_y<=0.1
- @blurSprite.angle=0
- @blurSprite.zoom_x=1
- @blurSprite.zoom_y=1
- @blurSprite.visible=false
- $game_switches[$旋转切换] = false
- end
- end
-
- end
-
- def refresh_map
- @blur_map.dispose
- @blur_map=Picture_Map.new
- end
-
- def dispose
- @blur_map.dispose
- @blurSprite.bitmap.dispose
- @blurSprite.dispose
- end
-
- end
- #==============================================================================
- # Picture_Character
- #==============================================================================
- class Picture_Character < Bitmap
- attr_accessor :character # 角色
-
- def initialize(character = nil)
- @character = character
-
- @bitmap = RPG::Cache.character(@character.character_name,
- @character.character_hue)
- @cw = @bitmap.width / 4
- @ch = @bitmap.height / 4
-
- super(@cw,@ch)
-
- @stopTitles=[]
- @moveTitles=[]
- end
-
- def update
- self.clear
- # 元件 ID、文件名、色相与现在的情况存在差异的情况下
- if @tile_id != @character.tile_id or
- @character_name != @character.character_name or
- @character_hue != @character.character_hue
- # 记忆元件 ID 与文件名、色相
- @tile_id = @character.tile_id
- @character_name = @character.character_name
- @character_hue = @character.character_hue
- # 元件 ID 为有效值的情况下
- if @tile_id >= 384
- @bitmap = RPG::Cache.tile($game_map.tileset_name,
- @tile_id, @character.character_hue)
- @cw = 32
- @ch = 32
- else
- @bitmap = RPG::Cache.character(@character.character_name,
- @character.character_hue)
- end
- end
- # 图形是角色的情况下
- if @tile_id == 0
- # 设置传送目标的矩形
- sx = @character.pattern * @cw
- sy = (@character.direction - 2) / 2 * @ch
- self.blt(0,0,@bitmap,Rect.new(sx,sy,@cw,@ch))
- end
-
- #计算title
- if self.visible
- if @x != self.x or @y != self.y
- @x=self.x
- @y=self.y
-
- @stopTitles.clear
- #@moveTitles.clear
-
- tile_x=self.real_width/32
- if tile_x%2==0
- tile_x+=1
- end
- tile_y=(self.real_height/32.0).ceil
- for j in 0...tile_y
- maskId=[self.x,self.y-j,j]
- @stopTitles.push(maskId)
- for i in 1..(tile_x-1)/2
- maskId=[self.x-i,self.y-j,j]
- @stopTitles.push(maskId)
- maskId=[self.x+i,self.y-j,j]
- @stopTitles.push(maskId)
- end
- end
-
- @[email protected]
-
- case @character.direction
- when 2 #向下
- maskId=[self.x,self.y-tile_y,tile_y]
- @moveTitles.push(maskId)
- for i in 1..(tile_x-1)/2
- maskId=[self.x-i,self.y-tile_y,tile_y]
- @moveTitles.push(maskId)
- maskId=[self.x+i,self.y-tile_y,tile_y]
- @moveTitles.push(maskId)
- end
- when 4 #向左
- for j in 0...tile_y
- maskId=[self.x+(tile_x-1)/2+1,self.y-j,j]
- @moveTitles.push(maskId)
- end
- when 6 #向右
- for j in 0...tile_y
- maskId=[self.x-(tile_x-1)/2-1,self.y-j,j]
- @moveTitles.push(maskId)
- end
- when 8 #向上
- for k in @moveTitles
- k[2]+=1
- end
- maskId=[self.x,self.y+1,0]
- @moveTitles.push(maskId)
- for i in 1..(tile_x-1)/2
- maskId=[self.x-i,self.y+1,0]
- @moveTitles.push(maskId)
- maskId=[self.x+i,self.y+1,0]
- @moveTitles.push(maskId)
- end
- end
- end
- end
- end
-
- def x
- return @character.x
- end
-
- def y
- return @character.y
- end
-
- def screen_x
- return @character.screen_x
- end
-
- def screen_y
- return @character.screen_y
- end
-
- def screen_z
- return @character.screen_z(@ch)
- end
-
- def real_width
- return @cw
- end
-
- def real_height
- return @ch
- end
-
- def visible
- return [email protected]
- end
-
- def opacity
- return @character.opacity
- end
-
- def maskTitles
- if @character.moving?
- return @moveTitles
- else
- return @stopTitles
- end
- end
- end
- #==============================================================================
- # Picture_Map
- #==============================================================================
- class Picture_Map < Bitmap
- def initialize
- super(640,480)
-
- @map_cw = $game_map.width * 32
- @map_ch = $game_map.height * 32
-
- @tileset = RPG::Cache.tileset($game_map.tileset_name)
- @autotiles = []
- for i in 0..6
- autotile_name = $game_map.autotile_names[i]
- @autotiles[i] = RPG::Cache.autotile(autotile_name)
- end
- @map_data = $game_map.data
- @priorities = $game_map.priorities
- @character_sprites = []
- for i in $game_map.events.keys.sort
- sprite = Picture_Character.new($game_map.events[i])
- @character_sprites.push(sprite)
- end
- @character_sprites.push(Picture_Character.new($game_player))
- @all_map = Bitmap.new (@map_cw,@map_ch)
- make_map
- end
-
- def update
- self.clear
- self.blt(0,0,@all_map,Rect.new(map_x,map_y,width,height))
-
- # 刷新角色活动块
- @character_sprites.sort!{|a,b|a.screen_z<=>b.screen_z}
- for sprite in @character_sprites
- if sprite.visible
- sprite.update
-
- px=sprite.screen_x-sprite.real_width/2
- py=sprite.screen_y-sprite.real_height
- self.blt(px,py,sprite,Rect.new(0,0,sprite.real_width,sprite.real_height),sprite.opacity)
-
- for mask_id in sprite.maskTitles
- next unless $game_map.valid?(mask_id[0], mask_id[1])
- for i in [2, 1, 0]
- tile = @map_data[mask_id[0], mask_id[1], i]
- next if tile == 0 #透明的
- if $game_map.priorities[tile] > mask_id[2]
- if tile < 384
- if tile >= 48
- tile -= 48
- src_rect = Rect.new(32, 2 * 32, 32, 32)
- self.blt(mask_id[0] * 32 - map_x, mask_id[1] * 32 - map_y, @autotiles[tile / 48], src_rect)
- end
- else
- tile -= 384
- src_rect = Rect.new(tile % 8 * 32, tile / 8 * 32, 32, 32)
- self.blt(mask_id[0] * 32 - map_x, mask_id[1] * 32 - map_y, @tileset, src_rect)
- end
-
- break
- end
- end
- end
- end
- end
- end
-
- def dispose
- super
- # 释放元件地图
- @tileset.dispose
- for i in 0..6
- @autotiles[i].dispose
- end
- # 释放角色活动块
- for sprite in @character_sprites
- sprite.dispose
- end
- @all_map.dispose
-
- end
-
- def make_map
- for y in 0...$game_map.height
- for x in 0...$game_map.width
- for z in 0...3
- tile = @map_data[x, y, z]
- next if tile == nil
- if tile < 384
- if tile >= 48
- tile -= 48
- src_rect = Rect.new(32, 2 * 32, 32, 32)
- @all_map.blt(x * 32, y * 32, @autotiles[tile / 48], src_rect)
- end
- else
- tile -= 384
- src_rect = Rect.new(tile % 8 * 32, tile / 8 * 32, 32, 32)
- @all_map.blt(x * 32, y * 32, @tileset, src_rect)
- end
- end
- end
- end
- end
-
- def map_width
- return @map_cw
- end
-
- def map_height
- return @map_ch
- end
- def map_x
- return $game_map.display_x / 4
- end
-
- def map_y
- return $game_map.display_y / 4
- end
- end
复制代码 附件:
旋转场景.rar
(231.6 KB, 下载次数: 255)
用法:
# 准备渐变
# 开关[旋转切换]=ON
# 场所移动
# 执行渐变
|
|