【iOS-Cocos2d游戏开发之二十】精灵的基础知识点总汇(位图操作/贴图更换/重排z轴等)以及利用CCSprite与CCLayerColor制作简单遮盖层!...

为什么80%的码农都做不了架构师?>>>   hot3.png

 李华明Himi 原创,转载务必在明显处注明:
转载自 【黑米GameDev街区】 原文链接:  http://www.himigame.com/iphone-cocos2d/516.html


    最近写了不少Cocos2d的博文了,那么由于Himi介绍的一般都是比较容易出错的问题或者比较受到关注的知识点,所以不少童鞋要求写个基础篇,那么这里Himi就举例最常用的精灵CCSprite来详细的介绍一些吧; 考虑到网上对于Cocos2d-iphone的中文教程已有很多,所以这里Himi会拿出一些教程没有提到的基础知识点来分享;

     首先我们来创建一个精灵: 

CCSprite* sprite =[CCSprite spriteWithFile:@"Icon.png"];//初始化
[self addChild:sprite]; //添加入层中

     代码很简单,传入一张贴图名即可,然后添加层中,那么这里Himi说几点:

 1. 精灵除了这个创建函数外,还有很多方法,最重要的另一个就是利用打包工具打包出来的帧缓存中加载贴图并创建;关于打包工具Himi使用的是TP,还有其他一些这里不介绍了,Himi之前的博文也有对应的介绍;

 2.精灵默认添加进layer中默认是layer的(0,0)点,即屏幕的左下角;而且精灵的贴图绘制是以精灵的贴图中心点进行渲染的,简单说如果精灵贴图大小看成单位一,精灵的锚点(anchor)是(0.5,0.5);这个是精灵默认锚点,当然也可以设置锚点,这个锚点的范围是[0,1];

3.大家如果刚接触一门新语言、引擎、框架等就要慢慢找到它们的规律,比如在cocos2d中一般创建都是类似的创建方式,而初始化的函数基本都是以类名后的一个单词作为开头;比如咱们这个CCSprite类,它的构造函数就是sprite开头的;

    OK,知道如何创建一个精灵了,下面我们来写一点精灵的常用方法和基本位图操作吧:

CCSprite* sprite =[CCSprite spriteWithFile:@"Icon.png"];//初始化[self addChild:sprite]; //添加入层中sprite.scale=2;//放大2倍sprite.rotation=90;//旋转90度sprite.opacity=255;//设置透明度为完全不透明(范围0~255)sprite.position=ccp(100,100);//设置精灵中心点坐标是x=100,y=100[sprite setFlipX:YES];//X轴镜像反转[sprite setFlipY:YES];//Y轴镜像反转[sprite setColor:ccc3(255, 0, 0)];//设置颜色为红色

   关于精灵的动作这些N多文章都写过了,这里我就不写了,没意义,我这里给大家再讲解下童鞋们经常纠结的两个问题:

1.如何重新设置精灵的z轴(覆盖层)?

       对于这个问题,很多童鞋无法找到方法的原因主要是因为大家首先想到的是更改精灵的Z轴值的大小(Z轴值越大离屏幕越近),那么就会错误的使用下面这段代码:

sprite.zOrder=2;

这句话是不允许使用的错误代码,因为精灵的zOrder属性只能可读不可修改;那么Himi提供大家一个解决方法,那就是利用布局去重新设置你想设置的精灵的z轴值,例如以下代码:(111.png是我从博客随便截出来的图,反正比Icon.png大就可以,这样童鞋们就能看得清楚了)

//--z值1的精灵CCSprite* sprite =[CCSprite spriteWithFile:@"Icon.png"];[self addChild:sprite z:1]; //添加入层中sprite.position=ccp(300,200);//设置精灵中心点坐标是x=100,y=100//--z值2的精灵CCSprite* sprite2 =[CCSprite spriteWithFile:@"111.png"];[self addChild:sprite2 z:2]; sprite2.position=ccp(220,120);

从代码中可以很清晰看到第二个精灵sprite2的z轴大于第一个精灵sprite的z轴值,那么sprite2肯定是覆盖sprite上的,运行效果图如下:

                 


下面我们来利用layer对第一个精灵进行z轴重新设定,代码如下:

[self reorderChild:sprite z:10];

self:  CCLayer

sprite:  想要重新设置z轴(覆盖层)的精灵

z: 想要重新设置z轴(覆盖层)的精灵的z轴值

  OK,那么我们重新设置了第一个精灵的z轴值为10,这时候精灵1比精灵2的z轴大了,1会覆盖2精灵,运行效果如下图:

           


