Изменить спрайт с помощью кнопок - Cocos2d - PullRequest
0 голосов
/ 04 мая 2011

У меня есть 2 кнопки (левая и правая) и спрайт-лист, который содержит все 55 изображений. Мне было интересно, как лучше пройти каждый спрайт с помощью кнопок?

например. Нажмите левую кнопку и первый спрайт будет добавлен. Нажмите правую кнопку, первый спрайт будет удален, а второй добавлен. Так далее и так далее, пока оно не достигнет последнего изображения.

Это Лист Спрайта

#import "cocos2d.h"


@interface GameScene : CCLayer {

CCSpriteBatchNode *pspriteSheet

}

+(CCScene *) scene;

@property (nonatomic, retain) CCSprite *p;

@end
----------------------------------------------------
#import "GameScene.h"


@implementation GameScene

@synthesize p = _p;


+(CCScene *) scene
{
    CCScene *scene = [CCScene node];
    GameScene *layer = [GameScene node];

    [scene addChild: layer];
    return scene;
}

-(id) init
{
    if ((self = [super init]))
    {
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:
         @"PAnim.plist"];

        pspriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"PAnim.pvr.ccz"];

        [self addChild:pspriteSheet z:0];
}
    return self;
}

- (void) dealloc
{
    CCLOG(@"%@: %@", NSStringFromSelector(_cmd), self);

    _p = nil;

    [CCSpriteFrameCache purgeSharedSpriteFrameCache];
    [CCTextureCache purgeSharedTextureCache];

    [super dealloc];
}

Стоит ли просто добавлять и удалять их?

Е.Г.

-(void)buttons:(CGPoint)touchLocation
{
    if (CGRectContainsPoint(leftB.boundingBox, touchLocation) && tapP == YES && paused == NO) {
        if (count == 1)
        {
            _p = [CCSprite spriteWithSpriteFrameName:@"p1.png"];
            [pspriteSheet addChild:_p];
            count = 2;
            _p.position = ccp(240, 215);
        }
if (CGRectContainsPoint(rightB.boundingBox, touchLocation) && tapP == YES && paused == NO) {
        if (count == 2)
        {
            [pspriteSheet removeChild:_p cleanup:YES];

            _p = [CCSprite spriteWithSpriteFrameName:@"p2.png"];
            _p.position = ccp(240, 215);
            [pspriteSheet addChild:_p];

            count = 3;
        }
}

Вот где метод "кнопок" называется

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

    [self buttons:touchLocation];

    return TRUE;
}

1 Ответ

0 голосов
/ 04 мая 2011

Поскольку он использует spriteframe, вы можете использовать setDisplay frame:

CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@"spr1.png"];
[mySprite setDisplayFrame:frame];

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...