2012-06-26 3 views
0

Я создал код для прокрутки фона в Cocos2d, чтобы создать эффект камеры, но я не могу предотвратить, что камера выходит за пределы моего фона. Мой фон - это изображение 1440 * 1080. Мой код:Как я могу определить края?

+(id) scene 

{ 
    CCScene* scene = [CCScene node]; 
    TileDemo* layer = [TileDemo node]; 
    [scene addChild: layer]; 
    return scene; 
} 

-(id) init 

{ 

    if ((self = [super init])) 

    { 
     self.isTouchEnabled = YES; 
     CCSprite *Nivel1 = [CCSprite spriteWithFile:@"Nivel1.png"]; 
     Nivel1.position = ccp(0.5f, 0.5f); 
     [self addChild:Nivel1 z:0 tag:1]; 
    } 

    return self; 

} 

-(void) dealloc 

{ 
    [super dealloc]; 

} 

-(void) registerWithTouchDispatcher 

{ 

    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; 

} 

-(BOOL) ccTouchBegan:(UITouch*)touch withEvent:(UIEvent*)event 

{ 
    return YES; 
} 

-(void) ccTouchEnded:(UITouch*)touch withEvent:(UIEvent*)event 

{ 

} 

-(void) ccTouchCancelled:(UITouch*)touch withEvent:(UIEvent*)event 

{ 

} 

-(void) ccTouchMoved:(UITouch*)touch withEvent:(UIEvent*)event 

{ 
    CGPoint touchLocation = [touch locationInView: [touch view]]; 
    CGPoint prevLocation = [touch previousLocationInView: [touch view]]; 

    touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation]; 
    prevLocation = [[CCDirector sharedDirector] convertToGL: prevLocation]; 

    CGPoint diff = ccpSub(touchLocation,prevLocation); 

    CCNode* node = [self getChildByTag:1]; 
    CGPoint currentPos = [node position]; 
    [node setPosition: ccpAdd(currentPos, diff)]; 
} 

@end 

ответ

0

вы должны рассчитать максимальную и минимальную posiible положение вашего спрайта и проверить его в методе touchMoved:withEvent:. На мой взгляд, легче вычислить эти значения, когда anchorPoint вашего спрайта находится в (0.f, 0.f) вместо стандартного (0.5f, 0.5f). то ваши позиции будут

CGPoint maxPos = ccp(0.f, 0.f); 
CGPoint minPos = ccp((spriteWidth - screenWidth) * (-1), (spriteHeight - screnHeight) * (-1)); 

затем просто проверьте, находится ли новое положение спрата в допустимом диапазоне до его установки.

Смежные вопросы