其实很烂的算法,以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 # update end #-------------------------------------------------------------------------- # ● 释放 #-------------------------------------------------------------------------- def dispose if self.bitmap != nil for i in 0..self.bitmap.width eval( " @p#{i}.bitmap.dispose " ) end self.bitmap.dispose end super end #-------------------------------------------------------------------------- # ● 更新图片 #-------------------------------------------------------------------------- def update(name) @draw_name = name for i in 0..self.bitmap.width eval( " @p#{i}.bitmap = RPG::Cache.picture(@draw_name) " ) end endend复制代码
复制代码 本帖来自P1论坛作者灵魂の补给,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:
https://rpg.blue/forum.php?mod=viewthread&tid=203077 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。