在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的理解,自己慢慢琢磨现在算是得出一点经验吧,分享一下。

cocos2d心得关于精灵帧缓存-LMLPHP
上图中,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
{
    //在这里该干嘛干嘛,填入你想要实现的代码
}

04-27 06:07