设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2145|回复: 7
打印 上一主题 下一主题

[已经过期] 地图整体缩放(关于tilemap)

[复制链接]
菜鸟飞呀飞 该用户已被删除
跳转到指定楼层
1
发表于 2012-11-20 00:45:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv1.梦旅人

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
帖子
1305
2
发表于 2012-11-20 06:56:36 手机端发表。 | 只看该作者
用sprite作地图吧- -b不过效率悲剧...
好歹当年也当过大魔王过,orz
回复 支持 反对

使用道具 举报

菜鸟飞呀飞 该用户已被删除
3
 楼主| 发表于 2012-11-28 00:10:28 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

4
发表于 2012-11-28 15:52:07 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
74
在线时间
154 小时
注册时间
2012-10-7
帖子
45
5
发表于 2012-11-30 12:31:41 | 只看该作者
本帖最后由 uuiio797 于 2012-11-30 12:33 编辑

LZ,是这个吗?http://www.youtube.com/watch?v=C8Czqd5wMC0
能缩小放大的。
该脚本来源网战:http://www.rgss-factory.net/
RUBY 代码复制
  1. #====================================================================
  2. # MGC Tilemap Ace
  3. # v.1.0
  4. # Auteur : MGC
  5. #
  6. # Il s'agit d'une réécriture de la classe Tilemap pour RMVX Ace.
  7. #
  8. # - Ne gère pas le flash_data
  9. # - Ne gère pas le décalage des motifs d'autotiles du tiles du
  10. #   tileset A2 avec l'indicateur "counter"
  11. # - Gère le reste, et même d'autres propriétés/méthodes empruntées
  12. #   à la classe Sprite :
  13. #         - opacity
  14. #         - blend_type
  15. #         - color
  16. #         - tone
  17. #         - wave_amp
  18. #         - wave_length
  19. #         - wave_speed
  20. #         - wave_phase
  21. #         - zoom
  22. #         - flash
  23. # - Ajout d'une méthode to_zoom(new_zoom, duration) pour un zoom
  24. #   progressif
  25. #
  26. # Nécessite :
  27. # - le fichier MGC_Map_Ace.dll à la racine du projet
  28. # - les 3 fichiers graphiques suivants, déposés dans Pictures/ :
  29. #         - autotiles_data.png
  30. #         - autotiles_data_small.png
  31. #         - autotiles_data_xsmall.png
  32. #
  33. # Configuration :
  34. # - NEW_TILEMAP_FOR_ALL_MAPS : alimenté à true ou false
  35. #         - true : la nouvelle Tilemap sera utilisée pour toutes les cartes
  36. #         - false : la nouvelle Tilemap ne sera utilisée que pour les
  37. #                   cartes dont l'id est dans NEW_TILEMAP_MAPS_IDS
  38. # - NEW_TILEMAP_MAPS_IDS : utilisé si NEW_TILEMAP_FOR_ALL_MAPS est à false
  39. #         Contient la liste des id des cartes pour lesquelles la nouvelle
  40. #         tilemap doit être utilisée
  41. #====================================================================
  42. module MGC
  43.   #--------------------------------------------------------------------------
  44.   # * CONFIGURATION
  45.   #--------------------------------------------------------------------------
  46.   NEW_TILEMAP_FOR_ALL_MAPS = true
  47.   NEW_TILEMAP_MAPS_IDS = [1, 2] # seules les cartes 1 et 2 utilisent cette tilemap
  48.   #==============================================================================
  49.   # ** MGC::Tilemap
  50.   #==============================================================================
  51.   class Tilemap
  52.     #--------------------------------------------------------------------------
  53.     # * Attributs
  54.     #--------------------------------------------------------------------------
  55.     attr_reader :viewport, :visible, :ox, :oy, :opacity, :blend_type, :color,
  56.     :tone, :wave_amp, :wave_length, :wave_speed, :wave_phase, :zoom, :map_data,
  57.     :flags
  58.     attr_accessor :bitmaps, :flash_data
  59.     #--------------------------------------------------------------------------
  60.     # * Constantes
  61.     #--------------------------------------------------------------------------
  62.     RENDER = Win32API.new("MGC_Map_Ace", "renderMap", "l", "l")
  63.     #--------------------------------------------------------------------------
  64.     # * Initialisation
  65.     #--------------------------------------------------------------------------
  66.     def initialize(viewport)
  67.       @viewport = viewport
  68.       self.bitmaps = [0, 0, 0, 0, 0, 0, 0, 0, 0]
  69.       @map_data = 0
  70.       @flags = 0
  71.       self.flash_data = nil
  72.       @cx = Graphics.width >> 1
  73.       @cy = Graphics.height >> 1
  74.       @sprite_render = Sprite.new(viewport)
  75.       @render = Bitmap.new(Graphics.width + 64, Graphics.height + 64)
  76.       @sprite_render.bitmap = @render
  77.       @sprite_render.x = -32
  78.       @sprite_render.y = -32
  79.       @sprite_render.z = 0
  80.       @sprite_render_layer2 = Sprite.new(viewport)
  81.       @render_layer2 = Bitmap.new(Graphics.width + 64, Graphics.height + 64)
  82.       @sprite_render_layer2.bitmap = @render_layer2
  83.       @sprite_render_layer2.x = -32
  84.       @sprite_render_layer2.y = -32
  85.       @sprite_render_layer2.z = 200
  86.       @zoom_incr = 0.0
  87.       @zoom_duration = 0
  88.       @parameters = [@render, @render_layer2, map_data, bitmaps,
  89.       Cache.picture('autotiles_data'), Cache.picture('autotiles_data_small'),
  90.       Cache.picture('autotiles_data_xsmall'), flags, 0, 0, 0, 0, 0, 0, 1024,
  91.       100, $game_map.loop_horizontal?, $game_map.loop_vertical?]
  92.       self.visible = true
  93.       self.zoom = 1.0
  94.       self.ox = 0
  95.       self.oy = 0
  96.       self.opacity = 255
  97.       self.blend_type = 0
  98.       self.color = Color.new
  99.       self.tone = Tone.new
  100.       self.wave_amp = 0
  101.       self.wave_length = 180
  102.       self.wave_speed = 360
  103.       self.wave_phase = 0.0
  104.       @refresh_all = true
  105.     end
  106.     #--------------------------------------------------------------------------
  107.     # * Setter pour l'attribut map_data
  108.     #--------------------------------------------------------------------------
  109.     def map_data=(new_map_data)
  110.       @map_data = new_map_data
  111.       @parameters[2] = @map_data
  112.     end
  113.     #--------------------------------------------------------------------------
  114.     # * Setter pour l'attribut flags
  115.     #--------------------------------------------------------------------------
  116.     def flags=(new_flags)
  117.       @flags = new_flags
  118.       @parameters[7] = @flags
  119.     end
  120.     #--------------------------------------------------------------------------
  121.     # * Setter pour l'attribut zoom
  122.     #--------------------------------------------------------------------------
  123.     def zoom=(new_zoom)
  124.       unless zoom == new_zoom
  125.         if new_zoom < 0.125 || new_zoom > 8.0 then return end
  126.         [url=home.php?mod=space&uid=98379]@zoom[/url] = new_zoom
  127.         @parameters[14] = (1024.0 / new_zoom).to_i
  128.         vox = @ox
  129.         @ox = nil
  130.         self.ox = vox
  131.         voy = @oy
  132.         @oy = nil
  133.         self.oy = voy
  134.         @need_refresh = true
  135.         @refresh_all = true
  136.       end
  137.     end
  138.     #--------------------------------------------------------------------------
  139.     # * Incrémentation de la valeur du zoom
  140.     #--------------------------------------------------------------------------
  141.     def incr_zoom(val = 0.02)
  142.       @zoom_incr += val
  143.       new_zoom = 2 ** @zoom_incr
  144.       self.zoom = new_zoom
  145.     end
  146.     #--------------------------------------------------------------------------
  147.     # * Pour aller progressivement vers une nouvelle valeur de zoom
  148.     #--------------------------------------------------------------------------
  149.     def to_zoom(new_zoom, duration)
  150.       unless zoom == new_zoom
  151.         if new_zoom < 0.125 || new_zoom > 8.0 then return end
  152.         @zoom_duration = duration
  153.         target_zoom_incr = Math.log(new_zoom) / Math.log(2)
  154.         @zoom_step = (target_zoom_incr - @zoom_incr) / duration
  155.         @target_zoom = new_zoom
  156.       end
  157.     end
  158.     #--------------------------------------------------------------------------
  159.     # * Setter pour l'attribut visible
  160.     #--------------------------------------------------------------------------
  161.     def shadow_opacity=(value)
  162.       @parameters[15] = [[value, 0].max, 255].min
  163.     end
  164.     #--------------------------------------------------------------------------
  165.     # * Setter pour l'attribut visible
  166.     #--------------------------------------------------------------------------
  167.     def visible=(flag)
  168.       @visible = flag
  169.       @sprite_render.visible = flag
  170.       @sprite_render_layer2.visible = flag
  171.     end
  172.     #--------------------------------------------------------------------------
  173.     # * Setter pour l'attribut ox
  174.     #--------------------------------------------------------------------------
  175.     def ox=(new_ox)
  176.       @parameters[12] = 0
  177.       unless new_ox == @ox
  178.         if ox && $game_map.loop_horizontal?
  179.           if (new_ox.to_i - ox >> 5) == $game_map.width - 1 ||
  180.             (ox - new_ox.to_i >> 5) == $game_map.width - 1
  181.           then
  182.             @refresh_all = true
  183.           end
  184.         end
  185.         @ox = new_ox.to_i
  186.         ox_zoom = (@ox << 10) / @parameters[14]
  187.         ox_floor = ox_zoom >> 5 << 5
  188.         unless ox_floor == @parameters[8]
  189.           @parameters[12] = ox_floor - @parameters[8] >> 5
  190.           @need_refresh = true
  191.         end
  192.         @parameters[8] = ox_floor
  193.         @sprite_render.ox = ox_zoom - ox_floor
  194.         @sprite_render_layer2.ox = @sprite_render.ox
  195.       end
  196.     end
  197.     #--------------------------------------------------------------------------
  198.     # * Setter pour l'attribut oy
  199.     #--------------------------------------------------------------------------
  200.     def oy=(new_oy)
  201.       @parameters[13] = 0
  202.       unless new_oy == @oy
  203.         if oy && $game_map.loop_vertical?
  204.           if (new_oy.to_i - oy >> 5) == $game_map.height - 1 ||
  205.             (oy - new_oy.to_i >> 5) == $game_map.height - 1
  206.           then
  207.             @refresh_all = true
  208.           end
  209.         end
  210.         @oy = new_oy.to_i
  211.         oy_zoom = (@oy << 10) / @parameters[14]
  212.         oy_floor = oy_zoom >> 5 << 5
  213.         unless oy_floor == @parameters[9]
  214.           @parameters[13] = oy_floor - @parameters[9] >> 5
  215.           @need_refresh = true
  216.         end
  217.         @parameters[9] = oy_floor
  218.         @sprite_render.oy = oy_zoom - oy_floor
  219.         @sprite_render_layer2.oy = @sprite_render.oy
  220.       end
  221.     end
  222.     #--------------------------------------------------------------------------
  223.     # * Setter pour l'attribut opacity
  224.     #--------------------------------------------------------------------------
  225.     def opacity=(new_opacity)
  226.       @opacity = new_opacity
  227.       @sprite_render.opacity = new_opacity
  228.       @sprite_render_layer2.opacity = new_opacity
  229.     end
  230.     #--------------------------------------------------------------------------
  231.     # * Setter pour l'attribut blend_type
  232.     #--------------------------------------------------------------------------
  233.     def blend_type=(new_blend_type)
  234.       @blend_type = new_blend_type
  235.       @sprite_render.blend_type = new_blend_type
  236.       @sprite_render_layer2.blend_type = new_blend_type
  237.     end
  238.     #--------------------------------------------------------------------------
  239.     # * Setter pour l'attribut color
  240.     #--------------------------------------------------------------------------
  241.     def color=(new_color)
  242.       [url=home.php?mod=space&uid=10453]@color[/url] = new_color
  243.       @sprite_render.color = new_color
  244.       @sprite_render_layer2.color = new_color
  245.     end
  246.     #--------------------------------------------------------------------------
  247.     # * Setter pour l'attribut tone
  248.     #--------------------------------------------------------------------------
  249.     def tone=(new_tone)
  250.       @tone = new_tone
  251.       @sprite_render.tone = new_tone
  252.       @sprite_render_layer2.tone = new_tone
  253.     end
  254.     #--------------------------------------------------------------------------
  255.     # * Setter pour l'attribut wave_amp
  256.     #--------------------------------------------------------------------------
  257.     def wave_amp=(new_wave_amp)
  258.       @wave_amp = new_wave_amp
  259.       @sprite_render.wave_amp = new_wave_amp
  260.       @sprite_render_layer2.wave_amp = new_wave_amp
  261.     end
  262.     #--------------------------------------------------------------------------
  263.     # * Setter pour l'attribut wave_length
  264.     #--------------------------------------------------------------------------
  265.     def wave_length=(new_wave_length)
  266.       @wave_length = new_wave_length
  267.       @sprite_render.wave_length = new_wave_length
  268.       @sprite_render_layer2.wave_length = new_wave_length
  269.     end
  270.     #--------------------------------------------------------------------------
  271.     # * Setter pour l'attribut wave_speed
  272.     #--------------------------------------------------------------------------
  273.     def wave_speed=(new_wave_speed)
  274.       @wave_speed = new_wave_speed
  275.       @sprite_render.wave_speed = new_wave_speed
  276.       @sprite_render_layer2.wave_speed = new_wave_speed
  277.     end
  278.     #--------------------------------------------------------------------------
  279.     # * Setter pour l'attribut wave_phase
  280.     #--------------------------------------------------------------------------
  281.     def wave_phase=(new_wave_phase)
  282.       @wave_phase = new_wave_phase
  283.       @sprite_render.wave_phase = new_wave_phase
  284.       @sprite_render_layer2.wave_phase = new_wave_phase
  285.     end
  286.     #--------------------------------------------------------------------------
  287.     # * Libération de l'instance
  288.     #--------------------------------------------------------------------------
  289.     def dispose
  290.       @render.dispose
  291.       @render_layer2.dispose
  292.       @sprite_render.dispose
  293.       @sprite_render_layer2.dispose
  294.     end
  295.     #--------------------------------------------------------------------------
  296.     # * Retourne true si l'instance a été libérée
  297.     #--------------------------------------------------------------------------
  298.     def disposed?
  299.       return @render.disposed?
  300.     end
  301.     #--------------------------------------------------------------------------
  302.     # * Mise à jour, appelée normalement à chaque frame
  303.     #--------------------------------------------------------------------------
  304.     def update
  305.       if @visible
  306.         if @zoom_duration > 0
  307.           @zoom_duration -= 1
  308.           if @zoom_duration == 0
  309.             self.zoom = @target_zoom
  310.           else
  311.             incr_zoom(@zoom_step)
  312.           end
  313.         end
  314.         if Graphics.frame_count & 31 == 0
  315.           @parameters[10] += 1
  316.           @parameters[10] %= 3
  317.           unless @need_refresh
  318.             @need_refresh_anim = true
  319.           end
  320.         end
  321.         if @need_refresh
  322.           if @refresh_all
  323.             @render.clear
  324.             @render_layer2.clear
  325.             @parameters[12] = 0
  326.             @parameters[13] = 0
  327.             @refresh_all = false
  328.           end
  329.           @parameters[11] = 0
  330.           RENDER.call(@parameters.__id__)
  331.           @need_refresh = false
  332.         elsif @need_refresh_anim
  333.           @parameters[11] = 1
  334.           @parameters[12] = 0
  335.           @parameters[13] = 0
  336.           RENDER.call(@parameters.__id__)
  337.           @need_refresh_anim = false
  338.         end
  339.         @sprite_render.update
  340.         @sprite_render_layer2.update
  341.       end
  342.     end
  343.     #--------------------------------------------------------------------------
  344.     # * Flash des couches de la tilemap
  345.     #--------------------------------------------------------------------------
  346.     def flash(color, duration)
  347.       @sprite_render.flash(color, duration)
  348.       @sprite_render_layer2.flash(color, duration)
  349.     end
  350.   end
  351. end
  352.  
  353. #==============================================================================
  354. # ** Spriteset_Map
  355. #==============================================================================
  356. class Spriteset_Map
  357.   #--------------------------------------------------------------------------
  358.   # * Aliased methods
  359.   #--------------------------------------------------------------------------
  360.   unless @already_aliased_mgc_tilemap
  361.     alias create_tilemap_mgc_tilemap create_tilemap
  362.     @already_aliased_mgc_tilemap = true
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # * Create Tilemap
  366.   #--------------------------------------------------------------------------
  367.   def create_tilemap
  368.     if MGC::NEW_TILEMAP_FOR_ALL_MAPS ||
  369.       MGC::NEW_TILEMAP_MAPS_IDS.include?($game_map.map_id)
  370.     then
  371.       @tilemap = MGC::Tilemap.new(@viewport1)
  372.       @tilemap.map_data = $game_map.data
  373.       load_tileset
  374.     else
  375.       create_tilemap_mgc_tilemap
  376.     end
  377.   end
  378. end

