所以我最近开始编程,我已经犯了一个很大的错误。我开始制作一个SpriteKit游戏,但我使用的方法不正确(至少我认为我做过)。
在我的项目中有三个不同的“场景”(是场景或视图?有什么区别),一个用于菜单,游戏场景本身和一个选项部分。
而不是首先将它们拆分(比如说:对于每个场景,使用它自己的实现和头文件的不同类文件)我只做了一个大类(MyScene.m / h)并调用切换到的方法其他场景。
E.g。 在Sprite Kit中,touchesBegan方法我有这个代码
if ([node.name isEqualToString:@"startGame"]) {
[self gameScene]
然后它将转到我的gameScene方法:
-(void)gameScene{
//game code
}
它实际上运作得相当好,但由于项目越来越大,我认为它变得越来越混乱。
那么我现在该如何进步?我可以从其他类调用变量,如果是,如何调用?
我希望你或多或少地了解我的问题。 这不是我不知道如何编程我只是不知道如何处理项目文件。 (因为在我读过的书中并没有真正提到自己如何编程......)
答案 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;
这是一个理解的核心概念,希望这有帮助! :)