当前位置: 首页 > 知识库问答 >
问题:

在导入变量时从另一个类访问变量。ccbi文件

闽念
2023-03-14

我知道这个话题在这里的100篇帖子中都有涉及,但我在这个特定的例子中遇到了很多麻烦,无法理解。

基本上,我正在使用Spritebuilder将精灵/节点导入我的游戏。我在GameScene类的正文中导入了某个特定类的精灵,但我希望能够在我的精灵类中定义一个变量,然后从GameScene类中编辑它。例如,如果我的精灵在GameScene中收集了一枚硬币,我想在精灵类中的update方法中更改我的精灵的速度。

下面是我的代码,但不幸的是它不起作用。变量递增Y递增X在我的GameScene类中似乎不可用。我知道这是因为我没有正确实例化Penguin类,但我不知道如何正确创建该类的实例,同时导入它的. ccbi文件。问题行被注释,旁边有一堆**可以轻松找到它。它在GameScene. m中。我真的很感谢帮助,已经在这个问题上卡住了几个小时。

企鹅

#import "CCSprite.h"

@interface Penguin : CCSprite

{
    float xPosition;
    float yPosition;
}

@property (nonatomic,assign) float increaseY;
@property (nonatomic,assign) float increaseX;


@end

企鹅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

游戏场景

#import "CCNode.h"

@interface GameScene : CCNode

@end

游戏场景。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];
}

共有1个答案

郑波
2023-03-14

你必须改变这一行:

CCNode* penguin = [CCBReader load:@"Penguin"];

关于这一行:

Penguin* penguin = (Penguin*)[CCBReader load:@"Penguin"];

在您使用的前一行中,编译器给了您一个错误,因为CCNode类没有名为increaseX的属性increaseXPenguin类的一部分。如果你想访问Penguin类的属性,你需要使用cast并让编译器知道,你使用CCBReader加载的实际上是Penguin实例。

 类似资料:
  • 问题内容: 如何将变量从一个文件导入到另一个文件? 示例:具有变量以及如何将其传递给? 如何将 所有 变量从一个导入到另一个? 问题答案: 将导入file1中的所有对象和方法

  • 如何将变量从一个文件导入到另一个文件? 示例:具有变量和如何将它们传递到? 如何将所有变量从一个导入到另一个?

  • 我是java新手,我不知道如何从另一个类访问变量 我正在尝试编写一个代码来发送带有未存储在本地的附件的邮件。我想访问SendMail类中ExcelFile类中编写的变量 如何在另一个类中访问excelFileAsByte并发送邮件而不将其存储在本地。我可以使用addBodyPart和ByteArrayResource将文件添加为附件吗。

  • 问题内容: 好的… 我已经搜索并寻找了可以直接回答我的问题的答案,但是没有成功。我的问题很简单,老实说,我想在那里会有一个更直接的答案。请记住,我还是该语言的新手,并且仍在学习中。 _因此,我将使用和作为我的两个文件,以及作为示例变量。_变量包含在中。如何将变量导入, 然后通过更改为另一个值, 然后 使用新值更新变量? 我不确定这是否可能,但我想一定会这样。我正在使用python 2.7.11,谢