Как добавить прокрутку к слою в cocos2d? - PullRequest
0 голосов
/ 14 апреля 2010

В моей игре есть текст, написанный на cocos2d. Текст перемещается вверх и вниз, пока мы касаемся и перемещаем его вверх или вниз. Текст движется. Но он не доходит до исходной позиции, пока прикосновения закончились. Итак, я написал Cade для штрихов, закончившихся для текста, чтобы получить исходную позицию. Но проблема в том, что я не мог прочитать весь текст сейчас. Мне нужен эффект прокрутки. Как я могу сделать это в cocos2d?

-(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:kTagNode];
    CGPoint currentPos = [node position];
    [node setPosition: ccpAdd(currentPos, diff)];   
}

-(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGSize windowSize = [[CCDirector sharedDirector] winSize];
    CCNode *node = [self getChildByTag:kTagNode];
    [node setPosition: ccp(text1.contentSize.width/2,text1.contentSize.height/2 - windowSize.height)];
}


-(id) init
{
    if((self = [super init]))
    {
        CGSize windowSize = [[CCDirector sharedDirector] winSize];
        self.isTouchEnabled = YES;
        NSString *dataPath = @"/Users/sridhar/Srikanth/DrawGameSrikanth/ResourcestextData.txt";
        NSString *dataString = [[NSString alloc] initWithContentsOfFile:dataPath];
       CCLabel *text1 = [CCLabel labelWithString: dataString dimensions: CGSizeMake(300, 600)   alignment: UITextAlignmentLeft fontName:@"American Typewriter"  fontSize:24];
        text1.position = ccp(text1.contentSize.width/2 ,text1.contentSize.height/2 - windowSize.height); 
        text1.color = ccc3(0, 0, 0);
        CCNode *node = text1;
        CCParallaxNode *voidNode = [CCParallaxNode node];
        [voidNode addChild:node z:2 parallaxRatio:ccp(0.0f,1.0f) positionOffset:ccp(text1.contentSize.width/2,text1.contentSize.height/2 - windowSize.height)];         
        [self addChild: voidNode z:2 tag:kTagNode];
    }
    return self;
}

1 Ответ

1 голос
/ 11 мая 2010

Это создает textView на слое cocos2d, и данные будут прокручиваться только сверху и снизу. Но есть проблема с этим.

Я не могу использовать пользовательские шрифты для текста в textView, такие как "Copperplate Gothic Bold" Я могу использовать только системные шрифты. Но код выше мы можем использовать любой шрифт.

-(id)init
{
if( (self = [super init]) )
{
    self.isTouchEnabled  = YES;
    CGSize windowSize = [[CCDirector sharedDirector] winSize];

    description = [[UITextView alloc] initWithFrame:CGRectMake(50,150,200 ,200)];
    description.backgroundColor = [UIColor clearColor];
    description.text = enemyDescription;  //enemyDescription is a string from plist in my code
    [description setEditable:NO]; 
    description.font = [UIFont fontWithName:@"Arial Unicode MS" size:14.0f];

    description.showsHorizontalScrollIndicator = NO;

    description.alwaysBounceVertical = YES;

    description.transform = CGAffineTransformMakeRotation(CC_DEGREES_TO_RADIANS( 90.0f ));

    [[[CCDirector sharedDirector]openGLView]addSubview:description]; 
    [description release];
}  

Чтобы удалить его снова, мы должны использовать следующий код

NSArray *subviews = [[[CCDirector sharedDirector]openGLView] subviews];
for (id sv in subviews)
{
    [((UIView *)sv) removeFromSuperview];
    [sv release];
}  

Надеюсь, это поможет вам. Любые предложения пишите.

...