1

如何在 Cocos2d 中使用 CoreGraphics 制作精灵图形?

我正在尝试制作一个使用由核心图形制作的图形的精灵。

感谢您的任何见解和帮助!

4

2 回答 2

3

完成所有核心图形工作,然后您将拥有一个 CGImageRef。有了那个参考,你可以使用

+ (id)spriteWithCGImage:(CGImageRef)image key:(NSString *)key

在 CCSprite 上。

于 2012-09-30T05:24:54.800 回答
0

这解决了它。

下面的答案是从我在游戏开发网站上收到的回复中复制的:https ://gamedev.stackexchange.com/questions/38071/how-to-make-a-sprite-using-coregraphics-ios-cocos2d-iphone


我不知道 cocos2d,所以我只能给你一些关于 iOS 上 CoreGraphics 的技巧。

首先,简单的情况下,如果您可以从 UIImage 或 CGImageRef 创建精灵。

/* function that draw your shape in a CGContextRef */
 void DrawShape(CGContextRef ctx)
 {
     // draw a simple triangle

     CGContextMoveToPoint(ctx, 50, 100);
     CGContextAddLineToPoint(ctx, 100, 0);
     CGContextAddLineToPoint(ctx, 0, 0);
     CGContextClosePath(ctx);
  }


    void CreateImage(void)
    {
       UIGraphicsBeginImageContext(CGSizeMake(100, 100));

       DrawShape(UIGraphicsGetCurrentContext());

       UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

       UIGraphicsEndImageContext();

       // now you've got an (autorelease) UIImage, that you can use to
       // create your sprite.
       // use image.CGImage if you need a CGImageRef
    }

如果您需要提供数据缓冲区,并创建自己的 CGContextRef :

CGContextRef CreateBitmapContextWithData(int width, int height, void *buffer)
{
    CGContextRef ctx;
    CGColorSpaceRef colorspace;
    size_t bytesPerRow;
    size_t bitsPerComponent;
    size_t numberOfComponents;
    CGImageAlphaInfo alpha;

    bitsPerComponent = 8;
    alpha = kCGImageAlphaPremultipliedLast;

    numberOfComponents = 1;
    colorspace = CGColorSpaceCreateDeviceRGB();

    numberOfComponents += CGColorSpaceGetNumberOfComponents(colorspace);
    bytesPerRow = (width * numberOfComponents);

    ctx = CGBitmapContextCreate(buffer, width, height, bitsPerComponent, bytesPerRow, colorspace, alpha);

    CGColorSpaceRelease(colorspace);

    return ctx;
}

void CreateImageOrGLTexture(void)
{
   // use pow2 width and height to create your own glTexture ...
   void *buffer = calloc(1, 128 * 128 * 4);
   CGContextRef ctx = CreateBitmapContextWithData(128, 128, buffer);

   // draw you shape
   DrawShape(ctx);

   // you can create a CGImageRef with this context 
   // CGImageRef image = CGBitmapContextCreateImage(ctx);

   // you can create a gl texture with the current buffer
   // glBindTexture(...)
   // glTexParameteri(...)
   // glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

   CGContextRelease(ctx);
   free(buffer);
}

有关所有 CGContext 功能,请参阅 Apple 文档:https ://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CGContext/Reference/reference.html

希望这有帮助。


最终用户回答。

于 2012-10-02T22:47:31.917 回答