我知道这个主题在这里有一百个帖子,但是我在这个特定的实例上遇到了很多麻烦,无法弄清楚。
基本上,我使用Spritebuilder将sprite / nodes导入到我的游戏中。我在GameScene
类的主体中导入了一些特定类的精灵,但我希望能够在我的精灵类中定义一个变量,然后从GameScene
类编辑它。例如,如果我的精灵在GameScene中收集硬币,我想在精灵类中的update
方法内更改精灵的速度。
以下是我的代码,但不幸的是它不起作用。变量increaseY
和increaseX
似乎在我的GameScene
课程中不可用。我知道这是因为我没有正确地实例化Penguin
类,但是我不知道如何正确地创建这个类的实例,同时导入它的.ccbi文件。问题行被评论并在其旁边有一堆 ** 以便轻松找到它。它在GameScene.m
中。我真的很感激帮助,被困在这几个小时。
Penguin.h
#import "CCSprite.h"
@interface Penguin : CCSprite
{
float xPosition;
float yPosition;
}
@property (nonatomic,assign) float increaseY;
@property (nonatomic,assign) float increaseX;
@end
Penguin.m
#import "Penguin.h"
@implementation Penguin
@synthesize increaseX;
@synthesize increaseY;
- (id)init {
self = [super init];
if (self) {
CCLOG(@"Penguin created");
}
return self;
}
-(void) update:(CCTime)delta
{
self.position = ccp(self.position.x + increaseX,self.position.y + increaseY);
}
@end
GameScene.h
#import "CCNode.h"
@interface GameScene : CCNode
@end
GameScene.m
#import "GameScene.h"
#import "Penguin.h"
@implementation GameScene
{
CCPhysicsNode *_physicsNode;
CCNode *_catapultArm;
CCNode *_levelNode;
CCNode *_contentNode;
}
// is called when CCB file has completed loading
- (void)didLoadFromCCB {
self.userInteractionEnabled = TRUE;
CCScene *level = [CCBReader loadAsScene:@"Levels/Level1"];
[_levelNode addChild:level];
}
// called on every touch in this scene
- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
[self launchPenguin];
}
- (void)launchPenguin {
// loads the Penguin.ccb we have set up in Spritebuilder
CCNode* penguin = [CCBReader load:@"Penguin"];
penguin.position = ccpAdd(_catapultArm.position, ccp(16, 50));
[_physicsNode addChild:penguin];
//THE FOLLOWING LINE DOES NOT WORK********************************
penguin.increaseY = 1;
// Gives Error------Property "increaseX" not found on object of type "CCNode *"
self.position = ccp(0, 0);
CCActionFollow *follow = [CCActionFollow actionWithTarget:penguin worldBoundary:self.boundingBox];
[_contentNode runAction:follow];
}
答案 0 :(得分:0)
您必须更改此行:
CCNode* penguin = [CCBReader load:@"Penguin"];
到这一行:
Penguin* penguin = (Penguin*)[CCBReader load:@"Penguin"];
在使用编译器的旧行中,您发现错误,因为CCNode
类没有名为increaseX
的属性。 increaseX
是Penguin
课程的一部分。如果要访问Penguin
类的属性,则需要使用强制转换并让编译器知道,使用CCBReader
加载的内容实际上是Penguin
实例。