Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C cocos2d将方法分离到新类中?_Objective C_Cocos2d Iphone - Fatal编程技术网

Objective-C cocos2d将方法分离到新类中?

Objective-C cocos2d将方法分离到新类中?,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,好吧,当我刚开始学习的时候,我只有一节游戏课。我不停地修改代码并添加一些东西,现在它变得很可笑。我是objective-c的新手,不太了解它的结构,但我确实了解良好的编程实践,并希望将类划分为更小更具体的类。不过,我似乎找不到一个解释来解释如何做到这一点。任何帮助都将不胜感激。我现在不知道它是否改变了什么,但我正在使用cocos2d,现在一切都在gmaescene.m和.h中你的CCScene子类和CCLayer子类非常大是很正常的(就像在数百行实现代码中),因为这些是大多数游戏机制的地方,比如

好吧,当我刚开始学习的时候,我只有一节游戏课。我不停地修改代码并添加一些东西,现在它变得很可笑。我是objective-c的新手,不太了解它的结构,但我确实了解良好的编程实践,并希望将类划分为更小更具体的类。不过,我似乎找不到一个解释来解释如何做到这一点。任何帮助都将不胜感激。我现在不知道它是否改变了什么,但我正在使用cocos2d,现在一切都在gmaescene.m和.h中

你的CCScene子类和CCLayer子类非常大是很正常的(就像在数百行实现代码中),因为这些是大多数游戏机制的地方,比如精灵动画,触摸事件处理,实现了博弈逻辑等。也就是说,下面是我用来将代码分解成更小类的一些技术:

将与特定游戏对象相关的代码重构到对象类中

假设您的游戏包含一个英雄化身和一些在屏幕上相互交互移动的敌人化身。通常,每个化身都有属于它的特定动作模式和逻辑。例如,根据玩家在屏幕上触摸的位置,英雄可能向左或向右行走。因此,最好将移动英雄位置并设置腿部动画的逻辑放在英雄类中,例如:

@interface Hero : CCSprite {
   EnumDirection currentDirection;
}

- (void)walkTowardsPoint:(CGPoint)touchPoint;

@end
对敌人也一样。然后,在CCLayer/CCScene类中,您只需执行以下操作:

- (void)ccTouchBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint location = [self convertTouchToNodeSpace:touch];        
    [hero walkTowardsPoint:location]; 
}
创建一个泛化大类的基超类

通常情况下,你会有一些几乎相同但在行为、力量、AI等方面略有变化的敌人。与其在完全不同的类中实现这些敌人,不如创建一个基类“敌人”,封装敌人类之间的公共逻辑和代码,从这个超类派生出这些敌人类。例如:

@interface Enemy : CCSprite {
   EnumEnemyState state;
   CGFloat hitpoint;
}

- (void)spawnAt:(CGPoint)spawnLocation;
- (void)observeHeroLocation:(CGPoint)location;
- (BOOL)slashedByHeroWithDamage:(CGFloat)damage;

@end

@interface Goomba : Enemy {
   EnumGoombaColor color;
}
@end

@interface Koopa : Enemy {
}    
- (void)shootHammerAt:(EnumDirection)direction;
@end
这样,您就不必在所有类中重复执行生成、对英雄的新位置做出反应、被英雄砍下时降低HP等操作,因为您的敌人的子类将继承超类方法,正如OOP继承一样

还有更多

代码重构是一门艺术。在如何设计代码结构方面,您必须具有创造性。除了我在上面解释的两种技术之外,您可能还希望在过程的早期预测您可能希望如何创建游戏升级,并塑造您的对象类,以便在以后的升级中减少麻烦。或者你甚至可以创建自己的自定义游戏框架,涵盖游戏的一般方面(我希望你不会在只创建一个游戏后就停止,对吗?),例如音频、物理、规则等。概括我在本段第一句中已经写过的内容,编程是一门艺术。想象你的IDE(Xcode)是一块空白画布,Objective-C是画笔,Cocos2d是调色板,你会像玩最终产品一样喜欢创建游戏:)

祝你好运