在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. __getitem__,__setitem__,__delitem__

    __getitem__.__setitem__.__delitem__ 总结: __getitem__,__setitem_,__delitem__ : obj[‘属性’]的方式去操作属性时触发的方法 ...

  2. Coder(线段树)

    求一部分和的线段树,因为是对5取余,所以给定一段区间a-b,假设其位置会有变化,最多会有5种和,那么就可以保留这五种和,在用lz进行延迟标记时,保存位置变化了多少也就知道了该从当前和转到哪一个和. 当 ...

  3. Spring Boot运行原理

    概述 本文主要写了下Spring Boot运行原理,还有一个小例子. Spring4.x提供了基于条件来配置Bean的能力,而Spring Boot的实现也是基于这一原理的. Spring Boot关 ...

  4. Objective-C Protocols

    Objective-C allows you to define protocols, which declare the methods expected to be used for a part ...

  5. ubuntu中使用eclipse开发android,logcat显示问题

    〜/工作区/ .metadata / .plugins / org.eclipse.core.runtime / .settings / com.android.ide.eclipse.ddms.pr ...

  6. Lucene全文检索技术学习

    ---------------------------------------------------------------------------------------------------- ...

  7. cocoapods学习

    1.安装 http://stackoverflow.com/questions/16459028/rvm-install-error-running-requirements-osx-port-ins ...

  8. ubuntu 14.04 配置java 1.8环境变量

    从官网上下载jdk 源文件,并解压 root@hett-PowerEdge-T30:/usr/local/src# tar -xzvf jdk-8u151-linux-x64.tar.gz 解压完成之 ...

  9. Java面试题全集(下)

    这部分主要是开源Java EE框架方面的内容,包括hibernate.MyBatis.spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题, ...

  10. Gym 100342I Travel Agency (Tarjan)

    题意读懂了就好做了,就是求一下点双连通分量.维护一下一颗子树的结点数,对于一个结点当u是割点的时候, 统计一下u分割的连通分量v,每得到一个连通分量的结点数cnt(v)和之前连通分量结点数sum相乘一 ...