2.如何更换已创建的精灵贴图?

    在上面我介绍了精灵的创建一般有两种:一种是利用帧缓存,另一种是直接索引贴图ID进行创建;所以呢更换精灵贴图也一般分为两种方法;

首先介绍第一种直接利用新建贴图进行更换:

 实例代码如下:

//-----没有换贴图前
CCSprite*sprite =[CCSprite spriteWithFile:@"Icon.png"];
sprite.position=ccp(150,150);
[self addChild:sprite];
//-----换贴图后
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.pngCCSpriteFrame* frame2 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"111.png"];[sprite2 setDisplayFrame:frame2];

运行效果如下:




-------------下面来介绍如何来利用CCSprite精灵或者CCLayerColor简单实现一个简单的覆盖层(遮挡)效果

      首先利用CCSprite来实现,代码如下:

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!注意是RGBA!!!!不是ARGB!(因为Himi做过me、Android所以看到设置颜色第一概念就是ARGB。。所以刚接触这里各种郁闷,总是效果不是如自己想的。。。)

               这里补充下:RGBA 颜色的三原色,红色、绿色、蓝色、透明度!

 两种实现方式效果都如下图所示:

                        

 

       希望童鞋们在初学的时候尽可能的遇到问题按照如下顺序去做:首先自己多次尝试->去看源码->百度google->最后请教他人


      OK,就写到这里!下篇见~继续忙了;           



原文链接: http://blog.csdn.net/xiaominghimi/article/details/6955680

转载于:https://my.oschina.net/liux/blog/49821

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学计算机的做近视眼手术,长期的电脑工作者,也可以做近视眼手术矫正视力吗?...

随着信息化时代的来临,电脑成为了人们的生活中不可缺少的一种工具,无论是平时的娱乐还是办公室办公都需要用到电脑。特别是对于长期需要使用电脑办公的人来说更是离不开电脑。那么在长期需要面对电脑的情况下还可以做手术来矫正近视眼吗?会不…

Android之编程中存在性能影响的主要方面

1.循环中; 1)在重要的循环里,消除循环终止判断时的方法调用。 例如:将 for(int i=0; i<collection.size();i++){ ... } 替换为… 尽量减少对变量的重复计算 for(int i=0; n=collection.size();i<n;i++){...} 2) 通常把大循环放在里面,把小循环放在外面 例如:将 for…

中柏平板u盘启动_大冶深圳东莞平板硫化机推选得新科技自动化

大冶深圳东莞平板硫化机推选得新科技自动化东莞市得新科技有限公司, 在国内外的销售机器公司。公司位于广东省东莞市。企业致力于点胶设备&#xff0c;硅胶设备&#xff0c;纺织品涂层的先进技术、检测经验发展国外&#xff0c;全面提升国外产品质量&#xff0c;推动国内行业健…

Console-算法-递归算法示例

ylbtech-Arithmetic:Console-算法-递归算法示例1.A&#xff0c;案例-- -- ylb&#xff1a;算法-- type&#xff1a;递归算法-- thankyou:sunshine, 谢谢你的默默付出-- 10:50 2012-04-06-- 1.B&#xff0c;解决方案1.B.1,阶乘 using System;namespace ConsoleApplication1 {cla…

如何才能避免聚会尬聊

全世界只有3.14 % 的人关注了爆炸吧知识如何丰富空闲时光&#xff1f;如何在短时间内获取最最专业的文化、艺术&#xff1f;小编给大家推荐几个公众号它们有趣有颜有料长按二维码&#xff0c;选择“识别图中二维码”关注印客美学id&#xff1a;inkbetter△长按二维码“识别”关…

Excel快速改变行列的次序

改变行列次序是在Excel中常常需要进行的操作&#xff0c;多数用户的方法是先剪切要调整的行或列&#xff0c;然后选定目标位置&#xff0c;单击菜单“插入”→“剪切单元格”。事实上&#xff0c;使用键盘来配合的话&#xff0c;改变行列的次序可以更快捷。比如&#xff0c;在图…

.NET6 如期⽽⾄

.NET6大家好&#xff0c;经过多个月的迭代&#xff0c;.NET 6正式版如期和大家见面了&#xff01;你安装好了吗&#xff1f;还是等等党&#xff1f;希望看完这篇文章你会对.NET 6有更多了解。自2014年11月12日宣布开源后&#xff0c;.NET就成为了一个跨平台、面向多场景的技术。…

Wordpress 提速之 Gzip 压缩

今天来聊下 wordpress 提速&#xff0c;其实关于这方面的话题网上其实蛮多的&#xff0c;速度对一个网站来说无疑是非常重要的&#xff0c;对于速度的追求也是无止境的&#xff0c;在这方面的表率无疑就是 shawn 了&#xff0c;看他博客的很多技巧都是针对速度来的……不过话说…

