--[[
直线运动和匀速圆周运动合成的轨迹,我们称之为摆线
过原点startP=(0,0)、半径为r的摆线参数方程为
x=r(a-sina)
y=r(1-cosa)
在这里实参数a是在弧度之下,圆滚动的角度。对每一个给出的a ,圆心的坐标为(ra,r)。
参数说明:
t----轨迹参数方程中的参数
]]
function CycloidTrace(t)
local startP=ccp(200,300)--摆线轨迹起点
local direction=3
local r=50;
local a=2*math.pi*t*direction
local x=r*(a-math.sin(a))
local y=r*(1-math.cos(a))
return ccp(startP.x+x,startP.y+y)
end
--[[
摆线轨迹
参数说明:
t----轨迹参数方程中的参数
startP----轨迹起点坐标
r----圆的半径
deltArg----取值浮点数,相对于轨迹起点的辐角主值增量
direction----拱形的个数
reserved----保留参数
]]
--function CycloidTraceFunc(t,startPx,startPy,r,deltArg,direction)
function CycloidTraceFunc(t,startPx,startPy,r,deltArg,direction,reservedx,reservedy)
local a=2*math.pi*t*direction
local x=r*(a-math.sin(a))
local y=r*(1-math.cos(a))
local startPt=ccp(x,y)
local centerPt=ccp(r*a,r)--圆心坐标
local retPt=GetCirclePos(startPt,centerPt,deltArg)
local startP=ccp(startPx,startPy)--摆线轨迹起点deltArg=0
return ccp(startP.x+retPt.x,startP.y+retPt.y)
end
if(pathType==6)then
--圆中心为(350,300),半径为150,轨迹起点为(500,300)的逆时针圆轨迹
--圆运动轨迹,参数一为动画时长,参数二为表示圆轨迹参数方程的LUA函数名,参数三为轨迹起点坐标,参数四为圆心坐标,参数五为正负圈数
--self:runAction(myAction:createCircle(3.0,"CircleTraceFunc",ccp(500,300),ccp(350,300),1));
--self:runAction(myAction:createMoveCircle(3.0,"MoveCircleTraceFunc",ccp(500,300),ccp(350,300),1,ccp(0,0)));
--self:runAction(myAction:createMoveCircle(3.0,"MoveCircleTraceFunc",ccp(500,300),ccp(350,300),1,ccp(-250,0)));
--local actionBy =myAction:createMoveCircle(3.0,"MoveCircleTraceFunc",ccp(500,300),ccp(350,300),1,ccp(-50,0));
--去掉了createMoveCircle,用createCycloid代替
local actionBy =myAction:createCycloid(3.0,"CycloidTraceFunc",ccp(200,300),ccp(50,0),3,ccp(-50,0));
local ac = CCRepeatForever:create(actionBy);
self:runAction(ac);
end
if(pathType==7)then
--自定义运动轨迹,参数一为动画时长,参数二为表示轨迹参数方程的LUA函数名
--self:runAction(myAction:create(3.0,"EllipseTrace"));
--self:runAction(myAction:create(3.0,"CycloidTrace"));
--local rdeltArg=ccp(50,0)--表示圆的半径是50,辐角主值增量是0
--self:runAction(myAction:createCircle(3.0,"CycloidTraceFunc",ccp(200,300),ccp(50,0),3));
local startP=CCPoint(self:getPositionX(),self:getPositionY());
--对于摆线轨迹,arg1代表半径和辐角主值增量
if(arg1==nil)then
arg1=CCPoint(50,0);
end
self:runAction(myAction:createCircle(3.0,"CycloidTraceFunc",startP,arg1,3));
end