1

ここに、プレーヤーの動きをレンダリングするこのメソッドがあります。立っている状態、左足を前に出している画像、右足を前に出している画像の 3 つの画像を切り替えます。

画像を非常に高速に入れ替えますが、レンダリングの速度を変更するにはどうすればよいですか?

public static void renderUpwardWalking() {
    ImageIcon[] frames = { CharacterSheet.up, CharacterSheet.upLeftLeg,
            CharacterSheet.upRightLeg };

    if (Key.up && Character.direction == "up") {
        currentFrame++;
        if (currentFrame == 3)
            currentFrame = 1;
        Character.character.setIcon(frames[currentFrame]);
    } else if (!Key.up && Character.direction == "up") {
        currentFrame = 0;
    }
}
4

2 に答える 2

0

currentFrame カウンターのスケールを変更し、その範囲を使用してフレーム レートを制御できます。

 //Let  this go from 1...30
 int currentFrameCounter;


 .
 .
 .
 currentFrameCounter++;
 if(currentFrameCounter == 30) currentFrameCounter = 0;

 //Take a fraction of currentframeCounter for frame index  ~ 1/10 frame rate
 //Note care to avoid integer division
 currentFrame = (int) (1.0*currentFrameCounter / 10.0);  

すべてを一般的なモデルにまとめます。

 int maxCounter = 30; //or some other factor of 3 -- controls speed


 int currentFrameCounter;

 public static void renderUpwardWalking() {
     ImageIcon[] frames = { CharacterSheet.up, CharacterSheet.upLeftLeg,
        CharacterSheet.upRightLeg };

     if (Key.up && Character.direction == "up") {

         currentFrameCounter++;  //add
         if(currentFrameCounter == maxCounter) currentFrameCounter = 0;             
         currentFrame = (int) (1.0*currentFrameCounter / (maxCounter/3.0));  
         Character.character.setIcon(frames[currentFrame]);
     } else if (!Key.up && Character.direction == "up") {
         currentFrame = 0;
     }

}

于 2013-10-18T14:13:25.430 に答える