0

ヘルスバーを実装するゲームに取り組んでいます。ヘルスバーは 1px x 1px の CCSprite で、ここで見つけたメソッドを使用して必要なサイズにサイズ変更されます。この方法を使用すると、バーのサイズが大きく変更されますが、残りの健康状態に応じてバーの色を変更したいと思います。サイズ変更を行うために使用している方法は次のとおりです。

-(void) takeDamage:(double)damage {

  currentHP -= damage;
  if( currentHP > 0) {
    double percentage = (double)currentHP/ (double)maxHP;
    double width = (self.contentSize.width * (3.0f/4.0f)) * percentage;
    if (percentage <= 0.2f) {
      CCTexture2D * tex = [[CCTextureCache sharedTextureCache] addImage:@"hp_red.png"];
      [bar setTexture:tex];
    } else if( percentage <= 0.45f) {
      CCTexture2D * tex = [[CCTextureCache sharedTextureCache] addImage:@"hp_yellow.png"];
      [bar setTexture:tex];
    }

    [self resizeSprite:bar toWidth:width toHeight:self.contentSize.height/15];

  }

  [nums setString:[NSString stringWithFormat:@"%i/%i", currentHP, maxHP]];

}

私が行っているテクスチャの変更は、SO から取得した別のものであり、スプライトの画像を変更します (緑ではなく黄色または赤であることを除いて、別の 1 ピクセル x 1 ピクセルの画像に変更します)。問題は、以下に示すように、スプライトの半分が黄色で残りの半分が黒であることです。

シーンショット

「Abraxol」のヘルスバーを見ると、私が話している半分が黄色で半分が黒の奇妙な効果が表示されます。

4

2 に答える 2

1

確かではありませんが、黄色から黒へのフェードの奇妙さは、テクスチャのサイズが 1px x 1px であることと、画像ファイルがどのように生成されたかに関係している可能性があります。効果がまだ存在するかどうかを確認するために、たとえば 10px x 10px の大きな画像ファイルを使用してみましたか。

ヘルス バーのサイズであるヘルス バーにスプライトを使用しない理由はありますか?

ゲームの All Star Rally では、下の写真のスプライト ヘルス バーに複数のスプライトを使用しました。赤、緑、黄色のバーは、ヘルス バー アウトライン スプライトの後ろにあります。アンカーポイントをスプライトの左側に設定し、スプライトの scaleX を操作して、ヘルス バーの長さを最小スケールとして 1.0 から 0.01 に変更し、スプライトを非表示にして、それより小さくスケーリングしようとしないでください。

ヘルス バーの縮小に合わせてスプライトの色やテクスチャを変更したい場合は、さまざまな色のスプライトを重ねて表示を入れ替えることができます。

ゲームで実際のバーと同じサイズのバーを使用すると、興味深いグラデーションやその他の効果をスプライトに追加できます。

スプライトの色を変更する別のオプションは、sprite.color を使用してスプライトの色を操作することです。color プロパティを使用すると、スプライトの赤、緑、青の値を差し引いて色を付けることができます。白いスプライトから始める場合は、たとえば、sprite.color の緑と青の色成分をすべて差し引くことで、赤くすることができます。

すべてのスター ラリーのヘルス、スピード、パワー バー

于 2012-08-05T23:24:34.060 に答える
1

これは、テクスチャに実際には 1 ピクセルしかないため、テクスチャが黒にフィルタリングされるフィルタリングの問題のように見えますが、GPU はテクスチャを正しくフィルタリングするために複数のピクセルを必要とする場合があります。

2x2 または 4x4 のテクスチャを試してみます。これが最小テクスチャ サイズの問題である可能性は十分にあります。いずれにせよ、1x1 テクスチャは非常に珍しいものです。その場合、実際にはテクスチャをまったく使用せず、代わりに OpenGL ES (cocos2d の ccDrawLine など) で線または塗りつぶされたポリゴンを描画するだけです。

于 2012-08-05T23:18:26.963 に答える