2013-07-07 3 views
0

내 cocos2d 프로젝트에서 CCMoveBy 동작을 사용하여 가장 왼쪽 모퉁이부터 가장 오른쪽 코너로 스프라이트를 이동합니다. 코드는 다음과 같습니다cocos2d에서 스프라이트의 원활한 이동 방법

CCSprite* sprite1 = [CCSprite spriteWithFile:@"Icon.png"]; 
    sprite1.position = ccp(100, 100); 
    [self addChild:sprite1]; 
    [sprite1 runAction:[CCSequence actions: 
[CCMoveBy actionWithDuration:4 position:ccp(300, 0)], 
[CCMoveBy actionWithDuration:2 position:ccp(0, 200)], 
[CCMoveBy actionWithDuration:4 position:ccp(-300, 0)], 
[CCMoveBy actionWithDuration:2 position:ccp(0, -200)], nil]]; 

스프라이트가 부드럽게 움직이지 않고 이동하는 동안 때로는 붙어 있습니다. 누군가적인 Cocos2D 포럼

http://www.cocos2d-iphone.org/forums/topic/ccactions-not-running-smoothly-specifically-ccmoveby-and-ccrotateby/

에서 비슷한 질문을하지만, 내 게임에서 나는 많은 장소에서 액션 시퀀스를 사용하고 그것을 갱신 또는 사용자 정의 셀렉터를 예약하여 모든 움직임의 순서를 코드에 너무 많은 것입니다.

+2

은 60시에 귀하의 FPS 상수입니까, 아니면 스프라이트가 멈 추면 내려갑니다? – sergio

+0

시퀀스 이동은 새로운 이동 작업이 실행되기 전에 한 프레임의 이동을 중지하는 경향이 있습니다. 그 이외의 움직임은 매끄럽게 움직입니다 * 제공 * 귀하의 프레임 속도는 안정적인 60 fps입니다. – LearnCocos2D

+0

새 cocos2d 프로젝트를 만들고 hello world를 실행할 때조차 절대로 안정적이지 않습니다. 무작위로 59.0에서 60.0 사이로 변경됩니다. 나는 정상이라고 생각했습니다. iOS 6.1 에뮬레이터를 사용하고 있습니다. – Saifee

답변

0

난 당신이 코드

MovingSprite.h에 따라이를 달성 할 수 있다고 생각

#import <Foundation/Foundation.h> 
#import "cocos2d.h" 
@interface MovingSprite : CCSprite { 
    float _vx; 
    float _vy; 
} 

-(void) update:(ccTime)dt; 

@property (nonatomic, assign) float vx; 
@property (nonatomic, assign) float vy; 

@end 

MovingSprite.m

#import "MovingSprite.h" 

@implementation MovingSprite 

@synthesize vx = _vx; 
@synthesize vy = _vy; 

-(void)update:(ccTime)dT 
{ 
    self.vy -= (kGravity * dT); //optionally apply gravity 
    self.position = ccp(self.position.x + (self.vx*dT), self.position.y + (self.vy*dT)); 
} 

그리고 추가 [자기 scheduleUpdate] 게임 레이어의 init 메소드에 추가합니다. 그런 다음 모든 이동중인 스프라이트에 대해 update를 호출하는 game 레이어 내에 update 메소드를 추가하십시오.

관련 문제