일단 시뮬레이터 좌표

http://aescripts.com/decasteljau-bezier-curve/




cocos2d에서 베이지곡선(bezier curves)는 상대곡선으로 움직인다.

이건 예제에 나오는 그로시니 아저씨의 움직임


//마치 앵그리 버드에서 새를 날릴때의 포물선을 그려준다.

static class ActionBezier extends ActionDemo {

public void onEnter() {

super.onEnter();


CGSize s = CCDirector.sharedDirector().winSize();


//

// startPosition can be any coordinate, but since the movement

// is relative to the Bezier curve, make it (0,0)

//


Log.w("s.width", String.valueOf(s.width));//09-03 12:45:06.915: W/s.width(23209): 800.0


// sprite 1

CCBezierConfig bezier = new CCBezierConfig(); //그로시니 p0==(400, 160)

bezier.controlPoint_1 = CGPoint.ccp(0, s.height/2); //p1 //s.height/2 == 480/2 == (0,240)

bezier.controlPoint_2 = CGPoint.ccp(300, -s.height/2); //p2 (300, -240)

bezier.endPosition = CGPoint.ccp(300,100); //p3 300, 100)


CCBezierBy bezierForward = CCBezierBy.action(3, bezier); //3초간 베이지 곡선으로 움직임

CCBezierBy bezierBack = bezierForward.reverse();

CCSequence seq = CCSequence.actions(bezierForward, bezierBack);

CCRepeatForever rep = CCRepeatForever.action(seq); //To가 아니라  By의 개념으로 움직인다. 이걸로 한참 삽질했다 bezier에서 설정한 값은 p0>p1>p2>p3의 방향으로 해당 x,y값만큼 움직임!


// sprite 2

tamara.setPosition(CGPoint.ccp(80,160));

kathia.setPosition(CGPoint.ccp(300, 240));

CCBezierConfig bezier2 = new CCBezierConfig();

bezier2.controlPoint_1 = CGPoint.ccp(100, s.height/2);

bezier2.controlPoint_2 = CGPoint.ccp(200, -s.height/2);

bezier2.endPosition = CGPoint.ccp(240,160);


CCBezierTo bezierTo1 = CCBezierTo.action(2, bezier2);


// sprite 3

kathia.setPosition(CGPoint.ccp(400,160));

CCBezierTo bezierTo2 = CCBezierTo.action(2, bezier2);


grossini.runAction(rep);

tamara.runAction(bezierTo1);

kathia.runAction(bezierTo2);

}

public String title() {

return "BezierBy / BezierTo";

}

}


Posted by 커널제로

본 블로그는 페이스북 댓글을 지원합니다.

,