じ☆ve冰风 发表于 2024-4-19 19:58:56

矩形位图转换梯形

其实很烂的算法,以Y坐标建立X个精灵类的分割图片,2张时FPS:25(内存:128MB)

下载地址:
#==============================================================================# ■ Sprite_Draw_3D#    中文名:梯形(扭曲)位图#    作者:END66RPG#    原理:以X坐标分成WIDTH个精灵位图,每个精灵进行Y轴缩小.#         因此,图片太大会较卡.可以改成1个SPRITE这样不卡,不过大概不行.#------------------------------------------------------------------------------#    mirror = 左(false)右(true)#    name   = 图片名字#==============================================================================class Sprite_Draw_3D < Sprite#--------------------------------------------------------------------------# ● 初始化对像#   viewport : 显示端口#--------------------------------------------------------------------------def initialize(viewport,mirror=false,name="法帝斯回忆2")    super(viewport)    # 将活动块设置为可见    @draw_name = name    self.visible = false    # 设置活动块的坐标    self.x = 0    self.y = 40    self.z = 99    self.bitmap = RPG::Cache.picture(@draw_name)    self.mirror = mirror    if mirror == false    for i in 0..self.bitmap.width      i = i      eval(      "      @p#{i} = Sprite.new(viewport);      @p#{i}.bitmap = RPG::Cache.picture(@draw_name);      @p#{i}.x = self.x+i;      @p#{i}.z = self.z;      @p#{i}.y = self.y-(i.to_f/5);      @p#{i}.src_rect.set(i, 0, 1, self.bitmap.height);      @p#{i}.zoom_y = i.to_f / self.bitmap.width.to_f + 0.2      "      )      #p""    end    else    i = -1    while i != self.bitmap.width      i += 1      eval(      "      @p#{i} = Sprite.new(viewport);      @p#{i}.bitmap = RPG::Cache.picture(@draw_name);      @p#{i}.x = self.x+i+220;      @p#{i}.z = self.z;      @p#{i}.y = self.y+(i.to_f/5)-22;      @p#{i}.src_rect.set(i, 0, 1, self.bitmap.height);      @p#{i}.zoom_y = (self.bitmap.width-i).to_f / self.bitmap.width.to_f + 0.2      "      )    end    end   # updateend#--------------------------------------------------------------------------# ● 释放#--------------------------------------------------------------------------def dispose    if self.bitmap != nil      for i in 0..self.bitmap.width      eval(      "      @p#{i}.bitmap.dispose      "      )      end    self.bitmap.dispose    end    superend#--------------------------------------------------------------------------# ● 更新图片#--------------------------------------------------------------------------def update(name)    @draw_name = name    for i in 0..self.bitmap.width      eval(      "      @p#{i}.bitmap = RPG::Cache.picture(@draw_name)      "      )    endendend复制代码
             本帖来自P1论坛作者灵魂の补给,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=203077若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 矩形位图转换梯形