测试

GameTop

 找回密码
 加入我们
Cmgame Maker-0.9.1
LuaJit + OpenGL,提取码:2m1n
讨论 - 资源 - 下载- 官网
RPG Maker
于初学者使用,采用Ruby作为脚本语言
帮助文档 - 讨论 - 资源 - 下载
     
搜索
查看: 7537|回复: 1

[资源转载] [lua类]曲线模块

[复制链接]

13

主题

29

帖子

342

积分

版主

Rank: 7Rank: 7Rank: 7

积分
342
QQ

大宇怪 Lv:66
发表于 2019-11-18 13:50:07 | 显示全部楼层 |阅读模式
先放效果图:(这就是用曲线模块写出来的)



代码:
[Lua] 纯文本查看 复制代码
--==============================================================================--
--╭━━╮┏━━╮╭━━╮╭━━╮╭╭╮╮╭━━╮ ╭╭╮╮╭━━╮╭╮╭╮╭━━╮
--┃╭━╯┃╭╮┃┃╭━╯┃╭╮┃┃  ┃┃╭━╯ ┃  ┃┃╭╮┃┃╰╯┃┃╭━╯
--┃╰━╮┃┃┃┃┃┃╭╮┃╰╯┃┃┃┃┃┃╰━╮ ┃┃┃┃┃╰╯┃┃ ╭╯┃╰━╮
--┃╭━╯┃┃┃┃┃┃┃┃┃╭╮┃┃╭╮┃┃╭━╯ ┃╭╮┃┃╭╮┃┃ ╰╮┃╭━╯
--┃╰━╮┃╰╯┃┃╰╯┃┃┃┃┃┃┃┃┃┃╰━╮ ┃┃┃┃┃┃┃┃┃╭╮┃┃╰━╮
--╰━━╯┗━━╯╰━━╯╰╯╰╯╰╯╰╯╰━━╯  ╰╯╰╯╰╯╰╯╰╯╰╯╰━━╯
--
-- 作者:hjk5211  创建:2010年5月17日12时43分18秒
--=============================================================================--

曲线  = class()



--=============================================================================--
-- ■ 构造函数
--=============================================================================--
function 曲线:初始化(颜色)
        self.文字  = C_像素文字.创建("宋体",12,false,false,false)
        self.路径点 = {}
        self.曲线点 = {}
        self.总点数 = 0
        self.调试 = false
        self.颜色 = 颜色
end


--=============================================================================--
-- ■ 加入路径点
--=============================================================================--
function 曲线:加入路径(坐标x,坐标y)

        local 临时点 = {x=坐标x,y=坐标y}
        table.insert(self.路径点,临时点)
        

end

--=============================================================================--
-- ■ 转换为曲线点
--=============================================================================--
function 曲线:转换为曲线点()
        
        local inc = 0.002 -- 精度控制
        local x = self.路径点 [1].x
        local y = self.路径点 [1].y
        local t = inc
        local 临时点 = {x=0,y=0}
        local dx = 0
        local dy = 0
        local dist = 0
        
        for n=1,table.getn(self.路径点)-3 do
        
                 t = inc
                 
                while t <=1 do
                
                        临时点 = self:格式化点 ( t, self.路径点 [n], self.路径点 [n + 1], self.路径点 [n + 2], self.路径点 [n + 3])
                        
                         dx = 临时点.x - x
                         dy = 临时点.y - y
                         dist = math.sqrt(dx * dx + dy * dy)
                         
                        if (dist >=1 ) then
                                table.insert(self.曲线点,临时点)
                                x = 临时点.x
                                y = 临时点.y
                        end
                        
                        t = t + inc
                end
        
        end
        
        self.总点数  = table.getn(self.曲线点)
        --调试输出("总数:" .. self.总点数)
        

end





--=============================================================================--
-- ■ 格式化点
--=============================================================================--
function 曲线:格式化点(t,p0,p1,p2,p3)

        local out = {x,y}
        t2 = t * t
        t3 = t2 * t
        out.x = 0.5 * (2 * p1.x + (-p0.x + p2.x) * t + (2 * p0.x - 5 * p1.x + 4 * p2.x - p3.x) * t2 + (-p0.x + 3 * p1.x - 3 * p2.x + p3.x) * t3)
        out.y = 0.5 * (2 * p1.y + (-p0.y + p2.y) * t + (2 * p0.y - 5 * p1.y + 4 * p2.y - p3.y) * t2 + (-p0.y + 3 * p1.y - 3 * p2.y + p3.y) * t3)
        
        return out
end




--=============================================================================--
-- ■ 显示
--=============================================================================--
function 曲线:显示()

        for n=1,table.getn(self.路径点)-1 do
                if self.调试 then
                        C图形.画线 (self.路径点 [n].x, self.路径点 [n].y, self.路径点 [n + 1].x, self.路径点 [n + 1].y, ARGB (150, 255, 255, 255))
                        C图形.画圆(self.路径点 [1].x, self.路径点 [1].y,5,50,self.颜色)
                        self.文字:显示(self.路径点 [1].x, self.路径点 [1].y,string.format("%0.f,%0.f",self.路径点 [1].x, self.路径点 [1].y))
                        C图形.画圆(self.路径点 [#self.路径点].x, self.路径点 [#self.路径点].y,5,50,self.颜色)
                        self.文字:显示(self.路径点 [#self.路径点].x, self.路径点 [#self.路径点].y,string.format("%0.f,%0.f",self.路径点 [#self.路径点].x, self.路径点 [#self.路径点].y))
                        if n > 1 then
                                C图形.画圆(self.路径点 [n].x, self.路径点 [n].y,5,50,self.颜色)
                                self.文字:显示(self.路径点 [n].x, self.路径点 [n].y,string.format("%0.f,%0.f",self.路径点 [n].x, self.路径点 [n].y))
                        end
                        
                end
                
        end


        if (table.getn(self.曲线点) > 1 ) then
                for n = 1 ,table.getn(self.曲线点)-1  do
                        
                        C图形.画线(self.曲线点 [n].x, self.曲线点 [n].y, self.曲线点 [n + 1].x, self.曲线点 [n + 1].y, self.颜色)
                        
                end
        end


end





 

范例:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入我们

x
回复

使用道具 举报

13

主题

29

帖子

342

积分

版主

Rank: 7Rank: 7Rank: 7

积分
342
QQ

大宇怪 Lv:66
 楼主| 发表于 2019-11-18 13:52:57 | 显示全部楼层
感谢hjk5211提供脚本编写
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|手机版|小黑屋|GameTop ( 辽ICP备19018758号 )

GMT+8, 2020-12-2 08:11 , Processed in 0.160542 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表