Marcelo
Marcelo

Reputation: 3391

Coloring a CCSprite without only using its prime colors

I have a CCSprite that was created from a png with transparent background.

I want to be able to apply colors to this sprite in a way that I`m free to define which color it is, without the actual color of the sprite affecting the amount of each color I have to add.

I`ve tried this:

mySprite.color = ccc3(200,200,255);

In an attempt to add a little blue-ish feel to my sprite, but as it works by setting the amount of tint that's gonna be displayed based on existant color of the sprite, and my sprite has virtually no blue in any of it (most of it is yellow) the resulting effect is pretty sketchy, everything gets really dark, and there is one slight blue-ish coloring, but not as I wanted.

The ideal effect for me on this case would be to ADD a light blue mask to it with very low alpha.

Is there an easy way to do that without composing sprites?

I've tried using CCTexture2D, but had no luck, as there is no built in method for working with colors, and most tutorials only teach you how to build textures out of image files.

Upvotes: 0

Views: 1671

Answers (2)

Danyal Aytekin
Danyal Aytekin

Reputation: 4215

This is deceptively hard to do in code with the original sprite. Another option would be:

  • create a new sprite, which is just a white outline version of your original sprite
  • the color property of this white sprite will now respond exactly to the RGB values you pass in
  • so pass in your light blue value to the white sprite and set the opacity correctly
  • then overlay it on your original sprite

Any good?

Upvotes: 1

CodeSmile
CodeSmile

Reputation: 64477

The only way you can achieve this is by overlaying (masking) the sprite with the proper OpenGL blend functions. When you say "add a light blue mask" then that's what you need to do. You may find this visual blendfunc tool helpful, if only to understand how blending with mask sprites works and what you can achieve with it. There's no built-in support for this by Cocos2D however, so you'll have to revert to pure OpenGL inside a cocos2d node's -(void) draw {} method.

Tinting (changing the color property) will only modify the RGB channels of the entire image by changing the vertex colors of all 4 vertices.

Upvotes: 0

Related Questions