ゲームのシーンに追加するスプライトが選択される割合を制御しようとしています。
高いパーセンテージに基づいて選択された4つのスプライトがあります。ゲームプレイ全体でパーセンテージを変更できるようにしたいと思います。メソッドが呼び出されるたびに、シーンにスプライトを追加する必要があります。約2秒ごとにメソッドを呼び出すタイマーがあります。パーセンテージに基づいて毎回スプライトを追加する必要があります。
これが私がこれまでに持っているものですが、正しく機能していません。パーセンテージを増やしても、スプライトが追加される可能性は高くなりません。間違ったものが増えることもあれば、まったく機能しないこともあります。これを行うには、もっと簡単な方法が必要だと思います。
誰かアイデアはありますか?
これが、シーンにスプライトを追加する私の方法です。
private void addSprite() {
switch (pickSprite()) {
// Persons Sprite with area touched code
case 1:
red_Sprite = red_pool.obtainPoolItem();
SequenceEntityModifier loop1 = new SequenceEntityModifier(
new RotationModifier(.5f, 0, -5),
new RotationModifier(.5f, -5, 5),
new RotationModifier(.5f, 5, 0));
red_Sprite.registerEntityModifier(new LoopEntityModifier(loop1));
scene.registerTouchArea(red_Sprite);
if (!red_Sprite.hasParent())
scene.getFirstChild().attachChild(red_Sprite);
else
red_Sprite.setVisible(true);
red_personList.add(red_Sprite);
break;
case 2:
// Persons Sprite with area touched code
green_Sprite = green_pool.obtainPoolItem();
SequenceEntityModifier loop2 = new SequenceEntityModifier(
new RotationModifier(.5f, 0, -5),
new RotationModifier(.5f, -5, 5),
new RotationModifier(.5f, 5, 0));
green_Sprite.registerEntityModifier(new LoopEntityModifier(loop2));
scene.registerTouchArea(green_Sprite);
if (!green_Sprite.hasParent())
scene.getFirstChild().attachChild(green_Sprite);
else
green_Sprite.setVisible(true);
green_personList.add(green_Sprite);
break;
case 3:
// Persons Sprite with area touched code
orange_Sprite = orange_pool.obtainPoolItem();
SequenceEntityModifier loop = new SequenceEntityModifier(
new RotationModifier(.5f, 0, -5),
new RotationModifier(.5f, -5, 5),
new RotationModifier(.5f, 5, 0));
orange_Sprite.registerEntityModifier(new LoopEntityModifier(loop));
scene.registerTouchArea(orange_Sprite);
if (!orange_Sprite.hasParent())
scene.getFirstChild().attachChild(orange_Sprite);
else
orange_Sprite.setVisible(true);
orange_personList.add(orange_Sprite);
break;
case 4:
// Persons Sprite with area touched code
blue_Sprite = blue_pool.obtainPoolItem();
SequenceEntityModifier loop4 = new SequenceEntityModifier(
new RotationModifier(.5f, 0, -5),
new RotationModifier(.5f, -5, 5),
new RotationModifier(.5f, 5, 0));
blue_Sprite.registerEntityModifier(new LoopEntityModifier(loop4));
scene.registerTouchArea(blue_Sprite);
if (!blue_Sprite.hasParent())
scene.getFirstChild().attachChild(blue_Sprite);
else
blue_Sprite.setVisible(true);
blue_personList.add(blue_Sprite);
break;
}
これが私のピックスプライトメソッドです:
public int pickSprite() {
double rand = Math.random();
for (int i = 0; i < mOdds.length; i++) {
if (rand < mOdds[i])
return i;
rand -= mOdds[i];
}
return -1; // should never reach this
}
これが、追加されるスプライトのオッズまたはパーセンテージを増やすことを試みる私の方法です。
public void increaseOdds(int index, double value) {
double valueFromIndex = mOdds[index];
mOdds[index] += value;
// Make sure odds don't turn mOdds to less than zero
if (mOdds[index] < 0.0) {
value = value - mOdds[index];
mOdds[index] = 0.0;
} else if (mOdds[index] > 1.0) {
value = mOdds[index] - 1;
mOdds[index] = 1.0;
}
double changeToOthers = value / 3;
double extraForNext = 0.0f;
for (int i = 0; i < mOdds.length; i++) {
if (i != index) {
mOdds[i] -= changeToOthers;
if (mOdds[i] < 0) {
extraForNext = mOdds[i];
mOdds[i] = 0.0;
} else if (mOdds[i] > 1) {
extraForNext = 1 - mOdds[i];
mOdds[i] = 1.0;
} else {
mOdds[i] += extraForNext;
}
}
}
}