2012-08-08 3 views
1

나는 작은 우주 침략자 프로젝트를 만들고 있는데, 나는 외계인을 왼쪽에서 오른쪽 루프에 끊임없이 가지고있다. 그들이 스크린의 끝을 쳤을 때 그들은 오른쪽에서 다시 왼쪽에서 오른쪽으로 다시 채색한다. 이미 창 크기를 설정했고 Java에서 공간 침입자를 만드는 방법에 대한 다양한 자습서를 살펴 보았습니다. 그러나 대부분은 제가 시도한 것과 똑같은 것을 말합니다. 누군가 내가 잘못 코딩 한 부분을 지적하여 문제를 해결할 수 있는지 알아볼 수 있습니까?자바에서 왼쪽에서 오른쪽으로 움직이는 침입자를 얻는 방법

이것은 외계인 클래스의 코드입니다. 다른 외계인 그러나 모든 클래스가 거의 같은이 하나 봐 있습니다

package spaceinvaders2; 

import java.awt.Graphics; 
import java.awt.Image; 
import javax.swing.ImageIcon; 

class Alien extends MoveObject 
{ 
    Image Alien = new ImageIcon(getClass().getResource("alien.gif")).getImage(); 
Alien(int x, int y, int w, int h) 
{ 
    super(x, y); 
    bounds.width = w; 
    bounds.height = h; 
} 

public void paint(Graphics g) 
{ 
    System.out.println("Alien generated"); 
    bounds.x = bounds.x - 2; 

    if ((bounds.x + bounds.width)< 0) 
    { 
     bounds.x = 750; 
     dead = false; 
    } 

    g.drawImage(Alien,bounds.x,bounds.y,bounds.width, bounds.height, this); 
} 
} 

편집 : 내 페인트 방법은 모든 그래픽을 그리는 주요 게임 기능 부분에서 호출되고있다. 드로잉은이 클래스에있는 외계인의 움직임에 문제가되지 않습니다.

+0

당신이 외국인의 움직임에 어떤 문제가 있는지 지정할 수 있습니다

다음은 간단한 내가 만든 예는? 귀하의 코드를 보면서 나는 움직임 속도가 일정하지 않을 수도있는 프레임 속도에 달려 있다고 말할 것입니다. 그러나 아마도 그것은 문제가 아닙니다. – denahiro

+0

코드에 대해 더 알지 못하면 피드백을 제공하기가 어렵지만 기본적으로 최상위 구성 요소에서 키 바인딩 (예 : 아니요, 실제로는)을 캡처해야합니다. 아마도 키 바인딩 API와 같은 것을 사용하고 이동 방향 매개 변수를 조정해야합니다. . 달성하고자하는 것에 따라, 새로운 키 스트로크가 등록 될 때까지 방향을 더하거나 뺄 수 있습니다. – MadProgrammer

답변

2

페인트 방법 ist가 한 번 실행되는 것 같습니다. paint() 메서드를 호출하려면 스레드를 추가해야합니다. periodi.

+0

이미 내 게임 클래스에 있습니다. 모든 페인트 방법은 그래픽을 그릴 때 호출됩니다 – user1134409

+0

테스트 해 보셨습니까? – stetro

+0

예, 게임을 실행했습니다. 메인 클래스가 매 8 초마다 화면을 가로 질러 오른쪽에서 왼쪽으로 이동합니다. 나는 오른쪽에서 왼쪽으로 계속되는 루프가 아닌 화면 경계를 넘기면 왼쪽에서 오른쪽으로 옮기려고합니다. – user1134409

0

귀하의 의견에 따르면, 외계인이 화면 경계를 벗어나면 왼쪽에서 오른쪽으로 움직이기를 원할 것입니다.

해결책은 간단합니다. 외계인의 방향을 추적해야합니다. 이를 수행하는 쉬운 방법은 단계 크기를 변수로 만드는 것입니다.

당신은 step 회원이 같은 외국인 클래스를 제공합니다 :

다음
int step = -2; 

: 오프 주제

bounds.x = bounds.x + direction; 

if ((bounds.x + bounds.width)< 0) 
{ 
    step = +2; 
} 
else if ((bounds.x - bound.width) > 750) 
{ 
    step = -2; 
} 
dead = false; 

g.drawImage(Alien,bounds.x,bounds.y,bounds.width, bounds.height, this); 

, 나는 dead = falsepaint 방법에 속하지 않는 생각합니다.

+0

고마워, 지금은 왼쪽에서 오른쪽으로 움직이지만 화면 크기에 충실하지 않으므로 주위를 어지럽히는 것이 결국에는 효과가있을 것이라고 생각한다. 다시 한번 감사합니다 – user1134409

+0

@ user1134409 여러분을 환영합니다. 샘플 코드에 약간의 실수가있었습니다. 두 번째 조건은'(bounds.x - bound.너비)> 750' (플러스 대신 마이너스). 재미있는 코딩을해라! –

1

외국인에게 이동 방향을 알려주는 direction 속성 (+1 또는 -1)을 제공해야합니다. 화면이 벗어나면 방향을 바꿉니다. 예를 들어 방향이 +1이면 -1로 변경하고 반대의 경우는 -1로 변경하십시오.

public class Alien extends JPanel 

    private int x = 5; 
    private int y = 5; 
    private int direction = 1; 

    @Override 
    public void paint(Graphics g) { 
     super.paint(g); 
     g.clearRect(x, y, getWidth(), getHeight()); 

     // draw the alien. 
     g.drawRect(x, y, 10, 10); 

     // move it 
     x = x + 5 * direction; 

     // is it about to go off-screen? 
     if (x < 0 || x + 10 > getWidth()) { 
      // change the direction 
      direction *= -1; 
     } 
    } 
} 
관련 문제