在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
{
//在这里该干嘛干嘛,填入你想要实现的代码
}