2014-02-17 28 views
0

這裏是我的代碼:在我的飛揚的鳥類遊戲中,爲什麼每次移動它時鳥不會更新?

import java.applet.AudioClip; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.event.KeyEvent; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 

import acm.graphics.GLabel; 
import acm.program.GraphicsProgram; 
import javax.imageio.ImageIO; 
import acm.util.MediaTools; 

public class FlappyBird extends GraphicsProgram { 
    public Background background; //background image 
    public UpTube uptube; //one of the pipes 
    public DownTube downtube; //other pipe 
    public Bird bird; 
    //image for the bird 
    public static final int APPLICATION_WIDTH = 882; 
    public static final int APPLICATION_HEIGHT = 772; 

    public void run(){ 
     addKeyListeners(); 
     background = new Background(); 
     add(background); 
     uptube = new UpTube(); 
     add(uptube); 
     downtube = new DownTube(); 
     add(downtube); 
     bird = new Bird(); 
     add(bird); 

    public void jump(){ 
     for(int i =0;i<5;i++){ 
      bird.move(3,-7); 
      pause(100); 
     } 
     for(int i =0;i<15;i++){ 
      bird.move(5, -4); 
      pause(100); 
     } 
     for(int i =0;i<15;i++){ 
      bird.move(7,0); 
      pause(100); 
     } 
     for(int i =0;i<15;i++){ 
      bird.move(5,7); 
      pause(100); 
     } 
     for(int i =0;i<15;i++){ 
      bird.move(3,-7); 
      pause(100); 
     } 
    } 

    public void keyPressed(KeyEvent e){ 
     if(e.getKeyCode() == KeyEvent.VK_SPACE){ 
        jump(); 

然而,當我運行這個,我按下空格鍵,它不顯示鳥的個人運動,它只是傳送點小鳥結束位置pause(100)後結束每個for聲明。我如何製作它,以便每次移動它時更新鳥的位置?

回答

0

我不知道你正在使用的API,但我已經在java中製作了許多圖形工具,遊戲和程序,並且你必須知道一些基本原則;你似乎有一個'問題'的人是你認爲渲染是由另一個線程完成的(在這段代碼運行時發生),或者只要鳥移動就會完全重繪 - 在大多數圖形渲染器中情況並非如此他們只是在每一幀的所有處理之後重新繪製。
因此,您需要做的是在另一個線程上渲染,以便for循環可以在渲染以不同速率進行時運行,或者在知道每個線程應該做什麼的情況下實現更多狀態機代碼幀(例如每100ms移動一次鳥15次)。