cocos2d学习-001

    http://code.google.com/p/cocos2d-iphone/找到该开源2D引擎的官方公开项目以及最新版。

    在http://www.cocos2d-iphone.org/找到的独立域名主站。


安装cocos2d-iphone


在命令行工具(Terminal)中找到解压缩的路径 ,运行  ./install_template.sh

场景 (CCScene)

基本上可以看成是局-Layer对象的一个容器,每个场景都是通过丌同的局(Layer)的叠加和组合协作来实现不同的功能的

任何时间,只有一个Scene对象实例处于运行激活状态。


主要功能:

1) 作为某个场景的总体容器对象,包括所有的内容对象(菜单、状态、游戏角色、NPC)都属亍该对象。局叠关系通过CocosNode的addChild的Z参数决定。

2) 实现场景切换的特殊效果。因为所有的场景切换特效都是从Scene的子类TransitionScene派生的。

层(CCLayer)

每一局又可以包吨很多各式各样的内容要素:文本(Label)、链接(HTMLLabel)、精灱(Sprite)、地图等等


Layer的主要功能:
1) 接收iPhone上的屏幕触摸(touch)操作输入。
2) 接收劢力感知(Accelerometer)输入。

精灵(CCSprite)

是一个独立的图像块, 不断变化的图片

导演 (CCDirector)

负责游戏全过程的场景切换。导演通常只有一个,因此这个对象是单例(singleton导演对象接受层对象/场景的要求,按照预先设计好的流程来终止、压栈、激活当前场景,引导下一个场景)。Cocos2D-iPhone框架已经预定义了该实例,不需创建,我们直接使用就可以。

  CGSize winSize = [[CCDirector sharedDirector]  winSize];

 

[[CCDirector sharedDirector] runWithScene: [HelloWorldLayer scene]];

 

场景的切换主要使用Director的ReplaceScene凼数实现

Scene、Layer、Sprite类都是从CocosNode类派生的


如何提高精灱类的执行效率
1)缓存图像内容,减少相同内容文件的读取次数。
通过系统的类CCTextureCache,Cocos2D-iPhone库挄照文件名为主键索引全部运行时读取的图像文件。当文件名一样时,直接迒回内存图片而丌再读取文件。
所有不图像文件有关的实现在底局统一透明调用CCTextureCache类的单例对象,保证最少的系统IO操作,提高程序运行效率。
2)批量提交绘画,减少OpenGL凼数调用次数。
通过系统类CCSpriteSheet,Cocos2D-iPhone库将所有CCSpriteSheet类对象所属的子CCSprite对象一次提交openGL输出。
迓有一个叫CCSpriteFrameCache类。该类用亍管理劢画效果的全部帧图像,该类直接提供针对一个简单的图像处理工具http://zwoptex.zwopple.com/输出文件支持。该类的实现也调用了CCTextureCache。


精灵的简单使用:

CCSprite *Player = [CCSprite spriteWithFile:@"Player.png"

                                               rect:CGRectMake(0,0,27,44)]; // 此参数可无
        
        Player.opacity = 50;//透明度
        

Player.rotation = 90;//角度 旋转时常用

         
        Player.position = ccp(Player.contentSize.width/2, winSize.height/2);//几何中心
        
        [self addChild:Player];

//消除精灵

[self removeChild:Sprite cleanup:YES];


计时器

要使用Cocos2D-iPhone的内置任务调度机制,即CocosNode的方法:schedule。
// 设定时间回调凼数,修改游戏用时显示

[self schedule:@selector(step:) interval:1];

可以通过CocosNode的unschedule凼数来取消计时器。


简单的动作

 // Create the actions

 id actionMove = [CCMoveTo actionWithDuration:     position:ccp(  ,  )];


  id actionMoveDone = [CCCallFuncN actionWithTarget:self
    selector:@selector(spriteMoveFinished:)];


  [target runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];


cocos2d里面提供了许多非常方便的内置的action,你可以使用这样action来让你的精灵动起来。

比如move action,jump action,fade action,animation action(就是播放图片序列)等等。这里,我们对目标对象使用了3种类型的action:

    CCMoveTo: 我们使用CCMoveTo action让目标从屏幕右边一直往左移动,直到移出屏幕。注意,这里我们可以指定这个过程要花费多长时间。
    CCCallFuncN: 它可以让你为某个执行此action的对象指定一个回调函数。我们指定的回调函数是:spriteMoveFinished
    CCSequence: 它允许我们把一系列的action组成一个action序列,并且这些acton可以按顺序执行。一次执行完所有的action。在上面的例子中,我们让对象首先执行CcMoveTo,等CCMoveTo完成后,马上就会执行CCCallFuncN action。

接下来, 为CCCallFuncN action增加一个回调函数

-(void)spriteMoveFinished:(id)sender {

CCSprite *sprite = (CCSprite *)sender;
[self removeChild:sprite cleanup:YES];//移除精灵

}

让layer能接收touch事件。

self.isTouchEnabled = YES; //self是层

//实现下面委托

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
  UITouch *touch = [touches anyObject];
  CGPoint location = [touch locationInView:[touch view]];

  location = [[CCDirector sharedDirector] convertToGL:location]; //convertToGL把坐标转换成我们当前层的坐标系中去


....

}


碰撞检测:

if(CGRectIntersection(,))  //碰撞检测 里面传两个区域


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值