Project1

标题: 怎么做到伪3D和Xas同时存在而不起冲突? [打印本页]

作者: q374435503    时间: 2013-6-8 19:15
标题: 怎么做到伪3D和Xas同时存在而不起冲突?
如题,求助!!
作者: 恶魔般的天使    时间: 2013-6-9 14:48
我给楼主推荐一个吧。用事件做的及时制基本不会有较大的。。冲突。我这里有个我自己做的纯事件的范例。楼主可以把你的伪3D代码发来。我试试看能不能兼容。希望楼主早点解决。
作者: q374435503    时间: 2013-6-9 22:04
恶魔般的天使 发表于 2013-6-9 14:48
我给楼主推荐一个吧。用事件做的及时制基本不会有较大的。。冲突。我这里有个我自己做的纯事件的范例。楼主 ...

代码↓
RUBY 代码复制
  1. #克蓝娜德 CNGAMES
  2. =begin
  3. 把下面的字符加到你的地图名里面
  4. [W3D]  -  使用伪3D 如果你不填的话 就木有效果
  5. [#XX] -  XX = 叉叉范围是0-89之间 惯例用了我给你的伪3D看到这个是不是有违和感
  6. [-X]  -  X = 这个X的范围是0或者1 0为显示两面墙 1为仅显示
  7. 法线正面的墙(只是个概念伪3D肿么会有法线,也就是正面朝着你的墙)
  8. 如果你不写[#XX]或者[-X]就会使用默认的
  9. 默认参数为:
  10. [#XX] = [#45]
  11. [-X] = [-1]
  12. =end
  13. class Game_System
  14.   alias initialize_W3D initialize
  15.  
  16.   attr_reader :factor
  17.   attr_reader :correct
  18.  
  19.   attr_reader :scroll_y
  20.   attr_reader :distance
  21.   attr_reader :angle
  22.   attr_reader :height
  23.   attr_reader :columns
  24.   attr_reader :filter
  25.   attr_reader :zoom
  26.   attr_accessor :new_zoom
  27.   attr_accessor :hidewalls
  28.   attr_accessor :hide
  29.   attr_accessor :new_angle
  30.   attr_accessor :need_refresh
  31.   attr_accessor :coord
  32.   def initialize
  33.     initialize_W3D
  34.     [url=home.php?mod=space&uid=98379]@zoom[/url] = 1.00
  35.     @scroll_y = 256#相机与角色的距离
  36.     [url=home.php?mod=space&uid=291977]@height[/url] = 1    #地图原件的高度,建议不要改 除非你做特殊效果
  37.     @columns = 16   #伪3D图块的质量,值为8或者16。如果场景不大可以用16。
  38.                    #针对纵面 8的话图块边缘锯齿比较大,流畅。16边缘锯齿较小,卡。
  39.     @filter = 2*32 #纵向墙的高度设定(如果增加高度 不要忘了在上面加上标志)
  40.     @hidewalls = 1 #这个就是默认的双面还是单面墙显示的值,值为0或1。
  41.     @distance = 480#焦距 玩过相机的人都知道 值不要太低,默认为480,不要低于256。
  42.     #焦距值越高看到纵面的墙壁面积就越少,越低看到的墙壁面积就越多。
  43.     [url=home.php?mod=space&uid=94902]@Hide[/url] = 90#角色与原件距离的Y坐标的值,用于遮挡角色时半透明。
  44.     #一个原件为32像素所以值至少为33 不然低于33 你脸贴到墙上墙都不会管你。
  45.     self.angle = 45 #摄像机角度
  46.     #以上属性均可在游戏中更改,用事件页第三页的脚本调用  格式为:
  47.     #$game_system.(属性) = value(值)
  48.     #举个例子:
  49.     #$game_system.zoom = 1.5   #(1.5为放大150%)
  50.     #或者
  51.     #$game_system.columns = 8
  52.  
  53.     #以下为内部使用,请勿随意更改
  54.     @new_angle = false
  55.     @need_refresh = false
  56.     @new_zoom = false
  57.     @coord = nil
  58.   end
  59.  
  60.   #部分脚本基于Neo Mode07。
  61.   def zoom=(n)
  62.     if @zoom != n
  63.       @new_zoom = true
  64.     end
  65.     @zoom = n
  66.   end
  67.  
  68.   def refresh(x,y)
  69.     @coord = [x,y]
  70.   end
  71.  
  72.   def screen2W3D_y(y)
  73.     y *= @zoom
  74.     return @scroll_y + (@cd * y) / (@distance - y * @sinus)
  75.   end
  76.  
  77.   def screen2map_y(y)
  78.     return ((@distance * (@scroll_y - y) / @zoom /
  79.       (@dif - y * @sinus) + @scroll_y))
  80.   end
  81.  
  82.   def screen2zoom(y)
  83.     return (y * @factor + @correct) * @zoom
  84.   end
  85.  
  86.   def angle=(n)
  87.     [url=home.php?mod=space&uid=124954]@Angle[/url] = n
  88.     @cosinus = Math.cos(Math::PI * (@angle / 180.0))
  89.     @sinus = Math.sin(Math::PI * (@angle / 180.0))
  90.     @cd = @cosinus * @distance
  91.     @ys = @scroll_y * @sinus
  92.     @dif = @ys - @cd
  93.  
  94.     z0 = @distance / (@distance + @scroll_y * @sinus)
  95.     h0 = (-@distance * @scroll_y * @cosinus) /
  96.       (@distance + @scroll_y * @sinus) + @scroll_y
  97.     @factor = (1.0 - z0) / (@scroll_y - h0)
  98.     @correct = 1.0 - @scroll_y * @factor
  99.     @new_angle = true
  100.   end
  101.  
  102.   def distance=(n)
  103.     @distance = n
  104.     self.angle = @angle
  105.   end
  106.  
  107.   def height=(n)
  108.     @height = n
  109.     @need_refresh = true
  110.   end
  111.  
  112.   def columns=(n)
  113.     @columns = n
  114.     @need_refresh = true
  115.   end
  116. end
  117.  
  118. $data_maps = load_data("Data/MapInfos.rxdata")
  119.  
  120. class W3DTilemap
  121.   attr_reader   :autotiles
  122.   attr_accessor :tileset
  123.   attr_accessor :priorities
  124.  
  125.   def initialize(vp)
  126.     @viewport = vp
  127.     @horizontal = {}  
  128.     @vertical = {}   
  129.     @tileset = nil
  130.     @map_data = nil
  131.     @priorities = nil
  132.     @bitmap = Bitmap.new(1,1)
  133.     @sprites = []     
  134.     @autotiles = []
  135.     refresh
  136.   end
  137.  
  138.   def refresh(sprites=true)
  139.     @height = $game_system.height
  140.     @columns = $game_system.columns
  141.     @scroll_y = $game_system.scroll_y
  142.     @filter = $game_system.filter
  143.     @ox = -1
  144.     @oy = -1
  145.     if sprites
  146.       w = nil
  147.       @sprites.each{ |w|
  148.         w.dispose}
  149.       @sprites = []
  150.       for i in 0...(@scroll_y / @height)
  151.         @sprites[i] = Sprite.new(@viewport)
  152.         @sprites[i].y = i * @height
  153.       end
  154.       for i in (@scroll_y / @height)...(((480-@scroll_y) / 2 + @scroll_y) /
  155.                                                                       @height)
  156.         @sprites[i] = Sprite.new(@viewport)
  157.         @sprites[i].y = i * @height * 2 - @scroll_y
  158.       end
  159.     end
  160.     @sprites.each {|w|
  161.       w.zoom_x = $game_system.screen2zoom(w.y+1)
  162.       if w.zoom_x > 1
  163.         w.zoom_y = w.zoom_x
  164.       end
  165.       w.x = 320
  166.     }
  167.     if sprites
  168.       unless @map_data.nil?
  169.         refresh_bitmap
  170.       end
  171.     end
  172.   end
  173.  
  174.   def terrain=(n)
  175.     @terrain = n
  176.   end
  177.  
  178.   def tileset=(bitmap)
  179.     @tileset = bitmap
  180.   end
  181.  
  182.   def ox=(n)
  183.     return if @ox == n
  184.     @ox = n
  185.     dif = (@oy + @scroll_y)
  186.     ox = n + 320
  187.     w = nil
  188.     i = nil
  189.     a = nil
  190.     z = nil
  191.     erase = nil
  192.  
  193.     @sprites.each{ |w|
  194.       w.ox = ox}
  195.  
  196.     @horizontal.each{ |i, a|
  197.       new_y = $game_system.screen2W3D_y(i - dif)
  198.       z = $game_system.screen2zoom(new_y)
  199.       erase = (a[0].y - 256).between?(1,$game_system.hide)
  200.       a.each{ |w|
  201.         w.x = 320 + z * (w.map_x - ox)
  202.         if erase and 28 >= (ox - w.map_x).abs
  203.           w.opacity = 100
  204.         else
  205.           w.opacity = 255
  206.         end
  207.       }
  208.     }
  209.  
  210.     @vertical.each{ |i, a|
  211.       new_y = $game_system.screen2W3D_y(i - dif)
  212.       z = $game_system.screen2zoom(new_y)
  213.       erase = (a[0].map_y % 6 != 0)
  214.       a.each{ |w|
  215.         if erase and (w.map_x - ox).abs < @filter
  216.           w.jump = true     
  217.           w.visible = false
  218.           next
  219.         end
  220.         w.jump = false
  221.         if w.visible
  222.           if w.visible = (ox*w.side >= w.map_x*w.side)
  223.             w.x = 320 + z * (w.map_x - ox)
  224.           end
  225.         elsif w.visible = (ox*w.side >= w.map_x*w.side)
  226.           w.y = new_y
  227.           w.x = 320 + z * (w.map_x - ox)
  228.           w.zoom_y = z
  229.         end
  230.       }
  231.     }
  232.   end
  233.  
  234.   def oy=(n)
  235.     return if @oy == n
  236.     @oy = n
  237.     ox320 = @ox + 320
  238.     dif = (n + @scroll_y)
  239.     w = nil
  240.     i = nil
  241.     a = nil
  242.     z = nil
  243.     mz = nil
  244.     new_y = nil
  245.     erase = nil
  246.  
  247.     @sprites.each{ |w|
  248.       w.src_rect.y = $game_system.screen2map_y(w.y+1).round + @oy
  249.     }
  250.  
  251.     @horizontal.each{ |i, a|
  252.       new_y = $game_system.screen2W3D_y(i - dif)
  253.       z = $game_system.screen2zoom(new_y)
  254.       erase = (a[0].y - 256).between?(1,$game_system.hide)
  255.       a.each{ |w|
  256.         w.y = new_y
  257.         w.x = 320 + (z * (w.map_x - ox320))
  258.         w.zoom_x = (w.zoom_y = z + 0.04)
  259.         if erase and 28 >= (ox320 - w.map_x).abs
  260.           w.opacity = 100
  261.         else
  262.           w.opacity = 255
  263.         end
  264.       }
  265.     }
  266.  
  267.     @vertical.each{ |i, a|
  268.     new_y = $game_system.screen2W3D_y(i - dif)
  269.     z = $game_system.screen2zoom(new_y)
  270.     mz = [z,1].max
  271.     a.each { |w|
  272.       if w.visible
  273.         w.y = new_y
  274.         w.x = 320 + z * (w.map_x - ox320)
  275.         w.zoom_y = z
  276.         w.zoom_x = mz
  277.       end
  278.       }
  279.     }
  280.   end
  281.  
  282.   def map_data=(data)
  283.     @map_data = data
  284.     refresh_bitmap
  285.   end
  286.  
  287.   def refresh_bitmap
  288.     @terrain = $game_map.terrain_tags if @terrain.nil?
  289.     @horizontal.each{ |i, c|
  290.       c.each{ |w|
  291.         w.dispose}}
  292.     @vertical.each{ |i, c|
  293.       c.each{ |w|
  294.         w.dispose}}
  295.     @horizontal.clear
  296.     @vertical.clear
  297.  
  298.     @bitmap.dispose
  299.     @bitmap = Bitmap.new(@map_data.xsize*32,@map_data.ysize*32)
  300.  
  301.     rect = Rect.new(0,0,32,32)
  302.     source = Rect.new(0,0,32,32)
  303.     i = 0
  304.     x = 0
  305.     y = 0
  306.     z = 0
  307.     data = nil
  308.     wall = nil
  309.     for x in [email]0...@map_data.xsize[/email]
  310.       for y in [email]0...@map_data.ysize[/email]
  311.         rect.x = x*32
  312.         rect.y = y*32
  313.         source.x = ((@map_data[x,y,0] - 384) % 8) * 32
  314.         source.y = ((@map_data[x,y,0] - 384) / 8) * 32
  315.         @bitmap.stretch_blt(rect,@tileset,source)
  316.         for z in 0..2
  317.           data = @map_data[x,y,z]
  318.           if @terrain[data] == 2  
  319.             if @terrain[@map_data[[x+1,@map_data.xsize-1].min,y,z].to_i] != 2
  320.               for i in 0...@columns
  321.                 wall = SWall.new(@viewport,@columns)
  322.                 wall.map_x = x * 32 + 32
  323.                 wall.map_y = y * 32 + (@columns-i) * 32 / @columns
  324.                 wall.bitmap = @tileset
  325.                 wall.z = wall.map_y
  326.                 wall.side = 1 * $game_system.hidewalls
  327.                 wall.set_src(@terrain, data, i)
  328.                 wall.ox = 32 / @columns / 2 - 1
  329.                 if @vertical.key?(wall.map_y)
  330.                   @vertical[wall.map_y].push(wall)
  331.                 else
  332.                   @vertical[wall.map_y] = [wall]
  333.                 end
  334.               end
  335.             end
  336.             if @terrain[@map_data[[x-1,0].max,y,z].to_i] != 2
  337.               for i in 0...@columns
  338.                 wall = SWall.new(@viewport,@columns)
  339.                 wall.map_x = x * 32
  340.                 wall.map_y = y * 32 + (@columns-i) * 32 / @columns
  341.                 wall.bitmap = @tileset
  342.                 wall.mirror = true
  343.                 wall.set_src(@terrain, data, i)
  344.                 wall.z = wall.map_y
  345.                 wall.side = -1 * $game_system.hidewalls
  346.                 wall.ox = 32 / @columns / 2
  347.                 if @vertical.key?(wall.map_y)
  348.                   @vertical[wall.map_y].push(wall)
  349.                 else
  350.                   @vertical[wall.map_y] = [wall]
  351.                 end
  352.               end
  353.             end
  354.           end
  355.           if @terrain[data] == 1 and
  356.             (y+1 == @map_data.ysize or
  357.               @map_data[x,y+1,z] != data + 8)
  358.             wall = Wall.new(@viewport,1,@map_data)
  359.             wall.map_x = x * 32 + 16
  360.             wall.map_y = y * 32 + 32 + 1
  361.             wall.real_y = y
  362.             wall.bitmap = @tileset
  363.             wall.set_src(@terrain, data)
  364.             wall.ox = 15
  365.             wall.z = wall.map_y
  366.             if @horizontal.key?(wall.map_y)
  367.               @horizontal[wall.map_y].push(wall)
  368.             else
  369.               @horizontal[wall.map_y] = [wall]
  370.             end
  371.           end
  372.         end
  373.       end
  374.     end
  375.     for i in [email]0...@sprites.size[/email]
  376.       @sprites[i].bitmap = @bitmap
  377.       @sprites[i].src_rect.set(0,i,@bitmap.width,@height)
  378.       if i >= @scroll_y / @height
  379.         @sprites[i].src_rect.height *= 2
  380.       end
  381.     end
  382.   end
  383.  
  384.   def update
  385.     if $game_system.coord
  386.       x = $game_system.coord[0]
  387.       y = $game_system.coord[1]
  388.       source = Rect.new(0,0,32,32)
  389.       rect = Rect.new(x*32,y*32,32,32)
  390.       for z in 0..2
  391.         if not [1,2].include?(@terrain[@map_data[x,y,z]])
  392.           source.x = ((@map_data[x,y,z] - 384) % 8) * 32
  393.           source.y = ((@map_data[x,y,z] - 384) / 8) * 32
  394.           @bitmap.stretch_blt(rect,@tileset,source)
  395.         end
  396.       end
  397.       $game_system.coord = nil
  398.     end
  399.  
  400.     if $game_system.need_refresh
  401.       $game_system.new_angle = false
  402.       $game_system.need_refresh = false
  403.       refresh
  404.       return
  405.     end
  406.     if $game_system.new_zoom
  407.       $game_system.new_zoom = false
  408.       refresh(false)
  409.       return
  410.     end
  411.     if $game_system.new_angle
  412.       @sprites.each {|w|
  413.       w.zoom_x = $game_system.screen2zoom(w.y+1)
  414.         if w.zoom_x > 1
  415.           w.zoom_y = w.zoom_x
  416.         end
  417.         w.x = 320
  418.       }
  419.       x = @ox
  420.       y = @oy
  421.       @ox += 1
  422.       @oy += 1
  423.       self.ox = x
  424.       self.oy = y
  425.       $game_system.new_angle = false
  426.     end
  427.   end
  428.  
  429.   def dispose
  430.     @horizontal.each{ |i, c|
  431.       c.each{ |w|
  432.         w.dispose}}
  433.     @vertical.each{ |i, c|
  434.       c.each{ |w|
  435.         w.dispose}}
  436.     @sprites.each{ |w|
  437.         w.dispose}
  438.     @bitmap.dispose
  439.   end
  440. end
  441.  
  442. class Wall < Sprite
  443.   attr_accessor :map_x
  444.   attr_accessor :map_y
  445.   attr_accessor :real_y
  446.   attr_accessor :side
  447.   attr_accessor :jump
  448.   attr_accessor :height
  449.   def initialize(vp,spalten,data=nil)
  450.     super(vp)
  451.     @data = data
  452.     @spalten = spalten
  453.     [url=home.php?mod=space&uid=271873]@jump[/url] = false
  454.     @real_y = 0
  455.     @map_x = 0
  456.     @map_y = 0
  457.     @side = 0
  458.     self.x = 320
  459.     self.z = 100
  460.     @blick = true
  461.   end
  462.  
  463.   def set_src(terrain,tile,i=0)
  464.     height = 1
  465.     while terrain[tile - height * 8].to_i == 1
  466.       height += 1
  467.     end
  468.     self.src_rect.set(
  469.             ((tile % 8) * 32) + 32 / @spalten * i,
  470.             ((tile - 384) / 8 - height + 1) * 32,
  471.             32 / @spalten,
  472.             32 * height)
  473.     self.oy = height * 32 - 1
  474.     @height = height
  475.   end
  476. end
  477.  
  478. class SWall < Wall
  479.   def set_src(terrain,tile,i)
  480.     super
  481.     self.src_rect.height -= 32
  482.     self.oy -= 32
  483.   end
  484. end
  485.  
  486. class Game_Map
  487.   attr_reader :W3D
  488.  
  489.   alias scroll_down_W3D scroll_down
  490.   alias scroll_left_W3D scroll_left
  491.   alias scroll_right_W3D scroll_right
  492.   alias scroll_up_W3D scroll_up
  493.   alias setup_W3D setup
  494.  
  495.   def scroll_down(distance)
  496.     if $game_map.W3D
  497.       @display_y += distance
  498.     else
  499.       scroll_down_W3D(distance)
  500.     end
  501.   end
  502.  
  503.   def scroll_left(distance)
  504.     if $game_map.W3D
  505.       @display_x -= distance
  506.     else
  507.       scroll_left_W3D(distance)
  508.     end
  509.   end
  510.  
  511.   def scroll_right(distance)
  512.     if $game_map.W3D
  513.       @display_x += distance
  514.     else
  515.       scroll_right_W3D(distance)
  516.     end
  517.   end
  518.  
  519.   def scroll_up(distance)
  520.     if $game_map.W3D
  521.       @display_y -= distance
  522.     else
  523.       scroll_up_W3D(distance)
  524.     end
  525.   end
  526.  
  527.   def name
  528.     return $data_maps[@map_id].name
  529.   end
  530.  
  531.   def setup(id)
  532.     setup_W3D(id)
  533.     @W3D = false
  534.     for part in self.name.split("[")
  535.       case part
  536.       when /#(.*)\]/
  537.         $game_system.angle = $1.to_i
  538.       when "W3D]"
  539.         @W3D = true
  540.       when  /-(.*)\]/
  541.         $game_system.hidewalls = $1.to_i
  542.       end
  543.     end
  544.   end
  545. end
  546.  
  547. class Game_Character
  548.   alias screen_z_W3D screen_z
  549.   def screen_z(height = 0)
  550.     if $game_map.W3D
  551.       if @always_on_top
  552.         return $game_map.height * 32 + 10
  553.       end
  554.       return @real_y / 4 + 33
  555.     else
  556.       screen_z_W3D(height)
  557.     end
  558.   end
  559. end
  560.  
  561. class Game_Player
  562.   alias center_W3D center
  563.   def center(x, y)
  564.     if $game_map.W3D
  565.       $game_map.display_x = x * 128 - CENTER_X
  566.       $game_map.display_y = y * 128 - CENTER_Y
  567.     else
  568.       center_W3D(x, y)
  569.     end
  570.   end
  571. end
  572.  
  573. class Sprite_Character
  574.   alias update_W3D update
  575.   def update
  576.     update_W3D
  577.     return unless $game_map.W3D
  578.     self.y = $game_system.screen2W3D_y(self.y - $game_system.scroll_y)
  579.     self.zoom_x = self.zoom_y = $game_system.screen2zoom(self.y)
  580.     self.x = 320 + (self.zoom_x * (self.x - 320))
  581.   end
  582. end
  583.  
  584. class Spriteset_Map
  585.   def initialize
  586.     @viewport1 = Viewport.new(0, 0, 640, 480)
  587.     @viewport2 = Viewport.new(0, 0, 640, 480)
  588.     @viewport3 = Viewport.new(0, 0, 640, 480)
  589.     @viewport2.z = 200
  590.     @viewport3.z = 5000
  591.     if $game_map.W3D
  592.       @tilemap = W3DTilemap.new(@viewport1)
  593.       @tilemap.terrain = $game_map.terrain_tags
  594.     else
  595.       @tilemap = Tilemap.new(@viewport1)
  596.     end
  597.     @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  598.     for i in 0..6
  599.       autotile_name = $game_map.autotile_names[i]
  600.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  601.     end
  602.     @tilemap.map_data = $game_map.data
  603.     @tilemap.priorities = $game_map.priorities
  604.     @panorama = Plane.new(@viewport1)
  605.     @panorama.z = -1000
  606.     @fog = Plane.new(@viewport1)
  607.     @fog.z = 3000
  608.     @character_sprites = []
  609.     for i in $game_map.events.keys.sort
  610.       sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  611.       @character_sprites.push(sprite)
  612.     end
  613.     @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  614.     @weather = RPG::Weather.new(@viewport1)
  615.     @picture_sprites = []
  616.     for i in 1..50
  617.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  618.         $game_screen.pictures[i]))
  619.     end
  620.     @timer_sprite = Sprite_Timer.new
  621.     update
  622.   end
  623. ###########重定义update       更改远景图更新速度 直接复制默认的  顺着箭头往下走
  624.   def update
  625.     # 远景与现在的情况有差异发生的情况下                                     ↓
  626.     if @panorama_name != $game_map.panorama_name or#                         ↓
  627.        @panorama_hue != $game_map.panorama_hue#                              ↓
  628.       @panorama_name = $game_map.panorama_name#                              ↓
  629.       @panorama_hue = $game_map.panorama_hue#                                ↓
  630.       if @panorama.bitmap != nil#                                            ↓
  631.         @panorama.bitmap.dispose#                                            ↓
  632.         @panorama.bitmap = nil#                                              ↓
  633.       end
  634.       if @panorama_name != ""#                                               ↓
  635.         @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  636.       end
  637.       Graphics.frame_reset#                                                  ↓
  638.     end
  639.     # 雾与现在的情况有差异的情况下                                           ↓
  640.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue#     ↓
  641.       @fog_name = $game_map.fog_name#                                        ↓
  642.       @fog_hue = $game_map.fog_hue#                                          ↓
  643.       if @fog.bitmap != nil#                                                 ↓
  644.         @fog.bitmap.dispose#                                                 ↓
  645.         @fog.bitmap = nil#                                                   ↓
  646.       end
  647.       if @fog_name != ""
  648.         @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)#                   ↓
  649.       end
  650.       Graphics.frame_reset#                                                  ↓
  651.     end
  652.     # 刷新元件地图
  653.     @tilemap.ox = $game_map.display_x / 4#                                   ↓
  654.     @tilemap.oy = $game_map.display_y / 4#                                   ↓
  655.     @tilemap.update
  656.     # 刷新远景平面#                                                          ↓
  657.     @panorama.ox = $game_map.display_x / 8 #这里更改X速度                   ←
  658.     @panorama.oy = $game_map.display_y * 0 #这里更改Y速度                   ←
  659.     # 刷新雾平面
  660.     @fog.zoom_x = $game_map.fog_zoom / 100.0
  661.     @fog.zoom_y = $game_map.fog_zoom / 100.0
  662.     @fog.opacity = $game_map.fog_opacity
  663.     @fog.blend_type = $game_map.fog_blend_type
  664.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  665.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  666.     @fog.tone = $game_map.fog_tone
  667.     # 刷新角色活动块
  668.     for sprite in @character_sprites
  669.       sprite.update
  670.     end
  671.     # 刷新天候图形
  672.     @weather.type = $game_screen.weather_type
  673.     @weather.max = $game_screen.weather_max
  674.     @weather.ox = $game_map.display_x / 4
  675.     @weather.oy = $game_map.display_y / 4
  676.     @weather.update
  677.     # 刷新图片
  678.     for sprite in @picture_sprites
  679.       sprite.update
  680.     end
  681.     # 刷新计时器块
  682.     @timer_sprite.update
  683.     # 设置画面的色调与震动位置
  684.     @viewport1.tone = $game_screen.tone
  685.     @viewport1.ox = $game_screen.shake
  686.     # 设置画面的闪烁色
  687.     @viewport3.color = $game_screen.flash_color
  688.     # 刷新显示端口
  689.     @viewport1.update
  690.     @viewport3.update
  691.   end
  692. end

作者: 恶魔般的天使    时间: 2013-6-10 22:21
本帖最后由 恶魔般的天使 于 2013-6-11 01:40 编辑

  对了,楼主,我想到了一个。你去搜索一个3D打幽灵的游戏范例。里面的3D效果好多了。也是及时制的。楼主可以研究研究。。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1