--==============================================================================--
--╭━━╮┏━━╮╭━━╮╭━━╮╭╭╮╮╭━━╮ ╭╭╮╮╭━━╮╭╮╭╮╭━━╮
--┃╭━╯┃╭╮┃┃╭━╯┃╭╮┃┃ ┃┃╭━╯ ┃ ┃┃╭╮┃┃╰╯┃┃╭━╯
--┃╰━╮┃┃┃┃┃┃╭╮┃╰╯┃┃┃┃┃┃╰━╮ ┃┃┃┃┃╰╯┃┃ ╭╯┃╰━╮
--┃╭━╯┃┃┃┃┃┃┃┃┃╭╮┃┃╭╮┃┃╭━╯ ┃╭╮┃┃╭╮┃┃ ╰╮┃╭━╯
--┃╰━╮┃╰╯┃┃╰╯┃┃┃┃┃┃┃┃┃┃╰━╮ ┃┃┃┃┃┃┃┃┃╭╮┃┃╰━╮
--╰━━╯┗━━╯╰━━╯╰╯╰╯╰╯╰╯╰━━╯ ╰╯╰╯╰╯╰╯╰╯╰╯╰━━╯
--
--=============================================================================--
D2D_PAK = class()
--=============================================================================--
-- ■ 构造函数
--=============================================================================--
function D2D_PAK:初始化(pak包文件名)
self.PAK文件名 = pak包文件名
self.临时位置 = {x=0,y=0}
self.中心点 ={x=0,y=0}
self.pak信息 =引擎:取pak信息(pak包文件名)
if(self.pak信息 == nil)then
调试输出("无法获取PAK文件信息!" .. pak包文件名)
引擎:Log("无法获取PAK文件信息!" .. pak包文件名)
return
end
local 首次分割 = 分割文本(self.pak信息, "\n")
self.pak信息组 = {}
for n =1 , table.getn(首次分割) do
local 再一层分割文本组 = 分割文本 (首次分割[n],",")
if (table.getn(再一层分割文本组) == 5) then
self.pak信息组[n]=
{
编号 = tonumber( 再一层分割文本组[1] ),
偏移 = tonumber( 再一层分割文本组[2] ),
图片大小 = tonumber( 再一层分割文本组[3] ),
中心x = tonumber( 再一层分割文本组[4] ),
中心y = tonumber( 再一层分割文本组[5]),
图片 = 0
}
end
end
self.总帧数 = table.getn(self.pak信息组)
self.pak信息组[1].图片 = 引擎:载入图片_PAK (self.PAK文件名,self.pak信息组[1].偏移,self.pak信息组[1].图片大小)
self.碎图片精灵 = D2D_精灵.创建(self.pak信息组[1].图片,0,0,引擎:取图片宽度(self.pak信息组[1].图片),引擎:取图片高度(self.pak信息组[1].图片))
self.临时宽度 = 引擎:取图片宽度 (self.pak信息组[1].图片)
self.临时高度 = 引擎:取图片高度 (self.pak信息组[1].图片)
self.开始帧 = 1
self.结束帧 = 1
self.当前帧 = 1
self.全局计次 = 0
self.时间累积 = 0
self.进度值 = 1
end
--=============================================================================--
-- ■ 更新()
--=============================================================================--
function D2D_PAK:更新(动画帧率,开始帧,结束帧)
self.时间累积 = self.时间累积 + 0.02
if ( 开始帧 == nil) then
self.开始帧 = 1
self.结束帧 = self.总帧数
else
self.开始帧 = 开始帧
self.结束帧 = 结束帧
end
if (self.时间累积 > 动画帧率/100) then
self.全局计次 = self.全局计次 + 1
self.时间累积 = 0
end
if (self.全局计次 > self.结束帧 - self.开始帧) then
self.全局计次 = 0
end
self.当前帧 = self.全局计次 + self.开始帧
if (self.当前帧 <= table.getn(self.pak信息组)) then
if (self.pak信息组[self.当前帧].图片 == 0) then
self.pak信息组[self.当前帧].图片 = 引擎:载入图片_PAK (self.PAK文件名,self.pak信息组[self.当前帧].偏移,self.pak信息组[self.当前帧].图片大小)
end
self.碎图片精灵:置图片(self.pak信息组[self.当前帧].图片 )
self.碎图片精灵:置显示区域(0,0,引擎:取图片宽度(self.pak信息组[self.当前帧].图片),引擎:取图片高度(self.pak信息组[self.当前帧].图片))
end
end
--=============================================================================--
-- ■ 往返更新()
--=============================================================================--
function D2D_PAK:往返更新(动画帧率,开始帧,结束帧)
self.时间累积 = self.时间累积 + 0.02
if ( 开始帧 == nil) then
self.开始帧 = 1
self.结束帧 = self.总帧数
else
self.开始帧 = 开始帧
self.结束帧 = 结束帧
end
if(self.全局计次 == 0)then
self.进度值 = 1
end
if(self.全局计次 + self.开始帧 == self.结束帧)then
self.进度值 = -1
end
if (self.时间累积 > 动画帧率/100) then
self.全局计次 = self.全局计次 + self.进度值
self.时间累积 = 0
end
self.当前帧 = self.全局计次 + self.开始帧
if (self.pak信息组[self.当前帧].图片 == 0) then
self.pak信息组[self.当前帧].图片 = 引擎:载入图片_PAK (self.PAK文件名,self.pak信息组[self.当前帧].偏移,self.pak信息组[self.当前帧].图片大小)
end
self.碎图片精灵:置图片(self.pak信息组[self.当前帧].图片 )
self.碎图片精灵:置显示区域(0,0,引擎:取图片宽度(self.pak信息组[self.当前帧].图片),引擎:取图片高度(self.pak信息组[self.当前帧].图片))
end
--=============================================================================--
-- ■ 显示()
--=============================================================================--
function D2D_PAK:显示(x,y,w,h,旋转)
if (w == nil) then
w = 1
end
if (h == nil) then
h = 1
end
if (旋转 == nil) then
旋转 = 0
end
if (self.当前帧 <= table.getn(self.pak信息组)) then
if (self.当前帧 > 0) then
self.临时位置.x = x + self.pak信息组[self.当前帧].中心x
self.临时位置.y = y + self.pak信息组[self.当前帧].中心y
end
end
self.碎图片精灵:置中心点 (self.中心点.x, self.中心点.y)
self.碎图片精灵:显示_高级(self.临时位置.x,self.临时位置.y,旋转,w,h)
end
--=============================================================================--
-- ■ 置颜色()
--=============================================================================--
function D2D_PAK:置颜色(颜色值)
self.碎图片精灵:置颜色(颜色值)
end
--=============================================================================--
-- ■ 重置()
--=============================================================================--
function D2D_PAK:重置()
self.时间累积 = 0
self.全局计次 = 0
end
--=============================================================================--
-- ■ 取间隔帧()
--=============================================================================--
function D2D_PAK:取间隔帧()
return self.全局计次
end
--=============================================================================--
-- ■ 置混合()
--=============================================================================--
function D2D_PAK:置混合(混合值)
self.碎图片精灵:置混合模式(混合值)
end
--=============================================================================--
-- ■ 置中心点()
--=============================================================================--
function D2D_PAK:置中心点(x,y)
self.中心点.x = x
self.中心点.y = y
end
--=============================================================================--
-- ■ 销毁()
--=============================================================================--
function D2D_PAK:销毁()
for n=1,table.getn(self.pak信息组) do
if (self.pak信息组[n].图片 ~= 0) then
引擎:销毁纹理(self.pak信息组[n].图片)
end
end
self.碎图片精灵:销毁()
end