가장 좋은 방법은 무엇입니까? 나는 CCEaseSineInOut 액션을 보았지만 그렇게하지는 않았다.Cocos2d - 정현파 모션으로 점 A에서 점 B로 스프라이트 이동
화면의 한쪽에서 다른쪽으로 이동해야합니다. 스프라이트는 스크린을 가로 질러 사인파 패턴으로 움직여야합니다.
가장 좋은 방법은 무엇입니까? 나는 CCEaseSineInOut 액션을 보았지만 그렇게하지는 않았다.Cocos2d - 정현파 모션으로 점 A에서 점 B로 스프라이트 이동
화면의 한쪽에서 다른쪽으로 이동해야합니다. 스프라이트는 스크린을 가로 질러 사인파 패턴으로 움직여야합니다.
나는 항상 CCNode
모션을 완벽하게 제어하고 싶다. 나는 아주 기본적인 것을하기 위해서만 CCAction
을 사용한다. 귀하의 케이스는 CCAction
과 함께 할 정도로 간단하지만 시간이 지남에 따라 어떤 기능에 따라 CCNode
을 이동하는 방법을 알려 드리겠습니다. 동일한 기술을 사용하여 축척, 색상, 불투명도, 회전 및 고정 점까지도 변경할 수 있습니다.
@interface SomeLayer : CCLayer
{
CCNode *nodeToMove;
float t; // time elapsed
}
@end
@implementation SomeLayer
// Assumes nodeToMove has been created somewhere else
-(void)startAction
{
t = 0;
// updateNodeProperties: gets called at the framerate
// The exact time between calls is passed to the selector
[self schedule:@selector(updateNodeProperties:)];
}
-(void)updateNodeProperties:(ccTime)dt
{
t += dt;
// Option 1: Update properties "differentially"
CGPoint velocity = ccp(Vx(t), Vy(t)); // You have to provide Vx(t), and Vy(t)
nodeToMove.position = ccpAdd(nodeToMove.position, ccpMult(velocity, dt));
nodeToMove.rotation = ...
nodeToMove.scale = ...
...
// Option 2: Update properties non-differentially
nodeToMove.position = ccp(x(t), y(t)); // You have to provide x(t) and y(t)
nodeToMove.rotation = ...
nodeToMove.scale = ...
...
// In either case, you may want to stop the action if some condition is met
// i.e.)
if(nodeToMove.position.x > [[CCDirector sharedDirector] winSize].width){
[self unschedule:@selector(updateNodeProperties:)];
// Perhaps you also want to call some other method now
[self callToSomeMethod];
}
}
@end
특정 문제를 들어, x(t) = k * t + c
및 y(t) = A * sin(w * t) + d
과 옵션 2를 사용할 수 있습니다.
수학 노트 # 1 :x(t)
및 y(t)
는 위치 매개 변수화라고합니다. Vx(t)
및 Vy(t)
은 속도 매개 변수입니다.
수학 노트 # 2 : 당신이 수학을 공부 경우 해당 옵션 2 (특히 낮은 프레임 속도를위한) 시간이 지남에 위치 오류의 축적을 방지 쉽게 알 수있을 것이다. 가능한 경우 옵션 2를 사용하십시오. 그러나 정확도가 중요하지 않거나 사용자 입력이 매개 변수화를 적극적으로 변경하는 경우 옵션 1을 사용하는 것이 더 쉽습니다.
CCAction
을 사용하면 많은 이점이 있습니다. 그들은 당신을 위해 특정 시간에 다른 기능을 호출하는 것을 처리합니다. 트랙을 추적하여 쉽게 일시 중지하고 다시 시작하거나 카운트 할 수 있습니다.
하지만 노드를 일반적으로 관리해야 할 때이를 수행 할 수 있습니다. 예를 들어 위치에 대한 복잡하거나 복잡한 수식의 경우 매개 변수화를 구현하는 방법을 알아내는 것보다 훨씬 쉽게 매개 변수화를 변경하는 것이 더 편리합니다 (CCAction
).
베 지어를 사용할 수 있습니다. http://stackoverflow.com/questions/14589474/cocos2d-2-x-understanding-ccbezierconfig-beheaviour –
수동 작업보다 정현파 패턴을 얻고 싶다면 cceasesineinout와. 사인파의 한주기에 대해 cceasesineinout을 세 번 사용해야합니다. – Renaissance