我正在尝试子类化CCSprite但由于某种原因我似乎无法在屏幕上绘制任何内容。我不是cocos2d的专家,所以我愿意接受任何建议。这是我的代码。我有一个这样的场景:
#import "cocos2d.h"
@class Animation;
@interface HelloWorldLayer : CCLayer
{
}
+(CCScene *) scene;
@end
#import "HelloWorldLayer.h"
#import "Animation.h"
@implementation HelloWorldLayer
+(CCScene *) scene
{
CCScene *scene = [CCScene node];
HelloWorldLayer *layer = [HelloWorldLayer node];
[scene addChild: layer];
return scene;
}
-(id) init
{
if( (self=[super init])) {
CCLOG(@"super init");
HelloWorldLayer *animation;
animation = [Animation animation:self];
}
return self;
}
- (void) dealloc
{
[super dealloc];
}
@end
然后我像这样继承CCSprite:
#import <Foundation/Foundation.h>
#import "cocos2d.h"
@class HelloWorldLayer;
@interface Animation : CCSprite {
HelloWorldLayer *ivHelloWorld;
}
+ (id) animation:(HelloWorldLayer*) helloWorld;
- (id) initAnimation: (HelloWorldLayer*) helloWorld;
@end
#import "Animation.h"
#import "HelloWorldLayer.h"
@implementation Animation
+ (id) animation:(HelloWorldLayer *) helloWorld{
CCLOG(@"animation method");
return [[[self alloc] initAnimation:helloWorld] autorelease];
}
- (id) initAnimation:(HelloWorldLayer *)helloworld {
CCLOG(@"InitaAnimation method");
// cache
CCSpriteFrameCache *cache=[CCSpriteFrameCache sharedSpriteFrameCache];
[cache addSpriteFramesWithFile:@"FootballAtlas.plist"];
// frame array
NSMutableArray *framesArray=[NSMutableArray array];
for (int i=1; i<60; i++) {
NSString *frameName=[NSString stringWithFormat:@"Football%d.png", i];
id frameObject=[cache spriteFrameByName:frameName];
[framesArray addObject:frameObject];
}
CCLOG(@" array count = %i", [framesArray count]);
// animation object
id animObject=[CCAnimation animationWithFrames:framesArray delay:0.01];
// animation action
id animAction=[CCAnimate actionWithAnimation:animObject restoreOriginalFrame:NO];
CCRepeatForever *repeat = [CCRepeatForever actionWithAction:animAction];
id animAction2=[CCAnimate actionWithAnimation:animObject restoreOriginalFrame:NO];
animAction2=[CCRepeatForever actionWithAction:animAction2];
// sprite
CCSprite *bird=[CCSprite spriteWithSpriteFrameName:@"Football0.png"];
bird.position=ccp(60,160);
CCSprite *bird2=[CCSprite spriteWithSpriteFrameName:@"Football0.png"];
bird2.position=ccp(80,160);
// batchNode
CCSpriteBatchNode *batchNode=[CCSpriteBatchNode batchNodeWithFile:@"FootballAtlas.png"];
[self addChild:batchNode];
[batchNode addChild:bird];
[batchNode addChild:bird2];
[bird runAction:repeat];
[bird2 runAction:animAction2];
return self;
}
@end
这不会在屏幕上绘制任何内容,但如果我将动画代码移动到CClayer,那么一切都显示正常。我做错了什么?
答案 0 :(得分:1)
你忘了初始化你的动画精灵:
- (id) initAnimation:(HelloWorldLayer *)helloworld {
if ((self = [super init]))
{
// PUT YOUR CODE HERE
}
return self;
}
请注意您的HelloWorldLayer,因为您没有将动画添加为子项(并且未正确键入变量)。如果你想看到场景中的某些内容,请更改它。 :)
答案 1 :(得分:0)
我想通了,谢谢。我正在初始化一个HelloWorldLayer对象,我需要一个动画对象。