在cocos2d中,精灵帧缓存CCSpriteFrameCache是用来存储精灵帧的。它没有特别的属性,只存储了一些用来管理CCSpriteFrame的方法。

以一个例子来说明,一般在又纹理图集的程序中,我们使用如下语句添加多个精灵帧,来构成精灵帧缓存:

CCSpriteFrameCache* frameCache = [CCSpriteFrameCache  sharedSpriteFrameCache];

[frameCache addSpriteFramesWithFile:@"game-art.plist"];

其中该方法从plist属性文件中添加多个精灵帧。纹理将会被自动载入,纹理的扩展名则使用.png替代.plist。

在使用的过程中通过如下语句就可以:

CCSpriteFrame* bulletFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"bullet.png"];

该语句生成精灵帧。

CCSpriteBatchNode* batch = [CCSpriteBatchNode batchNodeWithTexture:bulletFrame.texture];

[selfaddChild:batch z:1tag:GameSceneNode TagBulletSpriteBatch];

然后在通过如上语句生成了CCSpriteBatchNode并添加进子节点。

最后还有一点想说明的:今天刚刚学到的:

导航栈是retain的,push进navigationcontroller之后,需要把已经push进去的controller release掉。

对delegate在@property的申明应该用assign而不应该用retain的,应该牢记。

个人对 ios delegate 的理解《转载》

之前一直对iOS的delegate不是很明白,一直在网上找例子看想了解清楚,但一直没理解。今天做项目的时候碰到了需要使用delegate的时候,没办法只能自己硬着头皮试试了。凭着之前对delegate的理解,自己慢慢琢磨现在算是得出一点经验吧,分享一下。


上图中,popover后面的是主view controller,popover里面装的是第二个viewcontroller,我们的目的是通过点击popover中的按钮在主view controller中实现对应的方法。

首先,先在第二个viewcontroller的.h头文件中申明我们的delegate:

@protocol MSelectToolViewControllerDelegate

- (void) TOOL_MEASURE_LINE;
- (void) TOOL_MEASURE_FREE_LINE;

@end

然后,设置一个可以set、get的变量:

@property (nonatomic, retain) id<MSelectToolViewControllerDelegate> delegate;
再申明popover中按钮对应的方法,(直接从xib文件连线就可以完成的):

- (IBAction)measureLineTool:(id)sender;
- (IBAction)measureFreeLineTool:(id)sender;

然后直接在第二个viewcontroller的.m实现文件中具体实现按钮的方法:
<pre class="brush:objc; toolbar: true; auto-links: false;">

- (IBAction)measureLineTool:(id)sender {
    [delegate TOOL_MEASURE_LINE];
}

- (IBAction)measureFreeLineTool:(id)sender {
    [delegate TOOL_MEASURE_FREE_LINE];
}

本例中是直接调用先前delegate申明的方法。

接下来的工作在主viewcontroller中完成了。。。。

在主view controller的.h头文件中import进来第二个view controller的.h头文件
并在主viewcontroller要遵守的协议中加入之前定义的delegate的名称

@interface MotiConnectViewController : UIViewController<UIScrollViewDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIPopoverControllerDelegate, MSelectToolViewControllerDelegate>

最后在主viewcontroller中设置Delegate的委托对象并实现Delegate中定义的方法,类似这样:
<pre class="brush:objc; toolbar: true; auto-links: false;">

MSelectToolViewController *mSelectToolViewController = [[MSelectToolViewController alloc] initWithNibName:nil bundle:nil];
    mSelectToolViewController.delegate = self;

- (void)TOOL_MEASURE_LINE
{
    //在这里该干嘛干嘛,填入你想要实现的代码
}

- (void)TOOL_MEASURE_FREE_LINE
{
    //在这里该干嘛干嘛,填入你想要实现的代码
}

