화면 확대 스크립트 입니다. 사용법은 다음과 같습니다.
$game_map.start_zoom(확대율, 확대속도)
$game_map.start_zoom_back(확대율, 확대속도, 돌아오는 속도)
첨부한 스크립트도 같이 사용해야 합니다.
class Game_Map attr_accessor :zoom alias zoom_initialize initialize alias zoom_update update def initialize zoom_initialize @zoom = 1.0 @zoom_target = 1.0 @zoom_duration = 0 @zoom_back_duration = 0 @original_display_x = @display_x @original_display_y = @display_y end def update zoom_update if @zoom_duration >0 @zoom_duration -= 1 @zoom += @zoom_speed @display_x = $game_player.real_x - 256 * 8 / @zoom @display_y = $game_player.real_y - 256 * 6 / @zoom if @display_x < 0 @display_x = 0 end if @display_y < 0 @display_y = 0 end if @display_x > @map.width * 256 - 256 * 17 / @zoom @display_x = @map.width * 256 - 256 * 17 / @zoom end if @display_y > @map.height * 256 - 256 * 13 / @zoom @display_y = @map.height * 256 - 256 * 13 / @zoom end else @zoom = @zoom_target end if @zoom_back_duration >0 @zoom_back_duration -= 1 if @zoom_back_duration == 0 start_zoom(1,20) end end end #-------------------------------------------------------------------------- # * Set Display Position # x : New display X coordinate (*256) # y : New display Y coordinate (*256) #-------------------------------------------------------------------------- def set_display_pos(x, y) @display_x = (x + @map.width * 256) % (@map.width * 256) @display_y = (y + @map.height * 256) % (@map.height * 256) @parallax_x = x @parallax_y = y end #-------------------------------------------------------------------------- # * Calculate X coordinate, minus display coordinate # x : x-coordinate #-------------------------------------------------------------------------- def adjust_x(x) if loop_horizontal? and x < @display_x - @margin_x return x - @display_x + @map.width * 256 else return (x - @display_x) * @zoom end end #-------------------------------------------------------------------------- # * Calculate Y coordinate, minus display coordinate # y : y-coordinate #-------------------------------------------------------------------------- def adjust_y(y) if loop_vertical? and y < @display_y - @margin_y return y - @display_y + @map.height * 256 else return (y - @display_y) * @zoom end end def start_zoom(zoom,zoom_speed) @original_display_x = @display_x @original_display_y = @display_y @zoom_target = zoom if zoom > @zoom @zoom_speed = zoom_speed.to_f / 60 else @zoom_speed = -zoom_speed.to_f / 60 end @zoom_duration = (zoom - @zoom) / @zoom_speed end def start_zoom_back(zoom,zoom_speed,duration) @original_display_x = @display_x @original_display_y = @display_y @zoom_target = zoom if zoom > @zoom @zoom_speed = zoom_speed.to_f / 60 else @zoom_speed = -zoom_speed.to_f / 60 end @zoom_duration = (zoom - @zoom) / @zoom_speed @zoom_back_duration = duration end end class Spriteset_Map alias zoom_update update alias zoom_update_characters update_characters def update @zoom = $game_map.zoom zoom_update end def update_tilemap @tilemap.ox = ($game_map.display_x) / 8 @tilemap.oy = ($game_map.display_y) / 8 @tilemap.zoom = @zoom @tilemap.update end def update_characters zoom_update_characters if @zoom != 0 for sprite in @character_sprites sprite.zoom = @zoom end end end end class Sprite_Character attr_accessor :zoom alias zoom_update update alias zoom_initialize initialize def initialize(viewport, character = nil) @zoom = 1 zoom_initialize(viewport, character) end def update zoom_update self.zoom_x = @zoom self.zoom_y = @zoom end end class Game_Character def screen_x return ($game_map.adjust_x(@real_x) + 8007) / 8 - 1000 + 16 * $game_map.zoom end def screen_y y = ($game_map.adjust_y(@real_y) + 8007) / 8 - 1000 + 32 * $game_map.zoom y -= 4 unless object? if @jump_count >= @jump_peak n = @jump_count - @jump_peak else n = @jump_peak - @jump_count end return y - (@jump_peak * @jump_peak - n * n) / 2 end end |