【IOS-COCOS2D游戏开发之十七】灵活使用精灵可视区域(TEXTURERECT)与锚点(ANCHORPOINT),并结合可视区域与锚点制作进度条!

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 

转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2d/501.html

今天Himi单用一篇博文来给童鞋们介绍精灵相关的两个常用的细节知识点;

首先来介绍第一个知识点:精灵可视区域;

不管在哪个移动平台上进行开发游戏都会接触使用到可视区域,比如Kjava(J2me)平台的setClip方法,Android的clipRect方法等等,那么在iOS上也一样存在,这里我们介绍cocos2d引擎中的可视区域得函数是setTextureRect;

可能没有接触过游戏得童鞋不明白其概念,那么Himi就简单概述下:

所谓可视区域就是在一个完整的表面上对其设置一定大小的区域,让其只显示设置的区域的面,其他部分隐藏不显示出来;最常用的是将一张图片设置一个可视区域,只让这张图展示设置的区域;

那么这里在啰嗦几句,在cocos2d中精灵CCSprite的可视区域一般可以通过两种方式来设置:

1.在创建精灵的时候进行设置;2.在创建后进行设置;举例如下:

新建一个cocos2d项目,然后在HelloWorldLayer.m中init方法中创建一个精灵,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

//---正常创建的icon图  

CCSprite * spriteOld =[CCSprite spriteWithFile:@"icon.png"];  

spriteOld.position=ccp(80,100);  

[self addChild:spriteOld];  

//---创建时设置30宽30高的可视区域  

CCSprite * spriteNew =[CCSprite spriteWithFile:@"icon.png" rect:CGRectMake(0, 0, 30,30)];  

spriteNew.position=ccp(150,100);  

[self addChild:spriteNew];  

//---创建后对其设置30宽30高的可视区域  

CCSprite * spriteT =[CCSprite spriteWithFile:@"icon.png"];  

[spriteT setTextureRect:CGRectMake(10, 10, 30, 30)];  

spriteT.position=ccp(230,100);  

[self addChild:spriteT];

上面我创建了3个精灵,第一个没有设置可是区域的icon精灵,第二个和第三个是设置了可视区域宽30高30的精灵,但是第二个和第三个精灵的可是区域宽高相同,但是起始点不同;而且第二个是从创建精灵的时候设置可视区域,第三个精灵则是创建精灵后进行设置的,设置的地方不一样,功能是一样的;

需要详细讲解的是不管用以上两种设置可视区域的哪种方法都需要传入一个CGRect对象,这个CGrect参数有四个,坐标x,y,以及宽高w,y;

那么CGRect在可是区域的函数中的作用如下:

CGRect的x,y表示从这个精灵贴图的(x,y)坐标开始设置可视区域,(w,h)可视区域的大小;

下面是运行效果图,童鞋们通过三个精灵(从左往右)之间的对比就很容易明白的:

下面介绍第二个知识点:精灵锚点(anchorPoint);

渲染锚点的作用就是在渲染图片的时候确定其渲染的方式,一般常用的锚点有以下几种:

图片左上角、图片右上角、图片中心点、图片左下角、图片右下角等等

首先童鞋们需要知道一点,在cocos2d引擎中在layer中添加渲染精灵贴图的时候默认的锚点是其中心点;

那么由于cocos2d中layer的原点(0,0)点是屏幕的左下角,所以如果默认创建一个精灵添加到layer中的话,是精灵的中心点放置在layer的原点上,即精灵图片显示在屏幕中只是精灵的宽一半高一半,如下图:

对应代码如下:

1

2

3

//---使用默认锚点  

CCSprite * spriteOld =[CCSprite spriteWithFile:@"icon.png"];  

[self addChild:spriteOld];

那么如果我们设置其精灵的锚点为左下角则正好将精灵icon完整显示出来,因为精灵的左下角正好与layer的原点重合,如下图:

对应代码如下:

1

2

3

4

