2017-05-29 93 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秒序畫它,當我按我指定的跳躍鍵。 ..現在我的問題是讓我說我​​正在跳躍動畫的中間,我想回去。我該怎麼做呢。把它看作是一個雙跳。另外,跳躍和高度(PositionY)直接相關。所以如果跳躍是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); 
} 

你可以當您在JumpAnimation中實施IAnimation時,請重複使用您在問題中分享的代碼。

現在,而不是隻返回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

噢,順便說一句,只是想說你的看法thx,激勵我走向正確的方向,我學到了什麼是接口:)。如果你想看到工作代碼,請告訴我。 – Jamisco

+0

steered * ....拼寫更正 – Jamisco

+0

很高興聽到您的回覆! –