coco2d 第一天

来源:互联网 发布:淘宝新广告法禁用词 编辑:程序博客网 时间:2024/05/17 22:19
1.'Invalid spriteFrameName: icon.png'
在创建sprite时出现这样的错误,代码如下:
CCSprite * sprite = [CCSprite spriteWithSpriteFrameName:@"icon.png"];

具体原因尚未弄清楚。。。

2.cocos2d在加载图片资源的时候必须写“.后缀名”

3.坐标系
GL坐标系
Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系。GL坐标系x轴朝右,y轴朝上。默认原点在左下角。
屏幕坐标系
苹果的Quarze2D使用的是不同的坐标系统,屏幕坐标系原点在屏幕左上角,x轴向右,y轴向下。ios的屏幕触摸事件CCTouch传入的位置信息使用的是该坐标系。因此在cocos2d中对触摸事件做出响应前需要首先把触摸点转化到GL坐标系。
在 调用任何需要设置位置的函数,或从函数获取位置信息前,必须要明确这个函数使用哪个坐标系。比如调用CCNode类的setPosition函数,它使用 的就是GL坐标系。比如在处理触摸事件时CCTouch对象中的坐标就是屏幕坐标系。所以他们之间相互转换就变的比较重要了

GL坐标=====>屏幕坐标
CGPoint touchGL=ccp(x,y);//GL坐标X,Y
CGPoint touchScreen=[[CCDirector sharedDirector] convertToUI: touchScreen];//转换为屏幕坐标
屏幕坐标=====>GL坐标
CGPoint touchScreen=ccp(x,y);//屏幕坐标X,Y
CGPoint touchGl=[[CCDirector sharedDirector] convertToGL: touchScreen];//转换为GL坐标

4.更换已经建立的精灵的图片(代码):
方法一:直接利用新建贴图进行更换
CCSprite*sprite2 =[CCSprite spriteWithFile:@"Icon.png"]; 
sprite2.position=ccp(350,150); 
[self addChild:sprite2]; 
//更换贴图 
CCTexture2D * texture =[[CCTextureCache sharedTextureCache] addImage: @"Default.png"];//新建贴图 
[sprite2 setTexture:texture];

方法二:利用帧替换
//加载帧缓存,这个testpngs.plist保存了Icon和111两张图,-hd表示高清版本iphone4 
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"testpngs-hd.plist"]; 
//-----没有换贴图前  
CCSprite*sprite =[CCSprite spriteWithSpriteFrameName:@"Icon.png"]; 
sprite.position=ccp(150,150); 
[self addChild:sprite]; 
//-----换贴图后 
CCSprite*sprite2 =[CCSprite spriteWithSpriteFrameName:@"Icon.png"]; 
sprite2.position=ccp(350,150); 
[self addChild:sprite2]; 
//更换帧贴图 
//从帧缓存中取出111.png 
CCSpriteFrame* frame2 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"111.png"]; 
[sprite2 setDisplayFrame:frame2];
  
5.覆盖层的实现:两种方法(精灵和CCLayerColor)

方法一:
    CCSprite *sprLeft = [CCSprite spriteWithFile:@"Icon.png"]; 
    sprLeft.position=ccp(100,180); 
    [self addChild:sprLeft]; 
    //----创建一个简单的覆盖层 
    //获取当前屏幕宽高 
    CGSize size =[[CCDirector sharedDirector]winSize]; 
    //创建一个精灵(无贴图) 
    CCSprite*sprite =[CCSprite node]; 
    //设置精灵贴图大小(全屏幕宽高) 
    sprite.textureRect=CGRectMake(0, 0, size.width, size.height); 
    sprite.position=ccp(size.width*0.5,size.height*0.5); 
    sprite.opacity=127;//半透明[0~255] 
    sprite.color=ccc3(0, 0, 0);//设置黑色 
    [self addChild:sprite]; 
    //---- 
    CCSprite* sprRight = [CCSprite spriteWithFile:@"Icon.png"]; 
    sprRight.position=ccp(300,180); 
    [self addChild:sprRight];

方法二:
CCSprite *sprLeft = [CCSprite spriteWithFile:@"Icon.png"]; 
sprLeft.position=ccp(100,180); 
[self addChild:sprLeft]; 
//----创建一个简单的覆盖层 
//创建一个精灵(无贴图) 
CCLayerColor *layer =[CCLayerColor layerWithColor:ccc4(0, 0, 0, 127)]; 
[self addChild:layer]; 
//---- 
CCSprite* sprRight = [CCSprite spriteWithFile:@"Icon.png"]; 
sprRight.position=ccp(300,180); 
[self addChild:sprRight]; 

二者的区别:
        第一种设置了贴图大小,layer不需要!因为layer默认全屏;
                第一种设置了坐标,layer不需要!因为layer默认屏幕中心点;
                第一种设置了透明度和颜色,layer也设置了~在layer创建的时候创建的,在layer创建时传入的四个参数:
                四个参数分别表示RGBA!
原创粉丝点击