2014-02-17 4 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에 대해 잘 모르겠지만 자바에서 많은 그래픽 유틸리티, 게임 및 프로그램을 만들었으며 알고 있어야하는 몇 가지 기본 원칙이 있습니다. '문제'가있는 것처럼 보이는 것은 렌더링이 다른 스레드 (이 코드가 실행되는 동안 발생)로 수행된다고 가정하거나 새가 움직일 때마다 완전히 다시 그려지는 것입니다. 대부분의 그래픽 렌더러에서는 그렇지 않습니다. 그들은 모든 프레임의 모든 처리 후에 단순히 다시 그립니다.
그래서 다른 스레드에서 렌더링을 수행하여 렌더링이 다른 속도로 진행되는 동안 for 루프가 실행될 수 있도록하거나, 각기 다른 작업을 수행 할 수있는 코드를 구현합니다 프레임 (예 : 새를 100ms마다 이동, 15 번).