Project1

标题: 【Plane类】RPGXP内部类,伪代码.... [打印本页]

作者: 癫狂侠客    时间: 2011-9-10 11:21
标题: 【Plane类】RPGXP内部类,伪代码....
本帖最后由 癫狂侠客 于 2011-9-10 11:30 编辑

说明: Plane类代码为某侠个人试写的,能支持扩展分辨率,可以让800*600的双远景图的系统成为可能,但是仅某侠单个人测试,可能存在Bug,此代码经优化后可能会整合入DKRM,如有Bug请回复此帖说明,或者给某侠留言,
另外说明,此脚本直接插入后会无效果,只有扩展分辨率采用的着,应该和某侠正是试写的Tileset类一起使用就成了扩展分辨率的真脚本了!

以下是官方解释:
Plane类
平面的类。所谓平面,是在整个画面中排列显示位图图形的特殊的精灵,用来显示全景和雾。


某侠的Plane类伪代码:
  1. #============================================================================
  2. # ■ Plane
  3. #----------------------------------------------------------------------------
  4. #    处理平面的类(某侠编辑伪代码)
  5. #============================================================================

  6. class Plane
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化定义
  9.   #--------------------------------------------------------------------------
  10.   def initialize(v = Viewport.new(0, 0, 640, 480))
  11.     @x           = 0
  12.     @y           = 0
  13.     @z           = 0
  14.     @ox          = 0
  15.     @oy          = 0
  16.     @ox2         = 0
  17.     @oy2         = 0
  18.     @rect        = v.rect
  19.     @zoom_x      = 1.0
  20.     @zoom_y      = 1.0
  21.     @bitmap      = nil
  22.     @contents    = Sprite.new
  23.     @n_w         = 1
  24.     @n_h         = 1
  25.     @visible     = true
  26.     @tone        = Tone.new(0, 0, 0, 0)
  27.     @color       = Color.new(255,255,255,0)
  28.     @blend_type  = 0
  29.     @opacity     = 255
  30.     @dispose     = false
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 刷新
  34.   #--------------------------------------------------------------------------
  35.   def update
  36.     @contents.x = @x
  37.     @contents.y = @y
  38.     @contents.ox = @ox2
  39.     @contents.oy = @oy2
  40.     @contents.opacity = @opacity
  41.     @contents.visible = @visible
  42.     @contents.tone = @tone
  43.     @contents.blend_type = @blend_type
  44.     @contents.z = @z
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 装载图形(bitmap)
  48.   #--------------------------------------------------------------------------
  49.   def bitmap=(bitmap)
  50.     if @disposed
  51.       raise(RGSSError,"disposed window")
  52.     else
  53.       @bitmap = bitmap
  54.       count_wh
  55.       update
  56.     end
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 图形
  60.   #--------------------------------------------------------------------------
  61.   def bitmap
  62.     return if @bitmap != nil
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● X 坐标(x)
  66.   #--------------------------------------------------------------------------
  67.   def x=(x)
  68.     if @disposed
  69.       raise(RGSSError,"disposed window")
  70.     else
  71.       @x = x
  72.       update
  73.     end
  74.   end
  75.   def x
  76.     return @x
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● Y 坐标(y)
  80.   #--------------------------------------------------------------------------
  81.   def y=(y)
  82.     if @disposed
  83.       raise(RGSSError,"disposed window")
  84.     else
  85.       @y = y
  86.       update
  87.     end
  88.   end
  89.   def y
  90.     return @y
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● Z 坐标(z)
  94.   #--------------------------------------------------------------------------
  95.   def z=(z)
  96.     if @disposed
  97.       raise(RGSSError,"disposed window")
  98.     else
  99.       @z = z
  100.       update
  101.     end
  102.   end
  103.   def z
  104.     return @z
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● X 漂移量(ox)
  108.   #--------------------------------------------------------------------------
  109.   def ox=(ox)
  110.     if @disposed
  111.       raise(RGSSError,"disposed window")
  112.     else
  113.       @ox = ox
  114.       @ox2 = ox % (@bitmap.width * @zoom_x).to_i
  115.       update
  116.     end
  117.   end
  118.   def ox
  119.     return @ox
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● Y 漂移量(oy)
  123.   #--------------------------------------------------------------------------
  124.   def oy=(oy)
  125.     if @disposed
  126.       raise(RGSSError,"disposed window")
  127.     else
  128.       @oy = oy
  129.       @oy2 = oy % (@bitmap.height * @zoom_y).to_i
  130.       update
  131.     end
  132.   end
  133.   def oy
  134.     return @oy
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● X 方向缩放(zoom_x)
  138.   #--------------------------------------------------------------------------
  139.   def zoom_x=(zx)
  140.     if @disposed
  141.       raise(RGSSError,"disposed window")
  142.     else
  143.       if @zoom_x != zx
  144.         @zoom_x = zx
  145.         count_wh
  146.       end
  147.       update
  148.     end
  149.   end
  150.   def zoom_x
  151.     return @zoom_x
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● Y 方向缩放(zoom_y)
  155.   #--------------------------------------------------------------------------
  156.   def zoom_y=(zy)
  157.     if @disposed
  158.       raise(RGSSError,"disposed window")
  159.     else
  160.       if @zoom_y != zy
  161.         @zoom_y = zy
  162.         count_wh
  163.       end
  164.       update
  165.     end
  166.   end
  167.   def zoom_y
  168.     return @zoom_y
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● 不透明度(opacity)
  172.   #--------------------------------------------------------------------------
  173.   def opacity=(op)
  174.     if @disposed
  175.       raise(RGSSError,"disposed window")
  176.     else
  177.       @opacity = op
  178.       update
  179.     end
  180.   end
  181.   def opacity
  182.     return @opacity
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 颜色叠加(color)
  186.   #--------------------------------------------------------------------------
  187.   def color=(c)
  188.     if @disposed
  189.       raise(RGSSError,"disposed window")
  190.     else
  191.       @color = c
  192.       update
  193.     end
  194.   end
  195.   def color
  196.     return @color
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 色调(tone)
  200.   #--------------------------------------------------------------------------
  201.   def tone=(tone)
  202.     if @disposed
  203.       raise(RGSSError,"disposed window")
  204.     else
  205.       @tone = tone
  206.       update
  207.     end
  208.   end
  209.   def tone
  210.     return @tone
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 是否可见(visible)
  214.   #--------------------------------------------------------------------------
  215.   def visible=(v)
  216.     if @disposed
  217.       raise(RGSSError,"disposed window")
  218.     else
  219.       @visible = v
  220.       update
  221.     end
  222.   end
  223.   def visible
  224.     return @visible
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ● 叠加模式(blend_type)
  228.   #--------------------------------------------------------------------------
  229.   def blend_type=(bt)
  230.     if @disposed
  231.       raise(RGSSError,"disposed window")
  232.     else
  233.       @blend_type = bt
  234.       update
  235.     end
  236.   end
  237.   def blend_type
  238.     return @blend_type
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 释放内存(dispose)
  242.   #--------------------------------------------------------------------------
  243.   def dispose
  244.     return if @dispose
  245.     @dispose = true
  246.     @contents.dispose
  247.     @contents.bitmap.dispose if @contents.bitmap
  248.     @bitmap.dispose
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ● 检测释放(dispose?)
  252.   #--------------------------------------------------------------------------
  253.   def dispose?
  254.     @dispose
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # ● 计算Plane的长宽与精灵排布(count_wh)
  258.   #--------------------------------------------------------------------------
  259.   def count_wh
  260.     if @bitmap != nil
  261.       @n_w = @rect.width / (@bitmap.width * @zoom_x).to_i + 3
  262.       @n_h = @rect.height / (@bitmap.height * @zoom_y).to_i + 3
  263.       h = @n_h * (@bitmap.height * @zoom_y).to_i
  264.       w = @n_w * (@bitmap.width * @zoom_x).to_i
  265.       if @contents.bitmap == nil
  266.         @contents.bitmap = Bitmap.new(w, h)
  267.       end
  268.       for x in 0..@n_w
  269.         for y in 0..@n_h
  270.           rect = Rect.new(0,0,@bitmap.width * @zoom_x,@bitmap.height * @zoom_y)
  271.           dest_rect = Rect.new(x * @bitmap.width * @zoom_x,\
  272.           y * @bitmap.height * @zoom_y,@bitmap.width * @zoom_x,\
  273.           @bitmap.height * @zoom_y)
  274.           @contents.bitmap.stretch_blt(dest_rect, @bitmap, rect)
  275.         end
  276.       end
  277.     end
  278.   end
  279. end
复制代码

作者: 鼎风乱影    时间: 2011-9-24 11:05
本帖最后由 鼎风乱影 于 2011-9-24 11:05 编辑

我说怎么出错了啊,还有这脚本有什么用




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