2010-01-07 4 views
5

다음과 같이 내가 스프라이트 객체의 발목을 구현 한 ..는 부드럽게적인 Cocos2D에서 스프라이트 드래그 - 아이폰

-(BOOL)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

UITouch * touch = [touches anyObject]; 
CGPoint location = [[Director sharedDirector] convertCoordinate: [touch locationInView:touch.view]];  
[diskSprite setPosition:ccp(location.x , location.y)]; 
return kEventHandled; 
} 

을하지만 난 내 엄지 손가락으로 빠르게 드래그 할 때 드래그은 ..... 원활하지 않습니다 객체가 패스로부터 떠났다.

감사합니다.

답변

0

"경로에서 남은 객체"가 무슨 뜻인지 잘 모르겠습니다. 당신이 원한다면, 손가락으로 화면을 원호 나 원으로 끌면, 손가락을 정확히 따라 가지 않고 스프라이트가 점대 점으로 "점프"합니다. 이 올바른지?

스프라이트가 정확한 경로를 따르도록하려면 경로를 만든 다음 그 경로를 따라 스프라이트를 설정해야합니다. 이제는 스프라이트의 위치를 ​​터치 위치로 설정하면되지만 드래그 된 터치는 터치하는 모든 픽셀에 대해 이벤트를 생성하지 않습니다.
받은 터치에 대한 경로를 만드는 것이 매우 쉽고 코드 샘플은 여기 저기에서 찾을 수 있습니다. 그러나 스프라이트의 속도 (프레임 당 픽셀 수)가 너무 높으면 부드러운 경로를 사용하더라도 항상 "점프"됩니다.

예 :
원형 경로를 통해 스프라이트에 애니메이션을 적용 할 수 있습니다. 이 애니메이션을 적용하여 1 초 안에 경로를 완료하면 부드러운 애니메이션이 보일 것입니다. 그러나 4 프레임의 완전한 원과 같이 고속으로 실행되는 경우 스프라이트는 부드러운 원이 아닌 4 곳에서 보입니다. '수정'을 원한다면 블렌딩을 들여다 보거나 최대 허용 속도가 허용되는 모션을 결정해야하며 너무 빠르면 스프라이트 속도를 늦춰야합니다.

나는 그 질문에 대한 답변이 되었기를 바랍니다. 명확하지 않은 경우 언제든지 질문을 수정하거나 내 답변에 댓글을 추가하십시오.

+1

답장을 보내 주셔서 감사합니다. 내 프로그램은 매우 간단합니다 .... 나는 정사각형 물체처럼 화면에 스프라이트를 가지고 있습니다. 손가락으로 화면을 드래그 할 때 손가락으로 따라야 만합니다. (제 코드에는 맞지만 정확하지는 않습니다) 손가락으로 화면을 빠르게 드래그하면 손가락을 따라 가지 않습니다. 당신은 샘플 프로젝트에서 위의 코드를 사용할 수 있고 어떤 일이 일어날지를 볼 수 있습니다 ..... 답장을 다시 한번 감사드립니다 ..... 감사합니다 ..... –

1

내 게임에서 이와 동일한 문제가있었습니다. 드래그 작업이 갑자기 나타납니다. 그 이유는 터치 이벤트가 매끄러운 모습을 내기에 충분히 빨리 생성되지 않는다고 생각합니다.

문제를 해결하기 위해 위치를 즉시 설정하는 대신 원하는 위치를 향한 동작을 실행하여 모션을 부드럽게했습니다.

10

아마 조금 늦었지만 비슷한 것을 찾고있었습니다.

-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event { 
    if (_binCaptured) { 
     CGPoint location = [self convertTouchToNodeSpace:touch]; 

     [_sprite stopAllActions]; 

     id move = [CCEaseIn actionWithAction:[CCMoveTo actionWithDuration:0.1 position:ccp(location.x, _sprite.position.y)]]; 
     [_sprite runAction:move]; 
    } 
} 

을 그리고 정말 원활하게 작동 : 나는 당신이이 경우에 시도하는 것이 좋습니다 무엇을 여기 http://www.raywenderlich.com/2343/how-to-drag-and-drop-sprites-with-cocos2d

- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event {  
    CGPoint touchLocation = [self convertTouchToNodeSpace:touch]; 

    CGPoint oldTouchLocation = [touch previousLocationInView:touch.view]; 
    oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation]; 
    oldTouchLocation = [self convertToNodeSpace:oldTouchLocation]; 

    CGPoint translation = ccpSub(touchLocation, oldTouchLocation);  
    CGPoint newPos = ccpAdd(mySpriteToMove.position, translation); 
    mySpriteToMove.position = newPos; 
} 
+0

내 시간을 절약했습니다 :) Upvote 만세! –

+0

CocosSharp (Cocos2d-XNA 포트)에 대해 말하면, CCMoveTo 접근법은 나에게 효과가 없었으며 매우 느 렸습니다.그러나 귀하의 방법은 – OzB

0

보기 : 나는 모든 것을 설명이 위대한 튜토리얼을 발견했다.

나는이 쉬운 방법을 즐겼다.

관련 문제