大家好,我是Jack,平时比较喜欢玩手机游戏,对游戏的开发深深的入迷了,于是在学习Cocos2d 一段时间后,做了几个小Game,把自己对游戏的开发总结出一个系列的教程,希望对有想学习Cocos2d 的朋友们有所帮助。 本人菜鸟,教程简单的给大家入门而用,高手勿喷,欢迎各位交流。
首先,给从Java Android 或者C#转过来的同学简单的介绍下Objective-C的使用语法,作者提炼了初学Objective-C基础实用的知识,如果你想深入了解Objective-C,请参考Objective-C 权威书籍,或者去CocoChina 找合适的书籍教程学习,如果你对Objective-C比较熟悉,请直接看后面的文章。
下面的代码直接了当的解释了如何初始化一个对象
MyObjectType *someName; //声明一个对象 someName = [[MyObjectType alloc] init]; //初始化对象 用alloc 分配内存 //init 方法可以被任何MyObjectType的方法替代,返回对象自己 //或者你可以简洁的这样写 MyObjectType *someName = [[MyObjectType alloc] init];
Objective C 用+ 或者- 号来声明方法,+号代表是静态的static的方法(和java类似),可以被类直接使用,不用实例化对象,- 代表了需要实例化一个对象才能调用,代表是实例方法。
例如:
Objective C 的方法 + - 代表作用域,紧接着第一个括号是指返回参数,然后紧跟第一个方法名 ,接着是参数类型,参数名称,第二个方法名,参数类型,参数名称。第一个方法名和第二个方法名连起来是整体的方法名。
-(typeOfWhatIWillReturn) firstPartOfMethodName:(typeOfFirstParameter)parameterName secondPartOfMethodName:(typeOfSecondParameter)secondParameterName { //code here }
例如:
-(BOOL) returnsTrueAndHasNoParameters { return true; } -(void) doMeaninglessShufflingOfFirstNumber:(int)firstNumber andSecondNumber:(int)secondNumber { int a = firstNumber; int b = a + secondNumber; }
如何调用方法:
//调用一个无参数的方法 [myObject someMethod]; //调用有两个参数的方法名称 [myObject someOtherMethodWithFirstParameter:parameterOne andSecondParameter:parameterTwo]; //调用自身内部的方法 self 类似java 的this BOOL myBoolean = [self returnsTrueAndHasNoParameters]; //随机产生方法 RandomObjectType *myRandomObject = [[RandomObjectType alloc] init]; [myRandomObject doMeaninglessShufflingOfFirstNumber:5 andSecondNumber:6];
Objective-C 中得property是一个极其有用的方法,你可以很简单的为你的成员变量设置get和set方法,类似于Java 的getter和setter
在头文件中,在@interface声明之后,如下代码:
@property ObjectType propertyName;
然后在.m文件中写下如下代码:
@synthesize propertyName;
properties 是如何工作的呢 我们假设有个类叫 MyClass 有一个property名为number
//MyClass.h @property int number;
&
//MyClass.m @synthesize number;
产生一个MyClass 对象
MyClass* myClassInstance = [[MyClass alloc] init];
给number设置一个值,注意使用 . 可以直接访问
myClassInstance.number = 4;
To access a property:
int example = myClassInstance.number; //example 的值为4
Properties 不仅可以使用在int上,各种类型都可以
如下所示
NSLog(@"print this");
打印整型:
int k = 3; NSLog(@"Int k is %i", k);
浮点:
float k = 1.583; NSLog(@"Float k is %f", k);
打印String,注意@ @“world” 说明是一个NSString,如果没有@ 说明是C99 C语言中的String 两者不一样 %@代表对象
NSString* s = @"world"; NSLog(@"Hello %@", s);
- #import "B.h"
- @interface A : NSObject {
- B *b;
- }
- @end
简单说当你需要引入一个头文件 可以用#import 或者 @Class ,区别就在于#import 是把整个文件都引用了,而@Class只是告诉编译器 B是A中得一个声明而已。对于循环依赖关系来说,比方A类引用B类,同时B类也引用A类,使用#import会造成循环依赖,这个时候你就需要使用@class了。@class是放在interface中的,只是在引用一个类,将这个被引用类作为一个类型,在实现文件中,如果需要引用到被引用类的实体变量或者方法时,还需要使用#import方式引入被引用类。
调试
Xcode的调试和其他工具调试没啥区别,多用几次就都会了,如果想了解高级的调试技巧请查看作者的另一篇文章
http://blog.csdn.net/jackrex/article/details/19044625
今天简单的介绍到此结束,期待作者的下一篇 之 如何使用SpriteBuilder 和Cocos2d 开发自己的game。
文章详情请查看作者的另一个博客 http://ignitedaily.com/learn-cocos2d-startwith-objectivec/