最终效果图如:
1.从Git上下载 cocos2d的压缩包,大概100M
2.解压后,进入cocos2d主目录,复制路径到终端
3.执行./install.sh开始安装(实质是拷贝至XCode目录)
安装前XCode,新建项目时界面如下
安装后XCode,新建项目时界面如下
建好的工程目录结构如下
直接运行程序,效果如下:
应用代理
// // AppDelegate.h // 31_cocos2D入门 // // Created by beyond on 14-9-5. // Copyright com.beyond 2014年. All rights reserved. // AppDelegate 继承自 CCAppDelegate /* CCAppDelegate 继承自NSObect,遵守协议:<UIApplicationDelegate, CCDirectorDelegate> CCAppDelegate 拥有成员:UIWindow *window_ * 大多 Cocos2d 应用 应该重写 CCAppDelegate, CCAppDelegate作为应用的程序入口. 至少应该复写 startScene 方法,以便 返回应用要展示的首个场景 如果想更进一步定制 Cocos2d(例如自定义显示的像素模式), 请复写 applicaton:didFinishLaunchingWithOptions: 方法 */ #import "cocos2d.h" @interface AppDelegate : CCAppDelegate @end
// // AppDelegate.m // 31_cocos2D入门 // // Created by beyond on 14-9-5. // Copyright com.beyond 2014年. All rights reserved. // AppDelegate 继承自 CCAppDelegate /* CCAppDelegate 继承自NSObect,遵守协议:<UIApplicationDelegate, CCDirectorDelegate> CCAppDelegate 拥有成员:UIWindow *window_ * 大多 Cocos2d 应用 应该重写 CCAppDelegate, CCAppDelegate作为应用的程序入口. 至少应该复写 startScene 方法,以便 返回应用要展示的首个场景 如果想更进一步定制 Cocos2d(例如自定义显示的像素模式), 请复写 applicaton:didFinishLaunchingWithOptions: 方法 */ #import "AppDelegate.h" #import "IntroScene.h" #import "HelloWorldScene.h" @implementation AppDelegate // -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 当继承自CCAppDelegate,唯一要实现的方法就是这一个方法,应用首次启动就会第一个执行本方法 // 在这儿,可以设置 Cocos2D 各参数的默认值 // There are a number of simple options you can change. // 如果你还嫌调用setupCocos2dWithOptions方法,不够灵活自由,那么你可以自己顶置 Cocos2D [self setupCocos2dWithOptions:@{ // 显示 FPS CCSetupShowDebugStats: @(YES), // 使用降低了的帧率 // CCSetupAnimationInterval: @(1.0/30.0), // 使用一个加快的帧率 // CCSetupFixedUpdateInterval: @(1.0/180.0), // 设置屏幕为竖屏模式 // CCSetupScreenOrientation: CCScreenOrientationPortrait, // 使用16位颜色: // CCSetupPixelFormat: kEAGLColorFormatRGB565, // 使用一个统一的固定的坐标系统 // CCSetupScreenMode: CCScreenModeFixed, // Make iPad's act like they run at a 2x content scale. (iPad retina 4x) // CCSetupTabletScale2X: @(YES), // 更多内容请参阅 CCAppDelegate.h }]; return YES; } -(CCScene *)startScene { // 本方法返回应用启动时,第一个要展示的场景 return [IntroScene scene]; } @end
// // IntroScene.h // 31_cocos2D入门 // // Created by beyond on 14-9-5. // Copyright com.beyond 2014年. All rights reserved. // // Importing cocos2d.h and cocos2d-ui.h, will import anything you need to start using cocos2d-v3 #import "cocos2d.h" #import "cocos2d-ui.h" /** * The intro scene * Note, that scenes should now be based on CCScene, and not CCLayer, as previous versions * Main usage for CCLayer now, is to make colored backgrounds (rectangles) * */ @interface IntroScene : CCScene + (IntroScene *)scene; - (id)init; @end
// // IntroScene.m // 31_cocos2D入门 // // Created by beyond on 14-9-5. // Copyright com.beyond 2014年. All rights reserved. // #import "IntroScene.h" #import "HelloWorldScene.h" @implementation IntroScene #pragma mark - 生命周期 + (IntroScene *)scene { return [[self alloc] init]; } - (id)init { self = [super init]; if (!self) return(nil); // 创建背景颜色为深灰色 CCNodeColor *background = [CCNodeColor nodeWithColor:[CCColor colorWithRed:0.2f green:0.2f blue:0.2f alpha:1.0f]]; [self addChild:background]; // 创建文字标签 CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello Beyond" fontName:@"Chalkduster" fontSize:36.0f]; label.positionType = CCPositionTypeNormalized; label.color = [CCColor redColor]; // 屏幕的正中间 注意这里是笛卡尔坐标系,原点在左下方 label.position = ccp(0.5f, 0.5f); [self addChild:label]; // 创建一个开始按钮,点击后进入下一个场景 CCButton *helloWorldButton = [CCButton buttonWithTitle:@"[ Start ]" fontName:@"Verdana-Bold" fontSize:18.0f]; helloWorldButton.positionType = CCPositionTypeNormalized; // 屏幕的中间靠下方 注意这里是笛卡尔坐标系,原点在左下方 helloWorldButton.position = ccp(0.5f, 0.35f); // 监听点击事件 [helloWorldButton setTarget:self selector:@selector(onSpinningClicked:)]; [self addChild:helloWorldButton]; // 返回创建好的场景对象 return self; } #pragma mark - 按钮点击事件,切换至下一场景 - (void)onSpinningClicked:(id)sender { // 动画切换至下一个场景 [[CCDirector sharedDirector] replaceScene:[HelloWorldScene scene] withTransition:[CCTransition transitionPushWithDirection:CCTransitionDirectionLeft duration:1.0f]]; } @end
// // HelloWorldScene.h // 31_cocos2D入门 // // Created by beyond on 14-9-5. // Copyright com.beyond 2014年. All rights reserved. // // Importing cocos2d.h and cocos2d-ui.h, will import anything you need to start using Cocos2D v3 #import "cocos2d.h" #import "cocos2d-ui.h" /** * 主场景 */ @interface HelloWorldScene : CCScene + (HelloWorldScene *)scene; - (id)init; @end
// // HelloWorldScene.m // 31_cocos2D入门 // // Created by beyond on 14-9-5. // Copyright com.beyond 2014年. All rights reserved. // #import "HelloWorldScene.h" #import "IntroScene.h" @implementation HelloWorldScene { CCSprite *_sprite; } #pragma mark - 生命周期 + (HelloWorldScene *)scene { return [[self alloc] init]; } - (id)init { if (!(self = [super init]) ) return(nil); // 场景模式下 允许交互 self.userInteractionEnabled = YES; // 创建背景颜色为深灰色 CCNodeColor *background = [CCNodeColor nodeWithColor:[CCColor colorWithRed:0.2f green:0.2f blue:0.2f alpha:1.0f]]; [self addChild:background]; // 添加一个精灵,并设置位置居中 _sprite = [CCSprite spriteWithImageNamed:@"ColorCircle.png"]; _sprite.position = ccp(self.contentSize.width/2,self.contentSize.height/2); [self addChild:_sprite]; // 为精灵创建一个旋转动作,并且调用精灵的runAction方法,重复执行动作 CCActionRotateBy* actionSpin = [CCActionRotateBy actionWithDuration:1.5f angle:360]; [_sprite runAction:[CCActionRepeatForever actionWithAction:actionSpin]]; // 右上方,创建一个返回按钮,点击后,返回至上一个场景 CCButton *backButton = [CCButton buttonWithTitle:@"[ Back ]" fontName:@"Verdana-Bold" fontSize:18.0f]; backButton.positionType = CCPositionTypeNormalized; // 屏幕的右上方 注意这里是笛卡尔坐标系,原点在左下方 backButton.position = ccp(0.85f, 0.95f); // 监听点击事件 [backButton setTarget:self selector:@selector(onBackClicked:)]; [self addChild:backButton]; // 返回创建好的场景对象 return self; } - (void)dealloc { // clean up code goes here } #pragma mark - Enter & Exit // ----------------------------------------------------------------------- - (void)onEnter { // 必须总是先调用父类的onEnter方法 [super onEnter]; // In pre-v3, touch enable and scheduleUpdate was called here // In v3, touch is enabled by setting userInteractionEnabled for the individual nodes // Per frame update is automatically enabled, if update is overridden } - (void)onExit { // 必须总是 最后才调用父类的onExit方法 [super onExit]; } #pragma mark - 用户触摸屏幕,精灵跟随手指移动 -(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event { CGPoint touchLoc = [touch locationInNode:self]; // 输出触摸点的坐标 CCLOG(@"Move sprite to @ %@",NSStringFromCGPoint(touchLoc)); // 移动精灵到触摸点处 To表示绝对 By表示相对 CCActionMoveTo *actionMove = [CCActionMoveTo actionWithDuration:1.0f position:touchLoc]; // 调用精灵的runAction方法执行动作 [_sprite runAction:actionMove]; } #pragma mark - 按钮点击事件 - (void)onBackClicked:(id)sender { // 使用转场动画,切换场景至 IntroScene [[CCDirector sharedDirector] replaceScene:[IntroScene scene] withTransition:[CCTransition transitionPushWithDirection:CCTransitionDirectionRight duration:1.0f]]; } @end