html弹性盒子垂直排列,css3弹性盒子布局

css3弹性盒子布局CSS3 弹性盒( Flexible Box 或 flexbox)&#xff0c;是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式。引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间。display:f…

忍“乳”负重,身材好的女孩子究竟有多不容易?我从科学的角度算出来了……...

全世界只有3.14 % 的人关注了爆炸吧知识大家好&#xff0c;满肚子奇怪知识&#xff0c;用科学眼光看世界的小编又来了。先问大家一个问题&#xff1a;你最喜欢看女孩子的哪里&#xff1f;相信不少人&#xff0c;不论男女都想到了一个地方。不论男女&#xff0c;都希望自己能“大…

getchar()到底怎么用_怎样才能真正发挥肥效,腐植酸水溶肥到底怎么用

施肥是农业生产中的重要环节&#xff0c;不管是大田作物还是花草苗木&#xff0c;水肥充足才能健康生长。而施肥不是看用了多少&#xff0c;而是看转化率&#xff0c;有多少真正被植物所吸收利用。许多化肥看着一大袋一大袋的用&#xff0c;结果都浪费了或者造成徒长一点用处都…

Windows API GetVersionEx()判断系统版本详解

转载自:http://bbs.7boo.com.cn/thread-8093-1-1.htmlAF注:TCHAR cstCSDVersion[128];sprintf(cstCSDVersion,"%s",os.szCSDVersion);//spkWindows API 中有两个函数可以得到系统版本信息&#xff1a;GetVersion和GetVersionEx。 GetVersion这个函数曾经困扰了…

Android之Json转换利器Gson之实例一-简单对象转化和带泛型的List转化

看代码可以最快速学习 实体类 public class Student {private int id;private String name;private Date birthDay;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this…

可视化ASP.Net Core Web API健康检查

前言ASP.NET Core提供运行状况检查Middleware和库&#xff0c;以便于报告应用的运行状况。使用方式也很简单。引用Nuget包Microsoft.Extensions.Diagnostics.HealthChecks。然后修改Startup.cs文件:public void ConfigureServices(IServiceCollection services) {...services.A…

利用网站模板创建子网站

1. 打开顶层站点&#xff0c;进入网站内容&#xff0c;最底部&#xff0c;子站点-->新建子网站 2.配置如下&#xff1a; 3. 可能会出现的BUG http://blog.csdn.net/chenxinxian/article/details/12189293 4, 解决方法&#xff1a;安装或卸载用于SharePoint的Reporting Servi…

Firefox 10正式发布

Firefox 10是Firefox的首个长期支持版本&#xff08;Extended Support Release&#xff09;&#xff0c;Firefox 10的支持周期为1年&#xff0c;不会增添新功能&#xff0c;仅会提供安全性更新。经过6个Beta测试&#xff0c;Firefox 10正式版今天终于发布了。 Firefox 10新特性…

计算机PS英语词汇,操作计算机必读(必会)的53个英文单词共享

PC&#xff1a;个人计算机Personal ComputerCPU&#xff1a;中央处理器Central Processing UnitCPU Fan&#xff1a;中央处理器的“散热器”(Fan)MB&#xff1a;主机板MotherBoardRAM&#xff1a;内存Random Access Memory&#xff0c;以PC-代号划分规格&#xff0c;如PC-133&a…

解锁一个新技巧,让你舒服到不想起床

▲ 点击查看每天睡个好觉&#xff0c;真的是一件很爽的事情。怎样才能做到这么爽呢&#xff1f;答案当然是好好挑选我们的床上伴侣——床品四件套啦~在所有的床品中&#xff0c;四件套绝对是刚需&#xff0c;并且至少需要两套以上用来替换。如果有人问你挑选四件套的标准是什么…

面试常见问题_软件实施工程师面试中的常见问题都有哪些呢?

软件实施工程师面试中的常见问题都有哪些呢&#xff1f;首先需要看你自己找什么样的工资&#xff0c;是新手呢还是老手呢&#xff1f;对于软件实施的一些新手来说&#xff0c;那么相对应来说要看重的是人品的一个问题&#xff0c;因为毕竟他们家的是新手&#xff0c;所以对于一…

Android之访问网络,使用HttpURLConnection还是HttpClient?

<span style="font-family: Arial; font-size: 14px; background-color: rgb(255, 255, 255);">大多数的Android应用程序都会使用HTTP协议来发送和接收网络数据,而Android中主要提供了两种方式来进行HTTP操作,HttpURLConnection和HttpClient。这两种方式都支…