cocos2d心得关于精灵帧缓存的更多相关文章

  1. 【Cocos2d-x 3.x】 精灵帧缓存和纹理缓存

    转自泰然网(Cocos2d-x 3.x官方文档):精灵帧缓存:http://www.tairan.com/archives/6378/   纹理缓存: http://www.tairan.com/ar ...

  2. SpriteFrameCache 精灵帧缓存

    //获取精灵帧缓存的单例对象 auto  spriteFrameCache = SpriteFrameCache::getInstance(); //从plist文件添加多个精灵帧 spriteFra ...

  3. cocos2d-x中描述精灵帧图片的plist和json文件各个key的含义

    最近在研究cocos,互联网行业中,手游业最近的表现是非常的火,加上本身对游戏有浓厚兴趣,所以便染指了游戏引擎~ 这次的废话就这么简短吧,因为这次记录的东西本身就很少. 在cocos中,为精灵帧添加缓 ...

  4. COCOS2D中对精灵的操作、对图片的各种操作

    内容简要: 1.初始化 2.创建无图的精灵 3.设置精灵贴图大小  4.添加入层中 5.对精灵进行缩放  6.对精灵宽或高进行缩放  7.旋转精灵 8.设置精灵透明度  9.精灵的镜像反转  10.设 ...

  5. OpenGL帧缓存对象(FBO:Frame Buffer Object)(转载)

    原文地址http://www.songho.ca/opengl/gl_fbo.html 但有改动. OpenGL Frame BufferObject(FBO) Overview: 在OpenGL渲染 ...

  6. CSharpGL(42)借助帧缓存实现渲染到纹理(RenderToTexture)

    CSharpGL(42)借助帧缓存实现渲染到纹理(RenderToTexture) 渲染到纹理(Render To Texture)是实现很多OpenGL高级效果的一个基础.本文记录了如何用CShar ...

  7. SpriteBuilder中如何平均拉伸精灵帧动画的距离

    首先要在Timeline中选中所有的精灵帧,可以通过如下2种的任意一种办法达成: 1按下Shift键的同时鼠标单击它们 2鼠标在Timeline空白区拖拽直到拉出的矩形包围住所有精灵帧方块后放开鼠标. ...

  8. 关于精灵帧(Sprite Frame)的尺寸大小

    一个对象的精灵帧(Sprite Frame)有若干关于大小的尺寸. 比较容易混淆,这里记录下来区别: CCSpriteFrame *spriteFrame = self.spriteFrame; CG ...

  9. OpenGL读取帧缓存数据

    https://blog.csdn.net/niu2212035673/article/details/80251949 简述有些时候我们可能需要获取渲染后的图像数据,比较常用的函数是glReadPi ...

随机推荐

  1. dubbo-springboot

    一.服务提供者boot-user-service-provider 服务提供者boot-user-service-provider代码结构如下: 1.服务提供者boot-user-service-pr ...

  2. HDU 5869 Different GCD Subarray Query 树状数组 + 一些数学背景

    http://acm.hdu.edu.cn/showproblem.php?pid=5869 题意:给定一个数组,然后给出若干个询问,询问[L, R]中,有多少个子数组的gcd是不同的. 就是[L, ...

  3. Github开源项目单

    以下涉及到的数据统计与 2019 年 5 月 1 日 12 点,数据来源:https://github.com/trending/java?since=monthly . 下面的内容从 Java 学习 ...

  4. Flask 学习系列(一) -登录

    Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 .Flask使用 BSD 授权. Flask也被称为 “ ...

  5. MongoDB自动递增序列

    MongoDB没有像SQL数据库外开箱即用自动递增功能.默认情况下,它采用了12字节的ObjectId为_id字段作为主键来唯一地标识文档.然而,可能存在的情况,我们可能希望_id字段有一些其它的自动 ...

  6. GetDC(),ReleaseDC()

    用GetDC()得到的DC, 必须调用ReleaseDC()用CreateDC()创建的DC, 必须调用DeleteDC() 两者是不能混淆的.一种典型的错误代码如下:CDC* pDC = GetDC ...

  7. -bash: mail: command not found

    近日,安装了一个最小化的centos 6.3 6,用mail发送邮件进行测试的时候提示-bash: mail: command not found mailx没有安装,于是: yum -y insta ...

  8. SQL server 数据库基础语句

    上篇介绍的是鼠标操作 遗漏两个知识: 主外键 两个列 数据类型 必须一致    //int类型不能约束nvarchar 类型      varchar类型不能约束nvarchar类型 varchar( ...

  9. 解决flexpaper读取本地文件问题,JAVA+TOMCAT

    flexpaper是不可以用绝对路径的调用本地或项目外的swf文件的,这个我们就有两种方法,一种是把swf和项目放在同一个目录下面,通过相对路径来获取 另一种是在运行项目的tomcat的server. ...

  10. More helpful Cocos2d and Gaming macros

    More helpful Cocos2d and Gaming macros Here are w few macros that i wrote to make the code more read ...