CZGTextureCreator 0.9.2

CZGTextureCreator 0.9.2

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布时间上次发布2014年12月

未知所有者 维护。



 
依赖
cocos2d~> 2.1
DTCoreText~> 1.6
 

  • 作者
  • Christopher Z. Garrett

CZGTextureCreator 是一个基于 cocos2d 的类,允许您绘制多个图像或 Core Text 帧。然后,它将它们打包成一个 CCTexture2D,以便在批节点中使用。

概述

CZGTextureCreator 有两个主要用途。

首先,它允许使用 Core Graphics 绘制纹理帧。CZGTextureCreator 将绘制的一批帧打包成单个纹理,可在精灵中使用。

其次,它使用 Core Text(通过 DTCoreText pod)创建正确排版的文本精灵。CCLabelTTF 更新速度太慢,并且仅限于单字体标签。CCLabelBMFont 或 CCLabelAtlas 更快,但不能正确排版文本。它们将文本作为图像块处理,而不是文本块。不要窃取绵羊

唯一不希望使用 CZGTextureCreator 与文本的情况是您在快速更改文本,例如在快速变化的计分器中。在其他任何时候,这都应该比标准的 Cocos2d 标签更快速,更有效地使用资源,并且对设计者的眼睛更友好。

感谢 @blackpawn 提供的 包装矩形的伪代码。我在自己的纹理矩形打包算法中使用了它的变体。

安装

CZGTextureCreator 被打包成 cocoapod。最简单的方法是将它添加为项目中的一个 pod。CZGTextureCreator 依赖于已作为 pod 安装的 cocos2d。如果您还没有这样做,我建议在现有项目中添加 cocos2d 作为 pod,然后删除您在设置项目时添加的 cocos2d 文件。

示例

    CZGTextureCreator *textureCreator = [[CZGTextureCreator alloc] init];

    // Core Graphics drawing example
    [textureCreator addFrameWithName: @"redRectangle"
                                size: CGSizeMake(100,50)
                        drawingBlock: ^(CGRect rect, CGContextRef ctx) {
                            UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect: CGRectInset(rect, 2.0, 2.0) 
                                                                            cornerRadius: 10.0];
                            path.lineWidth = 2.0;
                            CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
                            CGContextSetStrokeColorWithColor(ctx, [UIColor whiteColor].CGColor);
                            [path fill];
                            [path stroke];
    }];

    // Simple text drawing
    [textureCreator addFrameWithName: @"howdy"
                                size: CGSizeMake(100,20)
                        drawingBlock: ^(CGRect rect, CGContextRef ctx) {
        CGContextSetFillColorWithColor(ctx, [UIColor greenColor].CGColor);
        [@"howdy" drawInRect: rect withFont: [UIFont boldSystemFontOfSize: 15.0]];
    }];

    // CZGTextureCreator uses DTCoreText to provide an HTML convenience method.
    // Here's an example of creating a single label frame that has formatted HTML text
    textureCreator.defaultTextOptions =  @{  DTDefaultFontFamily : @"Futura",
                                             DTDefaultTextColor  : @"white"};
    NSString *htmlText = @"<span style=\"font-size: 16;\">Unladen swallow ground speed: <b>32</b> <i>mph</i></span>";
    [textureCreator addFrameWithName: @"html"
                                size: CGSizeMake(320,200)
                            htmlText: htmlText];

    // Texture creator will then pack the above frames and call the draw blocks for each one.  
    // It will also add the frame names to the texture frame cache.
    CCTexture2D *texture = [textureCreator createTexture];

    // Create a batch node so that all sprites drawn from the texture are batched into one draw call
    CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithTexture: texture];

    CCSprite *howdy = [CCSprite spriteWithSpriteFrameName: @"howdy"];
    howdy.position = ccp(50,50);
    [batchNode addChild: howdy]; // don't forget to add the sprites to the batch node, not self

    CCSprite *redRectangle = [CCSprite spriteWithSpriteFrameName: @"redRectangle"];
    redRectangle.position = ccp(300,100);
    [batchNode addChild: redRectangle];

    CCSprite *html = [CCSprite spriteWithSpriteFrameName: @"html"];
    html.anchorPoint = ccp(1.0, 0.5);
    html.position = ccp(320.0, 200.0);
    [batchNode addChild: html];

    // Add the completed frame in the top left to see what it looks like:
    CCSprite *full = [CCSprite spriteWithTexture: texture 
                                            rect: CGRectMake(0,0, texture.pixelsWide, texture.pixelsHigh)];
    full.anchorPoint = ccp(0, 1.0);
    full.position = ccp(0,300);
    full.scale = 0.5;
    [batchNode addChild: full];

    [self addChild: batchNode];