2015-11-04 57 views
0

我不是說底部功能。只是一個運行到X點的動畫停止一段時間並恢復。我問這個問題的原因是因爲我必須製作一個項目,在這個項目中,飛碟飛過建築物,停在建築物上,使它隨着梁消失,然後繼續前進。這是我有:如何製作動畫暫停和恢復?

import java.awt.Color; 

import acm.program.GraphicsProgram; 

public class UFO extends GraphicsProgram { 
    public static final int APP_W = 800; 
    public static final int APP_H = 600; 

    public void init() { 
     setSize(APP_W, APP_H); 
     setBackground(Color.LIGHT_GRAY); 
    } 

    public void run() { 
     GBuilding Tower = new GBuilding(10, 400, Color.black, 80); 
     add(Tower); 

     GBuilding Tower2 = new GBuilding(160, 400, Color.CYAN, 80); 
     add(Tower2); 

     GBuilding Tower3 = new GBuilding(260, 400, Color.RED, 80); 
     add(Tower3); 

     GBuilding Tower4 = new GBuilding(410, 400, Color.BLUE, 80); 
     add(Tower4); 

     GBuilding Tower5 = new GBuilding(490, 400, Color.WHITE, 80); 
     add(Tower5); 

     GBuilding Tower6 = new GBuilding(640, 400, Color.GREEN, 80); 
     add(Tower6); 

     UFOmodel ufo = new UFOmodel(Color.GREEN, 0, 250); 
     add(ufo); 

     while (true) { 
      ufo.move(10, 0); 
      pause(30); 

     } 

    } 
} 

顯然,這是一個GComound與建設在一個單獨的類和UFO在一個單獨的類。基本上,我不知道如何使UFO移動到X點,那麼當時在這一點上有束閃光燈同時使用

getElementAt(20,20).setVisible(false); 

當時使建築物消失,然後讓動畫繼續隨着飛碟離開屏幕。

+0

有沒有辦法從GraphicsProgram獲取當前的x和y?如果是這樣,在移動之後,檢查x和y以查看UFO是否在正確的位置,如果是,執行其他功能。即使GraphicsProgram沒有提供當前的x和y座標,你仍然可以在UFO類中跟蹤它們並執行相同的操作。 – blm

回答

0

將構建和顯示電影膠片幀的動畫可視化。繪製一個幀,暫停一個幀間隔以顯示它,更新幀,暫停,更新...

現在規劃出這些幀的繪製步驟。首先有一系列UFO移動的幀,然後可能是幾幀剛剛盤旋的幀,然後將激光束顯示一幀或兩幀,然後隱藏激光束和目標建築物,然後將光懸停在一幀或兩幀,然後是UFO移動的序列。

到目前爲止,你有一個while循環,實現移動UFO。您需要擴展它以實施更大的計劃 - 上述5個序列。這5個序列中的每一個都會改變一些圖形對象並循環適當數量的幀。

只需通過循環所需數量的框架就可以完成懸停,也許可以稍微來回地推動UFO的位置。

將UFO移動到擊發位置可以通過循環正確數量的幀來完成,直到累積運動跨越所需的距離。雖然你可以預先計算這個距離,但如果它循環直到UFO的位置是正確的,它會更容易和更具適應性(例如適應不同的窗口大小)。例如。 while (ufo.getX() < building.getX())

(該object.getX()調用假定你使用這個Stanford graphics package

實現第一序列和調試。然後在代碼中添加第二個序列,然後調試它。然後添加下一個序列,依此類推。

使用IDE和調試器,如IntelliJ Idea。它將極大地幫助你,例如它可以單步執行該程序,以便看到每一步實際執行的操作,這可能與您的期望不符。