2014-02-17 1 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 может запускаться во время рендеринга с другой скоростью или реализовать больше состояний, таких как код, где он знает, что он должен делать каждый (например, переместите птицу каждые 100 мс, 15 раз).

 Смежные вопросы

  • Нет связанных вопросов^_^