我如何进步? (我想把我的SpriteKit方法拆分成不同的类)

时间:2014-05-19 17:16:17

标签: class sprite-kit

所以我最近开始编程,我已经犯了一个很大的错误。我开始制作一个SpriteKit游戏,但我使用的方法不正确(至少我认为我做过)。

在我的项目中有三个不同的“场景”(是场景或视图?有什么区别),一个用于菜单,游戏场景本身和一个选项部分。

而不是首先将它们拆分(比如说:对于每个场景,使用它自己的实现和头文件的不同类文件)我只做了一个大类(MyScene.m / h)并调用切换到的方法其他场景。

E.g。 在Sprite Kit中,touchesBegan方法我有这个代码

if ([node.name isEqualToString:@"startGame"]) {

    [self gameScene]

然后它将转到我的gameScene方法:

-(void)gameScene{

//game code

}

它实际上运作得相当好,但由于项目越来越大,我认为它变得越来越混乱。

那么我现在该如何进步?我可以从其他类调用变量,如果是,如何调用?

我希望你或多或少地了解我的问题。 这不是我不知道如何编程我只是不知道如何处理项目文件。 (因为在我读过的书中并没有真正提到自己如何编程......)

1 个答案:

答案 0 :(得分:0)

正如评论中所说,你的问题非常广泛,但是参考“我可以从其他类调用变量,如果是,如何调用?”另外,我认为你所要问的是“实例变量”或“iVars”。

当你创建一个类让我们说Player类时,你当然有接口(.h)文件和实现(.m)文件。

在Player.h文件中,您可以定义属性。然后可以通过“getter”和“setter”方法访问这些属性,这些方法是为您自动创建的(从xCode 4.4开始,我相信)。您还将在实现文件中拥有该属性的iVar。

示例:

<强> Player.h

@interface Player : SKNode

@property int health;
@property NSString *playerName;

@end

Player.m

@implementation Player

- (instancetype)init
{
    self = [super init];
    if (self) {

        _health = 100;
        _playerName = @"foo";

    }
    return self;
}

@end

注意:在ivar前面的前导下划线,我们不必给它一个类型,因为我们已经在头文件中做了这个。

在你的场景中,如果你在新课程的对象上创建,你现在可以访问你定义为属性的信息。当然你需要用#import“Player.h”导入你的新课程

MyScene.m

Player *thePlayer = [[Player alloc]init];
NSString *myPlayerName = thePlayer.playerName;

这是一个理解的核心概念,希望这有帮助! :)