//---设置精灵锚点为左下角  

CCSprite * spriteNew =[CCSprite spriteWithFile:@"icon.png"];  

spriteNew.anchorPoint=ccp(0,0);  

[self addChild:spriteNew];

设置的方法是精灵的anchorPoint属性,赋值的是个CGPoint对象,其CGPoint中的x与y最大取1,表示最右与最下;

———以上介绍的过于简单,那么下面Himi利用可视区域与锚点的特性制作一种从左往右样式简单进度条;

首先我们仍然使用cocos2d的icon图作为一个进度条,然后让其从左往右不断显示出来;步骤如下:

第一步:创建一个精灵,设置精灵的锚点为x=0(最左侧),y=0.5(精灵的y轴中点),代码如下:

1

2

3

4

5

//---使用默认锚点  

CCSprite * spriteP =[CCSprite spriteWithFile:@"icon.png"];    

spriteP.position=ccp(size.width*0.5,size.height*0.5);//设置坐标  

spriteP.anchorPoint=ccp(0,0.5);//设置锚点  

[self addChild:spriteP z:0 tag:88]; //将精灵添加到layer中显示

细心的童鞋可能会发现以上代码运行后发现精灵并不显示在屏幕中点,嗯,因为我们设置了精灵的锚点,现在精灵的左下角与屏幕中点重合着;

第二步:添加一个变量用于记录当前进度:

1

2

3

4

@interface HelloWorldLayer : CCLayer  

{  

    float currentShowRect;//当前可视区域的大小  

}

然后开启一个刷新函数:

1

2

3

4

5

6

7

-(id) init  

{  

    [self scheduleUpdate];  

}  

-(void)update:(ccTime)himi{//每一帧都会执行的函数  

  

}

最后一步:在刷新函数中书写从左往右慢慢显示icon进度条逻辑代码,代码如下:

1

2

3

4

5

6

7

8

9

10

-(void)update:(ccTime)himi{//每一帧都会执行的函数  

    //实现进度条逻辑  

    CCSprite *sprite =(CCSprite*)[self getChildByTag:88];  

    currentShowRect++;  

    if(currentShowRect>=100){  

        currentShowRect=0;  

    }  

    [sprite setTextureRect:CGRectMake(0, 0, currentShowRect,sprite.position.y)];  

      

}

运行截图如下:(icon显示区域越来越大,不断循环)

 

OK,本篇介绍完毕,可能童鞋们会认为本篇知识点过于简单,如果你是个经常关注Himi博客的童鞋,那么你会发现Himi基本上所有的博文都是介绍了很多细节方面的问题,原因一,千篇一律的文章太多,别人都写那么多了,我也没必要赘述。原因二,Himi常说的,细节决定一切,虽然说得绝对了些,但是事实开发项目中基本都是细节问题困扰着大家;

时间: 2024-10-30 17:35:24

【IOS-COCOS2D游戏开发之十七】灵活使用精灵可视区域(TEXTURERECT)与锚点(ANCHORPOINT),并结合可视区域与锚点制作进度条!的相关文章

【IOS-COCOS2D游戏开发之二】COCOS2D 游戏开发资源贴(教程以及源码)

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/420.html     这两天抽出一些时间学习cocos2d,发现资料N多,而且讲解的相当的全面:那么这段时间我也处于不断的学习中,当然好东西不私藏,这里我把比较经典的一个iOS游戏开发书籍给出,当然很多童鞋,我想都有了,那么就当是照顾没有的童鞋啦,下次发帖的时候,就应该是自己抽时间做个游戏出来后的时候,那么届

