私は色を別の色に変える必要があります。青の色合い、緑色、紫色のようですが、私はそれに対して何か良い行動を見つけることができず、私はアニメーションを使うべきでしょうか? ?またはこれに組み込まれたアクションがありますか?私はスプライトの画素の色の交換に関するいくつかの質問を見て、私は何か良い解決策を参照してくださいdid'nt以来色を変えるスプライトCocos2d
答えて
あなたはスプライト
[sprite runAction:[CCTintTo actionWithDuration:2 red:255 green:0 blue:0]];
の色を変更するにはCCTintToアクションを使用することができます(すべてのソリューションは、色合いそれらのどれも、あなたが望む最終的なイメージを構成する複数のイメージレイヤ、つまり、パン用、ショー用、シャツ用、ヘアカラー用の各レイヤーを作成することなく、色の配列を変更することはできません。正確な勾配を使う能力のような利点があることに注意してください。
私のsolutイオンは色の配列を変更することを可能にします。つまり、既知の色を持つ単一のイメージを持つことができます(このレイヤーにグラディエントを追加する必要はありません。色は変更する色にのみ適用されます。ピクセルに任意の色を設定できます) 変更する色にグラデーションが必要な場合は、シェーディングだけで追加のイメージを作成し、スプライトの子として配置します。
また、私はcocos2d/x(3日間)の新機能であり、このコードはcocos2dx向けに書かれていますが、簡単にcocos2dに移植できることに注意してください。
また、私はアンドロイドのみでiOS上でテストを行っていないことに注意してください。アンドロイドの公式gccがどのように機能しているのか分かりませんし、_srcCと_dstCをどのように割り当てるのでしょうか。
ので、ここでそれが行く:
cocos2d::CCSprite * spriteWithReplacedColors(const char * imgfilename, cocos2d::ccColor3B * srcColors, cocos2d::ccColor3B * dstColors, int numColors)
{
CCSprite *theSprite = NULL;
CCImage *theImage = new CCImage;
if(theImage->initWithImageFile(imgfilename))
{
//make a color array which is easier to work with
unsigned long _srcC [ numColors ];
unsigned long _dstC [ numColors ];
for(int c=0; c<numColors; c++)
{
_srcC[c] = (srcColors[c].r << 0) | (srcColors[c].g << 8) | (srcColors[0].b << 16);
_dstC[c] = (dstColors[c].r << 0) | (dstColors[c].g << 8) | (dstColors[0].b << 16);
}
unsigned char * rawData = theImage->getData();
int width = theImage->getWidth();
int height = theImage->getHeight();
//replace the colors need replacing
unsigned int * b = (unsigned int *) rawData;
for(int pixel=0; pixel<width*height; pixel++)
{
register unsigned int p = *b;
for(int c=0; c<numColors; c++)
{
if((p&0x00FFFFFF) == _srcC[c])
{
*b = (p&0xFF000000) | _dstC[c];
break;
}
}
b++;
}
CCTexture2D *theTexture = new CCTexture2D();
if(theTexture->initWithData(rawData, kCCTexture2DPixelFormat_RGBA8888, width, height, CCSizeMake(width, height)))
{
theSprite = CCSprite::spriteWithTexture(theTexture);
}
theTexture->release();
}
theImage->release();
return theSprite;
}
をちょうど次の操作を行い、それを使用する:あなたはスピードが必要な場合、あなたはピクセルを作成するスプライトの拡張機能を作成します当然の
ccColor3B src[] = { ccc3(255,255,255), ccc3(0, 0, 255) };
ccColor3B dst[] = { ccc3(77,255,77), ccc3(255, 0 0) };
//will change all whites to greens, and all blues to reds.
CCSprite * pSprite = spriteWithReplacedColors("character_template.png", src, dst, sizeof(src)/sizeof(src[0]));
)
btw:この解決法は、場合によってはエッジに何らかのアーチファクトを発生させる可能性があるため、大きな画像を作成してそれを縮小することができるので、レンダリング時に高速化されるシェーダです。 GLはアーチファクトを最小にする。 また、アーティファクトを隠して上に置くために、黒い輪郭を持つ「修正」レイヤーを作成することもできます。 また、画像の残りの部分でこれらの「キー」カラーを使用しないようにしてください。かわった。 アルファチャンネルが変更されていないこと、純粋な赤/緑/青の色のみの基本画像を使用する場合は、この機能を最適化してエッジのすべてのアーティファクトを自動的に排除することもできます多くの場合は、単一のビットマップへの追加のシェード層の必要性)およびその他のクールなもの(多重いくつかの画像は - パレットのアニメーションを覚えている)
を楽しむ;)誰かがここにcocos2d-xのためにこれを望んでいた場合には
テクスチャの読み込み時に色を置き換えるのは良い方法ですが、アプリケーションがフォアグラウンドに再び入るとアンドロイドにテクスチャが読み込まれます。一般化するためには、色配列を知るためにテクスチャキャッシュメカニズムを拡張する必要があります。 –
色だけでなくアルファチャンネルも置き換える方法は? –
?コード:
somesprite->runAction(TintTo::create(float duration, Color3b &color));
- 1. cocos2dスプライトの検出を変更する
- 2. Cocos2Dでのスプライトの並べ替え方
- 3. cocos2dスプライトの爆発
- 4. cocos2dでスプライトを囲んで
- 5. Cocos2dでのスプライトのスケーリング
- 6. cocos2dスプライト衝突検出バウンディングボックス
- 7. Cocos2dのタッチ可能なスプライト
- 8. Cocos2d:スプライトのzOrderを動的に変更する(CCSpriteBatchNodeを使用)
- 9. Cocos2d - CCMoveBy - スプライト位置を見つける
- 10. Cocos2d:レイヤーをスプライトにスケールする
- 11. 配列からスプライトをリフレッシュするcocos2d
- 12. iPhone Cocos2D - スプライトを回転させる指
- 13. ランダムに異なるスプライトをcocos2d
- 14. Cocos2dの複数のスプライトの不透明度を変更する
- 15. cocos2dは別のスプライトにスプライトを追加できません
- 16. Swift 3スプライトの色合いを変更
- 17. Cocos2dで50のスプライトを移動
- 18. Cocos2d Mac ccDrawLine色
- 19. Libgdxスプライトの色
- 20. Cocos2Dのピクセルアートゲーム:変更可能な色
- 21. iOS Cocos2dスプライト移動の問題
- 22. Cocos2d - 親ノード上の複数のスプライト
- 23. Cocos2D - 効率的なスプライトシートと転置スプライト
- 24. 「スプライトのテクスチャが無効です」Cocos2dタイルマップエラー
- 25. Cocos2Dヘルプ:回転スプライトでスプライトを連続的に回転して子スプライトを生成する方法
- 26. ジョイスティックと一致するようにCocos2dスプライトを回転する
- 27. Cocos2D:スプライトの明るさを向上させる
- 28. 画像/スプライトで特定の色を別の色に置き換えます。
- 29. LibGDX:スプライトの色を変更するには?
- 30. ブートストラップボタンの色を変える
CCTintToを試しましたか? –
thxを試してみたことがありません – mattblessed