2017-05-29 3 views
0

これまでのところ、私はジャンプアニメーションを持っています。ジャンプアニメーションを作成する画像の配列をループするために整数の「ジャンプ」を使用します。さらに、「ジャンプ」の数に応じて高さ「PositionY」が増減され、ジャンプが10になるとアニメーションが終了します.....これはタイマーやペイントイベントを使用することにより、ジャンプアニメーションコードジャンプアニメーションをウィンドウに挿入する

public Bitmap Jump_Frame2Draw() 
    { 
     Jump_Frames = new Bitmap[] { Jump_1, Jump_2, Jump_3, Jump_4, Jump_5, Jump_6, Jump_7,Jump_7, 
     Jump_8, Jump_8 }; 
     if (jump < Jump_Frames.Length) 
     { 
      if (jump <= 3) 
      { 
       PositionY -= 30; 
      } 
      else if (jump == 8 || jump == 10) 
      { 
       PositionY += 0; 
      } 
      else 
      { 
       PositionY += 24; 
      } 
      jumpFrame = Jump_Frames[jump]; 
      jump++; 
      if (jump == 10) 
      { 
       jumpTimer.Stop(); 
       isJumping = false; 
       jump = 0; 
       standTimer.Start(); 
       Invalidate(); 
      } 
     } 
     tracer = jumpFrame.GetPixel(1, 1); 
     jumpFrame.MakeTransparent(tracer); 
     isJumping = true; 
     return jumpFrame; 
    } 

ですが、私は単に私が指定されたジャンプキーを押したときにそれを描画するx秒ごとのINORDERこのメソッドを呼び出すことができますよ。 ..今私の問題は、私がジャンプアニメーションの真中にいると言って、私は元に戻っていきたいと思っています。それをダブルジャンプと考えてください。また、ジャンプと高さ(位置Y)は直接相関しています。ジャンプが0,1,2,3の場合、高さは214 - (ジャンプ+ 1)* 30)です。そうでなければジャンプは(5-9)高さは94 +(ジャンプ - 4)* 24)です。したがって、画像が描かれる最大の高さは94です(ウィンドウの形状は上と下が上になります...(0,0)は左上にあります)。視覚的観点については

///////////

、これは私のジャンプアニメに似ています。これは時間的に少し短くなっていますが、私が見つけることができる最高のものです。

ジャンプアニメーション:https://media.giphy.com/media/wXervlFEqohO0/giphy.gif

今、この男はアイアンマンだった想像し、彼がジャンプアップするために彼のジェットブースターを使用していますが、それでも空気中ながら、今、彼はただまっすぐ行くことにしました。

ヘルプのThx。

答えて

1

ほとんどのアニメーション固有のコードを専用のJumpAnimationクラスに移動すると、自分自身を救うことができます。コンストラクタ内の特定のアニメーションのために必要なすべての情報渡す:

class JumpAnimation 
{ 
    public JumpAnimation(int howHigh) 
    { 
     ... 
    } 
} 

スペースバーをクリックへの応答を、あなたはJumpAnimationを作成する必要があります知っています。しかし、あなたのタイマーが時間を計っている間に、ジャンプまたはjetpackアニメーションの詳細に対処したくない場合 - IAnimationインターフェイスを使用して、それが何であってもアニメーションを続けることができます。そして、あなたがジェットパックをacitvateとき、あなただけのJetPackAnimationで現在アクティブになっているものは何でもアニメーション置き換えたい:

フォームで:

private IAnimation currentAnimation = null; 

IAnimationインタフェース:

public interface IAnimation 
{ 
    // get the bitmap at the time relevant to the animation start 
    Bitmap GetBitmapAt(int time); 
} 

することができますJumpAnimationIAnimationを実装する際に、あなたの質問で共有したコードを再利用してください。

は今だけでなくBitmapを返す、あなたがアニメーションで、「現在のステップに関する詳細な情報を保持しているクラスを作成することができます

public class AnimationStep 
{ 
    public Bitmap Bitmap { get; set; } 
    // the y-offset 
    public int OffsetY { get; set; } 
    // indicates whether this was the last step of the animation 
    public bool Completed { get; set; } 
    // a jump animation can be interrupted by a jetpack animation, but a DieAnimation cant: 
    public bool CanBeInterrupted { get; set; } 
    ... 
} 

を私はあなたのアイデアを得る願っています私はこれを主張していませんよ。あなたの問題に取り組むための唯一の、あるいは最善の方法ですが、問題の別の人の意見がボックス外での考え方に役立つことがあります。

+0

O btw、ちょうどあなたの意見のためにthxと言いたい、私は正しい方向に向かって私を動かし、私はインターフェイスが何かを学んだ:)。作業コードを見たい場合は、教えてください。 – Jamisco

+0

steered * ....綴り訂正 – Jamisco

+0

聞いてよかったです。 –

関連する問題