Project1

标题: 矩形位图转换梯形 [打印本页]

作者: 灵魂の补给    时间: 2011-8-20 08:19
标题: 矩形位图转换梯形
其实很烂的算法,以Y坐标建立X个精灵类的分割图片,2张时FPS:25(内存:128MB)

下载地址: 11.rar (3.58 MB, 下载次数: 85)
  1. #==============================================================================
  2. # ■ Sprite_Draw_3D
  3. #    中文名:梯形(扭曲)位图
  4. #    作者:END66RPG
  5. #    原理:以X坐标分成WIDTH个精灵位图,每个精灵进行Y轴缩小.
  6. #         因此,图片太大会较卡.可以改成1个SPRITE这样不卡,不过大概不行.
  7. #------------------------------------------------------------------------------
  8. #    mirror = 左(false)右(true)
  9. #    name   = 图片名字
  10. #==============================================================================

  11. class Sprite_Draw_3D < Sprite
  12.   #--------------------------------------------------------------------------
  13.   # ● 初始化对像
  14.   #     viewport : 显示端口
  15.   #--------------------------------------------------------------------------
  16.   def initialize(viewport,mirror=false,name="法帝斯回忆2")
  17.     super(viewport)
  18.     # 将活动块设置为可见
  19.     @draw_name = name
  20.     self.visible = false
  21.     # 设置活动块的坐标
  22.     self.x = 0
  23.     self.y = 40
  24.     self.z = 99
  25.     self.bitmap = RPG::Cache.picture(@draw_name)
  26.     self.mirror = mirror
  27.     if mirror == false
  28.     for i in 0..self.bitmap.width
  29.       i = i
  30.       eval(
  31.       "
  32.       @p#{i} = Sprite.new(viewport);
  33.       @p#{i}.bitmap = RPG::Cache.picture(@draw_name);
  34.       @p#{i}.x = self.x+i;
  35.       @p#{i}.z = self.z;
  36.       @p#{i}.y = self.y-(i.to_f/5);
  37.       @p#{i}.src_rect.set(i, 0, 1, self.bitmap.height);
  38.       @p#{i}.zoom_y = i.to_f / self.bitmap.width.to_f + 0.2
  39.       "
  40.       )
  41.       #p""
  42.     end
  43.     else
  44.     i = -1
  45.     while i != self.bitmap.width
  46.       i += 1
  47.       eval(
  48.       "
  49.       @p#{i} = Sprite.new(viewport);
  50.       @p#{i}.bitmap = RPG::Cache.picture(@draw_name);
  51.       @p#{i}.x = self.x+i+220;
  52.       @p#{i}.z = self.z;
  53.       @p#{i}.y = self.y+(i.to_f/5)-22;
  54.       @p#{i}.src_rect.set(i, 0, 1, self.bitmap.height);
  55.       @p#{i}.zoom_y = (self.bitmap.width-i).to_f / self.bitmap.width.to_f + 0.2
  56.       "
  57.       )
  58.     end
  59.     end
  60.    # update
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 释放
  64.   #--------------------------------------------------------------------------
  65.   def dispose
  66.     if self.bitmap != nil
  67.       for i in 0..self.bitmap.width
  68.       eval(
  69.       "
  70.       @p#{i}.bitmap.dispose
  71.       "
  72.       )
  73.       end
  74.     self.bitmap.dispose
  75.     end
  76.     super
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 更新图片
  80.   #--------------------------------------------------------------------------
  81.   def update(name)
  82.     @draw_name = name
  83.     for i in 0..self.bitmap.width
  84.       eval(
  85.       "
  86.       @p#{i}.bitmap = RPG::Cache.picture(@draw_name)
  87.       "
  88.       )
  89.     end
  90.   end
  91. end
复制代码

作者: 黑崎一护    时间: 2011-8-20 09:21
好神奇的脚本,可以用来做时空扭曲的场景啊...




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