【ANDROID游戏开发二十七】讲解游戏开发与项目下的HDPI 、MDPI与LDPI资源文件夹以及游戏高清版本的设置

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/389.html 今天一个开发者问到我为什么游戏开发要删除项目下的hdpi.mdpi和ldpi文件夹:下面详细给大家解答一下: 首先童鞋们如果看过我写的<[Android游戏开发二十一]Android os设备谎言分辨率的解决方案!>这一节的话都应该知道Android从1.6和更高,Google为了方便开发者对于各

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

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/516.html 最近写了不少Cocos2d的博文了,那么由于Himi介绍的一般都是比较容易出错的问题或者比较受到关注的知识点,所以不少童鞋要求写个基础篇,那么这里Himi就举例最常用的精灵CCSprite来详细的介绍一些吧: 考虑到网上对于Cocos2d-iphone的中文教程已有很多,所以这里Himi会拿出一

[Unity3D]异步加载游戏场景与异步加载游戏资源进度条

摘要: 异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Application.LoadLevel("yourScene"); 这句代码执行完毕后程序会干什么呢??如下 ...     异步任务相信大家应该不会陌生,那么下面介绍一下Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Application.LoadLevel("yourScene");  这句代码执行

【IOS-COCOS2D游戏开发之一】搭建COCOS2D游戏引擎环境HELLOWORLD!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/415.html 最近几天仔细了解了iOS游戏开发引擎,常用的cocos2d,Unity引擎,那么Unity是非免费的,而cocos2d则是免费开源的: 最后促使我选择cocos2d的原因有两点: 1.最重要的原因是它对应的开发工具,尤其是 "ParticleDesigner",粒子系统编辑器,非常的喜

【IOS-COCOS2D(2.X) 游戏开发之一】自定义CCSPRITE中-(ID) INIT 重写需注意&amp; 2.X版本中注册触屏事件代码&amp;简述COCOS2D/X/UNITY3D引擎使用感想!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d-v2/736.html 先说下技术相关问题: Himi有段时间没有折腾Cocos2d-iphone了,前几天下载最新的Cocos2d 2.x版本尝试使用,发现两个常用知识点则需要注意的地方,这里分享下: 1.  对于Cocos2d 2.x版中,当你(自定义精灵)自定义一个类并继承精灵CCSprite时,务必要注意

WWDC 2013 Session笔记 - SpriteKit快速入门和新时代iOS游戏开发指南

这是我的WWDC2013系列笔记中的一篇,完整的笔记列表请参看这篇总览.本文仅作为个人记录使用,也欢迎在许可协议范围内转载或使用,但是还烦请保留原文链接,谢谢您的理解合作.如果您觉得本站对您能有帮助,您可以使用RSS或邮件方式订阅本站,这样您将能在第一时间获取本站信息. 本文涉及到的WWDC2013 Session有 Session 502 Introduction to Sprite Kit Session 503 Designing Games with Sprite Kit SpriteK

《Cocos2d 跨平台游戏开发指南(第2版)》一导读

前 言 Cocos2d 跨平台游戏开发指南(第2版)自从2007年创始以来,Apple App Store一直保持着持续增长的势头,每天平均约有500个App提交.其中,大约80%的App是游戏.形成这种局面的部分原因是Apple构建了一个非常棒的生态系统,免费提供操作系统和IDE开发环境,便于普通开发者接触并使用它们.另一部分原因在于Cocos2d框架,它是目前应用最广泛的免费iOS游戏开发框架之一,借助它,开发者能够更方便地开发游戏和App应用. SpriteBuilder把Cocos2d集

当 iOS 游戏开发像做份沙拉那么简单

写在所有之前:这个工具更适合没有编码基础又喜欢折腾的设计师们,并不一定适合开发者. 当你有一个好的游戏创意却因没有代码基础而搁浅时,是不是很期待一款这样的软件,让iOS游戏开发变得像做份沙拉那么简单?现在GameSaladInc.就为我们提供了这样一个便利的开发工具GameSalad.   简单介绍一下GameSalad:这是一款可视化编程的游戏引擎,使用者无需编码就能为iPhone, iPad, Mac和Web来设计,发布和分销原创游戏,简单易上手,很适合交互和视觉.开发完成的游戏可以通过云端