Skip to content

Instantly share code, notes, and snippets.

@danhealy
Last active October 6, 2016 06:11
Show Gist options
  • Save danhealy/308e7d0b3906741cf50661a1f2d4a825 to your computer and use it in GitHub Desktop.
Save danhealy/308e7d0b3906741cf50661a1f2d4a825 to your computer and use it in GitHub Desktop.
rubymotion motion-game create sprite from image data
diff --git a/src/sprite.cpp b/src/sprite.cpp
index 450e5f4..f3320c8 100644
--- a/src/sprite.cpp
+++ b/src/sprite.cpp
@@ -54,6 +54,25 @@ sprite_new(VALUE rcv, SEL sel, VALUE name)
return rb_class_wrap_new((void *)sprite, rcv);
}
+/// @method #create_with_image(data, len)
+/// Creates a sprite from +data+ stream buffer image data and +len+ length
+/// @param data [String] image data stream buffer
+/// @param len [Integer] data length
+/// @return [Sprite]
+
+static VALUE
+sprite_create_with_image(VALUE rcv, SEL sel, VALUE data, VALUE len)
+{
+ cocos2d::Sprite *sprite = NULL;
+ cocos2d::Texture2D *texture = new cocos2d::Texture2D();
+ cocos2d::Image *image = new cocos2d::Image();
+ image->initWithImageData((unsigned char *)RSTRING_PTR(StringValue(data)), len);
+ texture->initWithImage(image);
+ sprite = cocos2d::Sprite::createWithTexture(texture);
+ assert(sprite != NULL); // TODO raise exception
+ return rb_class_wrap_new((void *)sprite, rcv);
+}
+
/// @group Actions
static VALUE
@@ -405,6 +424,7 @@ Init_Sprite(void)
rb_define_singleton_method(rb_cSprite, "load", sprite_load, 1);
rb_define_singleton_method(rb_cSprite, "new", sprite_new, 1);
+ rb_define_singleton_method(rb_cSprite, "create_with_image", sprite_create_with_image, 2);
rb_define_method(rb_cSprite, "move_by", sprite_move_by, 2);
rb_define_method(rb_cSprite, "move_to", sprite_move_to, 2);
rb_define_method(rb_cSprite, "blink", sprite_blink, 2);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment