CatmullRomBy类 :这是一个按照笛卡尔曲线移动目标点的动作.
**
**
– ActionCatmullRom
– 笛卡尔曲线运动
local function ActionCatmullRom()
local layer = cc.Layer:create()
initWithLayer(layer)
centerSprites(2)
– 设置精灵位置
tamara:setPosition(cc.p(50, 50))
– 定义位置数组
local array = {
cc.p(0, 0),
cc.p(80, 80),
cc.p(size.width - 80, 80),
cc.p(size.width - 80, size.height - 80),
cc.p(80, size.height - 80),
cc.p(80, 80),
cc.p(size.width / 2, size.height / 2),
}
– 创建笛卡尔曲线运动,第一个参数为持续时间,第二个参数为位置数组
local action = cc.CatmullRomBy:create(3, array)
local reverse = action:reverse()-- 相反操作
– 创建动作序列
local seq = cc.Sequence:create(action, reverse)
tamara:runAction(seq)
local array2 = {
cc.p(size.width / 2, 30),
cc.p(size.width -80, 30),
cc.p(size.width - 80, size.height - 80),
cc.p(size.width / 2, size.height - 80),
cc.p(size.width / 2, 30),
}
local action2 = cc.CatmullRomTo:create(3, array2)
local reverse2 = action2:reverse()
local seq2 = cc.Sequence:create(action2, reverse2)
kathia:runAction(seq2)
–[[
local function drawCatmullRom()
kmGLPushMatrix()
kmGLTranslatef(50, 50, 0)
cc.DrawPrimitives.drawCatmullRom(array, 50)
kmGLPopMatrix()
cc.DrawPrimitives.drawCatmullRom(array2,50)
end
array:retain()
array2:retain()
local glNode = gl.glNodeCreate()
glNode:setContentSize(cc.size(size.width, size.height))
glNode:setAnchorPoint(cc.p(0.5, 0.5))
glNode:registerScriptDrawHandler(drawCatmullRom)
layer:addChild(glNode,-10)
glNode:setPosition( size.width / 2, size.height / 2)
]]–
– 设置标题
Helper.titleLabel:setString(“CatmullRomBy / CatmullRomTo”)
Helper.subtitleLabel:setString(“Catmull Rom spline paths. Testing reverse too”)
return layer
end
BezierBy类:贝塞尔曲线动作。提供reverse方法,用于执行相反操作
BezierTo类:贝塞尔曲线动作。
******
– ActionBezier
– 贝塞尔曲线运动
local function ActionBezier()
local layer = cc.Layer:create()
initWithLayer(layer)
centerSprites(3)
– sprite 1
–[[
local bezier = ccBezierConfig()
bezier.controlPoint_1 = cc.p(0, size.height / 2)
bezier.controlPoint_2 = cc.p(300, - size.height / 2)
bezier.endPosition = cc.p(300, 100)
]]–
– 贝塞尔曲线配置结构
local bezier = {
cc.p(0, size.height / 2),
cc.p(300, - size.height / 2),
cc.p(300, 100),
}
– 以持续时间和贝塞尔曲线的配置结构体为参数创建动作
local bezierForward = cc.BezierBy:create(3, bezier)
local bezierBack = bezierForward:reverse()
– 无限循环执行序列
local rep = cc.RepeatForever:create(cc.Sequence:create(bezierForward, bezierBack))
– sprite 2
tamara:setPosition(cc.p(80,160))
–[[
local bezier2 = ccBezierConfig()
bezier2.controlPoint_1 = cc.p(100, size.height / 2)
bezier2.controlPoint_2 = cc.p(200, - size.height / 2)
bezier2.endPosition = cc.p(240, 160)
]]–
local bezier2 ={
cc.p(100, size.height / 2),
cc.p(200, - size.height / 2),
cc.p(240, 160)
}
– 创建贝塞尔曲线动作,第一个参数为持续时间,第二个参数为贝塞尔曲线结构
local bezierTo1 = cc.BezierTo:create(2, bezier2)
– sprite 3
kathia:setPosition(cc.p(400,160))
local bezierTo2 = cc.BezierTo:create(2, bezier2)
– 运行动作
grossini:runAction(rep)
tamara:runAction(bezierTo1)
kathia:runAction(bezierTo2)
Helper.subtitleLabel:setString(“BezierTo / BezierBy”)
return layer
end