RUBY 代码复制
  1. #====================================================================
  2. # Map Zoom Ace
  3. # v.1.2
  4. # Auteur : MGC
  5. #
  6. # Ce script pour RMVX Ace permet de jouer avec une carte zoomée.
  7. # Le coefficient de zoom peut aller de 1/8 à 8
  8. #
  9. # Nécessite :
  10. # - le script "MGC Tilemap Ace" du même auteur en V.1.0, placé
  11. #   directement au-dessus de ce script
  12. #
  13. # Utilisation :
  14. # - pour une carte utilisant la tilemap du script "MGC Tilemap Ace" (cf.
  15. #   ce script pour savoir comment obtenir une telle carte), deux
  16. #   commandes en script sont utilisables :
  17. #         - MGC.map_zoom=(nouvelle valeur de zoom)
  18. #         - MGC.to_map_zoom(nouvelle valeur de zoom, durée de la transition)
  19. #
  20. # Configuration :
  21. # - PARALLAX_ZOOM : alimenté à true ou false
  22. #         - true : le panorama subi le même zoom que la carte. Désactivé
  23. #                 par défaut car il semble que cela introduit du lag, et
  24. #                 je n'ai pas envie de réécrire la gestion du zoom de la
  25. #                 classe Plane pour remplacer ce que nous a écrit Enterbrain
  26. #         - false : le panorama est insensible au zoom de la carte
  27. #====================================================================
  28. module MGC
  29.   #--------------------------------------------------------------------------
  30.   # * CONFIGURATION
  31.   #--------------------------------------------------------------------------
  32.   PARALLAX_ZOOM = false
  33.   #--------------------------------------------------------------------------
  34.   # * GESTION DU ZOOM
  35.   #--------------------------------------------------------------------------
  36.   @zoom = 1.0
  37.   #--------------------------------------------------------------------------
  38.   # * Initialisation de la valeur de zoom
  39.   #--------------------------------------------------------------------------
  40.   def self.initialize_map_zoom
  41.     @zoom = $game_system.map_zoom ? $game_system.map_zoom : 1.0
  42.     @map_zoom_incr = Math.log(@zoom) / Math.log(2)
  43.     @map_zoom_duration = 0
  44.     @zoom_map_active = false
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # * Getter pour l'attribut zoom
  48.   #--------------------------------------------------------------------------
  49.   def self.map_zoom
  50.     return @zoom
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # * Setter pour l'attribut zoom
  54.   #--------------------------------------------------------------------------
  55.   def self.map_zoom=(zoom_value)
  56.     unless map_zoom == zoom_value
  57.       if zoom_value < 0.125 || zoom_value > 8.0 then return end
  58.       @zoom = zoom_value
  59.       $game_system.map_zoom = @zoom
  60.       $game_player.center($game_player.x, $game_player.y)
  61.     end
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # * Incrémentation de la valeur du zoom
  65.   #--------------------------------------------------------------------------
  66.   def self.incr_map_zoom(val = 0.02)
  67.     @map_zoom_incr += val
  68.     new_zoom = 2 ** @map_zoom_incr
  69.     self.map_zoom = new_zoom
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # * Pour aller progressivement vers une nouvelle valeur de zoom
  73.   #--------------------------------------------------------------------------
  74.   def self.to_map_zoom(new_zoom, duration)
  75.     unless map_zoom == new_zoom
  76.       if new_zoom < 0.125 || new_zoom > 8.0 then return end
  77.       @map_zoom_duration = duration
  78.       target_zoom_incr = Math.log(new_zoom) / Math.log(2)
  79.       @map_zoom_step = (target_zoom_incr - @map_zoom_incr) / duration
  80.       @target_map_zoom = new_zoom
  81.     end
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # * Setter pour l'attribut zoom_map_active
  85.   #--------------------------------------------------------------------------
  86.   def self.zoom_map_active=(flag)
  87.     @zoom_map_active = flag
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # * Getter pour l'attribut zoom_map_active
  91.   #--------------------------------------------------------------------------
  92.   def self.zoom_map_active
  93.     return @zoom_map_active
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # * Mise à jour de la valeur du zoom
  97.   #--------------------------------------------------------------------------
  98.   def self.update_map_zoom
  99.     if @zoom_map_active && @map_zoom_duration > 0
  100.       @map_zoom_duration -= 1
  101.       if @map_zoom_duration == 0
  102.         self.map_zoom = @target_map_zoom
  103.       else
  104.         self.incr_map_zoom(@map_zoom_step)
  105.       end
  106.     end
  107.   end
  108. end
  109.  
  110. #==============================================================================
  111. # ** Game_System
  112. #==============================================================================
  113. class Game_System
  114.   #--------------------------------------------------------------------------
  115.   # * Attributs
  116.   #--------------------------------------------------------------------------
  117.   attr_accessor :map_zoom
  118. end
  119.  
  120. #==============================================================================
  121. # ** Viewport
  122. #==============================================================================
  123. class Viewport
  124.   #--------------------------------------------------------------------------
  125.   # * Attributs
  126.   #--------------------------------------------------------------------------
  127.   attr_reader :zoom
  128.   attr_accessor :contains_zoomable_map
  129.   #--------------------------------------------------------------------------
  130.   # * Aliased methods
  131.   #--------------------------------------------------------------------------
  132.   unless @already_aliased_mgc_zoom
  133.     alias initialize_mgc_zoom initialize
  134.     @already_aliased_mgc_zoom = true
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # * Initialisation
  138.   #--------------------------------------------------------------------------
  139.   def initialize(*args)
  140.     initialize_mgc_zoom(*args)
  141.     self.zoom = 1.0
  142.     @contains_zoomable_map = false
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # * Setter pour l'attribut zoom
  146.   #--------------------------------------------------------------------------
  147.   def zoom=(new_zoom)
  148.     unless zoom == new_zoom
  149.       if new_zoom < 0.125 || new_zoom > 8.0 then return end
  150.       @zoom = new_zoom
  151.     end
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # * Mise à jour du zoom
  155.   #--------------------------------------------------------------------------
  156.   def update_zoom
  157.     if contains_zoomable_map
  158.       self.zoom = MGC.map_zoom
  159.     end
  160.   end
  161. end
  162.  
  163. #==============================================================================
  164. # ** MGC::Tilemap
  165. #==============================================================================
  166. module MGC
  167.   class Tilemap
  168.     #--------------------------------------------------------------------------
  169.     # * Aliased methods
  170.     #--------------------------------------------------------------------------
  171.     unless @already_aliased_mgc_zoom
  172.       alias initialize_mgc_zoom initialize
  173.       alias update_mgc_zoom update
  174.       @already_aliased_mgc_zoom = true
  175.     end
  176.     #--------------------------------------------------------------------------
  177.     # * Initialisation
  178.     #--------------------------------------------------------------------------
  179.     def initialize(viewport)
  180.       initialize_mgc_zoom(viewport)
  181.       @sprite_render.no_viewport_zoom = true
  182.       @sprite_render_layer2.no_viewport_zoom = true
  183.       viewport.contains_zoomable_map = true
  184.     end
  185.     #--------------------------------------------------------------------------
  186.     # * Mise à jour, appelée normalement à chaque frame
  187.     #--------------------------------------------------------------------------
  188.     def update
  189.       if @visible
  190.         self.zoom = viewport.zoom
  191.       end
  192.       update_mgc_zoom
  193.     end
  194.   end
  195. end
  196.  
  197. #==============================================================================
  198. # ** Plane
  199. #==============================================================================
  200. class Plane
  201.   #--------------------------------------------------------------------------
  202.   # * Aliased methods
  203.   #--------------------------------------------------------------------------
  204.   unless @already_aliased_mgc_zoom
  205.     alias initialize_mgc_zoom initialize
  206.     alias ox_mgc_zoom= ox=
  207.     alias oy_mgc_zoom= oy=
  208.     @already_aliased_mgc_zoom = true
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # * Initialisation
  212.   #--------------------------------------------------------------------------
  213.   def initialize(*args)
  214.     initialize_mgc_zoom(*args)
  215.     @phase_viewport_zoom = false
  216.     self.ox = 0
  217.     self.oy = 0
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # * Setter pour l'attribut ox
  221.   #--------------------------------------------------------------------------
  222.   def ox=(new_ox)
  223.     unless @phase_viewport_zoom
  224.       @base_ox = new_ox
  225.     end
  226.     self.ox_mgc_zoom = new_ox
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # * Getter pour l'attribut ox
  230.   #--------------------------------------------------------------------------
  231.   def ox
  232.     return @base_ox
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # * Setter pour l'attribut oy
  236.   #--------------------------------------------------------------------------
  237.   def oy=(new_oy)
  238.     unless @phase_viewport_zoom
  239.       @base_oy = new_oy
  240.     end
  241.     self.oy_mgc_zoom = new_oy
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # * Getter pour l'attribut oy
  245.   #--------------------------------------------------------------------------
  246.   def oy
  247.     return @base_oy
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # * Mise à jour du zoom en fonction du zoom du viewport
  251.   #--------------------------------------------------------------------------
  252.   def update_viewport_zoom
  253.     if MGC::PARALLAX_ZOOM
  254.       unless viewport.nil? || !viewport.contains_zoomable_map ||
  255.         zoom_x == viewport.zoom
  256.         @phase_viewport_zoom = true
  257.         self.zoom_x = viewport.zoom
  258.         self.zoom_y = viewport.zoom
  259.         self.ox = - ((Graphics.width >> 1) +
  260.         (ox - (Graphics.width >> 1)) * viewport.zoom).to_i
  261.         self.oy = - ((Graphics.height >> 1) +
  262.         (oy - (Graphics.height >> 1)) * viewport.zoom).to_i
  263.         @phase_viewport_zoom = false
  264.       end
  265.     end
  266.   end
  267. end
  268.  
  269. #==============================================================================
  270. # ** Spriteset_Map
  271. #==============================================================================
  272. class Spriteset_Map
  273.   #--------------------------------------------------------------------------
  274.   # * Aliased methods
  275.   #--------------------------------------------------------------------------
  276.   unless @already_aliased_mgc_zoom
  277.     alias initialize_mgc_zoom initialize
  278.     alias create_tilemap_mgc_zoom create_tilemap
  279.     alias update_mgc_zoom update
  280.     alias update_parallax_mgc_zoom update_parallax
  281.     @already_aliased_mgc_zoom = true
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # * Object Initialization
  285.   #--------------------------------------------------------------------------
  286.   def initialize
  287.     MGC.initialize_map_zoom
  288.     initialize_mgc_zoom
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # * Create Tilemap
  292.   #--------------------------------------------------------------------------
  293.   def create_tilemap
  294.     create_tilemap_mgc_zoom
  295.     MGC.zoom_map_active = @viewport1.contains_zoomable_map
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # * Update
  299.   #--------------------------------------------------------------------------
  300.   def update
  301.     MGC.update_map_zoom
  302.     update_viewports_zoom
  303.     update_mgc_zoom
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # * Update Parallax
  307.   #--------------------------------------------------------------------------
  308.   def update_parallax
  309.     update_parallax_mgc_zoom
  310.     @parallax.update_viewport_zoom
  311.   end
  312.   #--------------------------------------------------------------------------
  313.   # * Update Viewports Zoom
  314.   #--------------------------------------------------------------------------
  315.   def update_viewports_zoom
  316.     @viewport1.update_zoom
  317.   end
  318. end
  319.  
  320. #==============================================================================
  321. # ** Sprite
  322. #==============================================================================
  323. class Sprite
  324.   #--------------------------------------------------------------------------
  325.   # * Aliased methods
  326.   #--------------------------------------------------------------------------
  327.   unless @already_aliased_mgc_zoom
  328.     alias initialize_mgc_zoom initialize
  329.     alias x_mgc_zoom= x=
  330.     alias y_mgc_zoom= y=
  331.     alias zoom_x_mgc_zoom= zoom_x=
  332.     alias zoom_y_mgc_zoom= zoom_y=
  333.     @already_aliased_mgc_zoom = true
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # * Attributs
  337.   #--------------------------------------------------------------------------
  338.   attr_accessor :no_viewport_zoom
  339.   #--------------------------------------------------------------------------
  340.   # * Initialisation
  341.   #--------------------------------------------------------------------------
  342.   def initialize(*args)
  343.     initialize_mgc_zoom(*args)
  344.     @phase_viewport_zoom = false
  345.     self.x = 0
  346.     self.y = 0
  347.     self.zoom_x = 1.0
  348.     self.zoom_y = 1.0
  349.     self.no_viewport_zoom = false
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # * Setter pour l'attribut x
  353.   #--------------------------------------------------------------------------
  354.   def x=(new_x)
  355.     unless @phase_viewport_zoom
  356.       @base_x = new_x
  357.     end
  358.     self.x_mgc_zoom = new_x
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # * Setter pour l'attribut y
  362.   #--------------------------------------------------------------------------
  363.   def y=(new_y)
  364.     unless @phase_viewport_zoom
  365.       @base_y = new_y
  366.     end
  367.     self.y_mgc_zoom = new_y
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # * Getter pour l'attribut x
  371.   #--------------------------------------------------------------------------
  372.   def x
  373.     return @base_x
  374.   end
  375.   #--------------------------------------------------------------------------
  376.   # * Getter pour l'attribut y
  377.   #--------------------------------------------------------------------------
  378.   def y
  379.     return @base_y
  380.   end
  381.   #--------------------------------------------------------------------------
  382.   # * Setter pour l'attribut zoom_x
  383.   #--------------------------------------------------------------------------
  384.   def zoom_x=(new_zoom_x)
  385.     unless @phase_viewport_zoom
  386.       @base_zoom_x = new_zoom_x
  387.     end
  388.     self.zoom_x_mgc_zoom = new_zoom_x
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # * Setter pour l'attribut zoom_y
  392.   #--------------------------------------------------------------------------
  393.   def zoom_y=(new_zoom_y)
  394.     unless @phase_viewport_zoom
  395.       @base_zoom_y = new_zoom_y
  396.     end
  397.     self.zoom_y_mgc_zoom = new_zoom_y
  398.   end
  399.   #--------------------------------------------------------------------------
  400.   # * Getter pour l'attribut zoom_x
  401.   #--------------------------------------------------------------------------
  402.   def zoom_x
  403.     return @base_zoom_x
  404.   end
  405.   #--------------------------------------------------------------------------
  406.   # * Getter pour l'attribut zoom_y
  407.   #--------------------------------------------------------------------------
  408.   def zoom_y
  409.     return @base_zoom_y
  410.   end
  411.   #--------------------------------------------------------------------------
  412.   # * Valeur réelle du zoom_x en prenant en compte le zoom de la carte
  413.   #--------------------------------------------------------------------------
  414.   def zoom_x_global
  415.     return @zoom_x
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # * Valeur réelle du zoom_y en prenant en compte le zoom de la carte
  419.   #--------------------------------------------------------------------------
  420.   def zoom_y_global
  421.     return @zoom_y
  422.   end
  423. end
  424.  
  425. #==============================================================================
  426. # ** Sprite and all its subclasses
  427. #==============================================================================
  428. [:Sprite, :Sprite_Base, :Sprite_Character, :Sprite_Battler, :Sprite_Picture,
  429. :Sprite_Timer].each {|classname|
  430.   parent = eval("#{classname}.superclass")
  431.   eval(
  432.   "class #{classname} < #{parent}
  433.     unless @already_aliased_mgc_zoom_#{classname}
  434.       alias update_mgc_zoom_#{classname} update
  435.       @already_aliased_mgc_zoom_#{classname} = true
  436.     end
  437.     def update
  438.       update_mgc_zoom_#{classname}
  439.       if self.instance_of?(#{classname})
  440.         unless viewport.nil? || no_viewport_zoom || !viewport.contains_zoomable_map
  441.           @phase_viewport_zoom = true
  442.           self.zoom_x = @base_zoom_x * viewport.zoom
  443.           self.zoom_y = @base_zoom_y * viewport.zoom
  444.           self.x = ((Graphics.width >> 1) +
  445.           (x - (Graphics.width >> 1)) * viewport.zoom).to_i
  446.           self.y = ((Graphics.height >> 1) +
  447.           (y - (Graphics.height >> 1)) * viewport.zoom).to_i
  448.           @phase_viewport_zoom = false
  449.         end
  450.       end
  451.     end
  452.   end")
  453. }
  454.  
  455. #==============================================================================
  456. # ** Sprite_Character
  457. #==============================================================================
  458. class Sprite_Character < Sprite_Base
  459.   #--------------------------------------------------------------------------
  460.   # * Aliased methods
  461.   #--------------------------------------------------------------------------
  462.   unless @already_aliased_mgc_zoom
  463.     alias update_balloon_mgc_zoom update_balloon
  464.     @already_aliased_mgc_zoom = true
  465.   end
  466.   #--------------------------------------------------------------------------
  467.   # * Update Balloon Icon
  468.   #--------------------------------------------------------------------------
  469.   def update_balloon
  470.     update_balloon_mgc_zoom
  471.     if @balloon_sprite then @balloon_sprite.update end
  472.   end
  473. end
  474.  
  475. #==============================================================================
  476. # ** Sprite_Base
  477. #==============================================================================
  478. class Sprite_Base < Sprite
  479.   #--------------------------------------------------------------------------
  480.   # * Aliased methods
  481.   #--------------------------------------------------------------------------
  482.   unless @already_aliased_mgc_zoom
  483.     alias animation_set_sprites_mgc_zoom animation_set_sprites
  484.     @already_aliased_mgc_zoom = true
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   # * Set Animation Sprite
  488.   #     frame : Frame data (RPG::Animation::Frame)
  489.   #--------------------------------------------------------------------------
  490.   def animation_set_sprites(frame)
  491.     animation_set_sprites_mgc_zoom(frame)
  492.     @ani_sprites.each {|sprite| sprite.update}
  493.   end
  494. end
  495.  
  496. #==============================================================================
  497. # ** Game_Map
  498. #==============================================================================
  499. class Game_Map
  500.   #--------------------------------------------------------------------------
  501.   # * Aliased methods
  502.   #--------------------------------------------------------------------------
  503.   unless @already_aliased_mgc_zoom
  504.     alias set_display_pos_mgc_zoom set_display_pos
  505.     alias scroll_down_mgc_zoom scroll_down
  506.     alias scroll_left_mgc_zoom scroll_left
  507.     alias scroll_right_mgc_zoom scroll_right
  508.     alias scroll_up_mgc_zoom scroll_up
  509.     @already_aliased_mgc_zoom = true
  510.   end
  511.   #--------------------------------------------------------------------------
  512.   # * Set Display Position
  513.   #--------------------------------------------------------------------------
  514.   def set_display_pos(x, y)
  515.     if MGC.zoom_map_active
  516.       if loop_horizontal?
  517.         @display_x = (x + width) % width
  518.       else
  519.         if width * MGC.map_zoom < screen_tile_x
  520.           @display_x = (width - screen_tile_x).abs / 2
  521.         else
  522.           x_min = screen_tile_x * (1.0 / MGC.map_zoom - 1.0) / 2
  523.           x_max = width + screen_tile_x * ((1.0 - 1.0 / MGC.map_zoom) / 2 - 1)
  524.           x = [x_min, [x, x_max].min].max
  525.           @display_x = x
  526.         end
  527.       end
  528.       if loop_vertical?
  529.         @display_y = (y + height) % height
  530.       else
  531.         if height * MGC.map_zoom < screen_tile_y
  532.           @display_y = (height - screen_tile_y).abs / 2
  533.         else
  534.           y_min = screen_tile_y * (1.0 / MGC.map_zoom - 1.0) / 2
  535.           y_max = height + screen_tile_y * ((1.0 - 1.0 / MGC.map_zoom) / 2 - 1)
  536.           y = [y_min, [y, y_max].min].max
  537.           @display_y = y
  538.         end
  539.       end
  540.       @parallax_x = x
  541.       @parallax_y = y
  542.     else
  543.       set_display_pos_mgc_zoom(x, y)
  544.     end
  545.   end
  546.   #--------------------------------------------------------------------------
  547.   # * Scroll Down
  548.   #--------------------------------------------------------------------------
  549.   def scroll_down(distance)
  550.     if MGC.zoom_map_active
  551.       if loop_vertical?
  552.         @display_y += distance
  553.         @display_y %= @map.height
  554.         @parallax_y += distance if @parallax_loop_y
  555.       else
  556.         last_y = @display_y
  557.         if height * MGC.map_zoom < screen_tile_y
  558.           @display_y = (height - screen_tile_y).abs / 2
  559.         else
  560.           max = height + screen_tile_y * ((1.0 - 1.0 / MGC.map_zoom) / 2 - 1)
  561.           @display_y = [@display_y + distance, max].min
  562.         end
  563.         @parallax_y += @display_y - last_y
  564.       end
  565.     else
  566.       scroll_down_mgc_zoom(distance)
  567.     end
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # * Scroll Left
  571.   #--------------------------------------------------------------------------
  572.   def scroll_left(distance)
  573.     if MGC.zoom_map_active
  574.       if loop_horizontal?
  575.         @display_x += @map.width - distance
  576.         @display_x %= @map.width
  577.         @parallax_x -= distance if @parallax_loop_x
  578.       else
  579.         last_x = @display_x
  580.         if width * MGC.map_zoom < screen_tile_x
  581.           @display_x = (width - screen_tile_x).abs / 2
  582.         else
  583.           min = screen_tile_x * (1.0 / MGC.map_zoom - 1.0) / 2
  584.           @display_x = [@display_x - distance, min].max
  585.         end
  586.         @parallax_x += @display_x - last_x
  587.       end
  588.     else
  589.       scroll_left_mgc_zoom(distance)
  590.     end
  591.   end
  592.   #--------------------------------------------------------------------------
  593.   # * Scroll Right
  594.   #--------------------------------------------------------------------------
  595.   def scroll_right(distance)
  596.     if MGC.zoom_map_active
  597.       if loop_horizontal?
  598.         @display_x += distance
  599.         @display_x %= @map.width
  600.         @parallax_x += distance if @parallax_loop_x
  601.       else
  602.         last_x = @display_x
  603.         if width * MGC.map_zoom < screen_tile_x
  604.           @display_x = (width - screen_tile_x).abs / 2
  605.         else
  606.           max = width + screen_tile_x * ((1.0 - 1.0 / MGC.map_zoom) / 2 - 1)
  607.           @display_x = [@display_x + distance, max].min
  608.         end
  609.         @parallax_x += @display_x - last_x
  610.       end
  611.     else
  612.       scroll_right_mgc_zoom(distance)
  613.     end
  614.   end
  615.   #--------------------------------------------------------------------------
  616.   # * Scroll Up
  617.   #--------------------------------------------------------------------------
  618.   def scroll_up(distance)
  619.     if MGC.zoom_map_active
  620.       if loop_vertical?
  621.         @display_y += @map.height - distance
  622.         @display_y %= @map.height
  623.         @parallax_y -= distance if @parallax_loop_y
  624.       else
  625.         last_y = @display_y
  626.         if height * MGC.map_zoom < screen_tile_y
  627.           @display_y = (height - screen_tile_y).abs / 2
  628.         else
  629.           min = screen_tile_y * (1.0 / MGC.map_zoom - 1.0) / 2
  630.           @display_y = [@display_y - distance, min].max
  631.         end
  632.         @parallax_y += @display_y - last_y
  633.       end
  634.     else
  635.       scroll_up_mgc_zoom(distance)
  636.     end
  637.   end
  638. end

RUBY 代码复制
  1. # F5 -> 1:1
  2. # F6 -> 2:1
  3. # F7 -> 4:1
  4. # F8 -> 1:2
  5. module MGC
  6.   class << self
  7.     #--------------------------------------------------------------------------
  8.     # * Aliased methods
  9.     #--------------------------------------------------------------------------
  10.     unless @already_aliased_mgc_zoom_test
  11.       alias update_map_zoom_test update_map_zoom
  12.       @already_aliased_mgc_zoom_test = true
  13.     end
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # * Mise à jour de la valeur du zoom
  17.   #--------------------------------------------------------------------------
  18.   def self.update_map_zoom
  19.     if Input.trigger?(:F5)
  20.       self.to_map_zoom(1.0, 10)
  21.     elsif Input.trigger?(:F6)
  22.       self.to_map_zoom(2.0, 10)
  23.     elsif Input.trigger?(:F7)
  24.       self.to_map_zoom(4.0, 10)
  25.     elsif Input.trigger?(:F8)
  26.       self.to_map_zoom(0.5, 10)
  27.     end
  28.     update_map_zoom_test
  29.   end
  30. end
回复 支持 反对

使用道具 举报

菜鸟飞呀飞 该用户已被删除
6
 楼主| 发表于 2012-11-30 21:57:14 手机端发表。 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
74
在线时间
154 小时
注册时间
2012-10-7
帖子
45
7
发表于 2012-12-1 10:17:13 | 只看该作者
给个范例工程:http://pan.baidu.com/share/link?shareid=152926&uk=153859016
脚本出错原因:应该是缺少文件,把范例工程里的的MGC_Map_Ace文件和pictures里的全部文件复制到你的工程就行了。

点评

就是移动到另一个地图 还残留之前地图画面……  发表于 2012-12-5 00:43
怎么残图,我试过没什么问题,这个是最新版的了,暂时就这类的脚本。  发表于 2012-12-2 19:12
地图移动时有残图,效率不是太理想。是否最新版或缺少部分脚本? PS.有没有其他同类型脚本范例呢  发表于 2012-12-1 22:38
回复 支持 反对

使用道具 举报

菜鸟飞呀飞 该用户已被删除
8
 楼主| 发表于 2012-12-6 22:07:06 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-8 03:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表