2013-05-31 4 views
0

좋아요, 좋아요, 그렇기 때문에 이미지를 렌더링 문에서 렌더링 할 수 있다는 것을 이해합니다. 그래도 한 가지 질문이 있습니다. 객체를 동적으로 만들 수있는 방법이 있습니까 (예 : Plane 클래스). 이미지를 만들고 texture라는 문자열을 통해 렌더링 할 수 있습니까? 예를 들어 불릿 (Bullet)이라는 클래스가있는 경우 어떻게하면 동적으로 이미지를 만들 수 있습니까?Java - Slick2D - 동적으로 객체 만들기

? 나는 정말로 약간의 도움에 감사 할 것이다.

예 :

또한
class Bullet 
{ 
    public float x, y = 0; 
    public float rotation = 0; 
    public void bullet(posX, posY) 
    { 
     x = posX; 
     y = posY; 
    } 

, 나는 그것이 루프를 자동으로하는 방법 할 수있는 방법 (이미 메인 클래스에서 실행 루프를 가지고 있지만, 어떻게 내가 블록이 추가합니까?)?

public void update() { 
    x += 2 * Math.cos((Math.PI/180) * rotation); 
    y += 2 * Math.sin((Math.PI/180) * rotation); 
} 
} 

감사합니다,

편집 :으로는 나는 또한 그것을 렌더링하는 의미, 이미지를 만들 수 있습니다.

Frogger와 다소 비슷한 방식으로 작동하는 게임의 경우, 선언 한 다음 BasicGame 파일의 update() 루프에 update 문을 추가하면이 클래스의 Image to texture render를 어떻게 만듭니 까? 패키지 기타;

import mobile.MobileOctopus; 

import org.newdawn.slick.Image; 
import org.newdawn.slick.SlickException; 

public class Current { 
    public Image texture; 
    public float x, y = 0; 
    MobileOctopus player; 
    public Current(int posY, MobileOctopus character) throws SlickException 
    { 
     texture = new Image("res/current.png"); 
     x = 0; 
     y = posY; 
     player = character; 
    } 
public void update() 
{ 
    x -= 3; 
    if(x < -380) 
    { 
     x = 0; 
    } 
    if(player.y + 32 > y && player.y + 32 < y + 32) 
    { 
     player.x -= 3; 
    } 
} 
} 

현재 클래스는 플레이어가 안에있을 때 왼쪽으로 이동합니다. 하지만, 내가 할 수있는 방법은, 총알 개체를로드 생성자 내에서 이미지를로드하고 변수에 저장할 때, 제 생각에는

Current myCurrent = new Current(100, player); 

답변

0

를 호출하여 위 말했다. 그것은 메모리에 보관할 파일이 너무 크지 않은 경우입니다.

public Bullet(){ 
    //Load image here 
} 

제 생각에 업데이트 메서드는 루프에서 호출됩니다. 문제를 Asumming하면 총알 클래스 내에서 그냥 이렇게 :

@Override 
public void update(GameContainer gc, int delta) throws SlickException { 
    bullet.update() 
} 

당신이 당신의 업데이트 방법 내에서 루프를 호출 할 경우 다음만이 루프 총알, 실행, 업데이트 또는 적용 할 수있는 게임의 어떤 전에. 당신은 게임 전체가 공정하게 업데이트 될 수 있도록하고 싶습니다.

EDIT 1

나는 당신이 지금 무슨 뜻인지 이해합니다. 객체의 이미지를 렌더링하기 위해서는 이것이 내가 한 것입니다. 이것이 최선의 방법인지 나는 모른다. 그러나 이것이 내가 그것을 한 방법이다.

먼저 페인트 메소드를 객체에 추가해야합니다. Slick의 그래픽 구현을 추가했는지 확인하십시오.

public void paint(Graphics g){ 
    g.drawImage(image, X, Y); 
} 

render 메서드 내에서 개체를 호출하고 페인트합니다.

public void render(GameContainer gc, Graphics g){ 
    bullet.paint(g); 
} 

이렇게하면 개체를 화면에 렌더링 할 수 있습니다.이제 여러 가지를 화면에 그릴 필요가있을 때이를 순서대로 지정해야합니다. 그렇지 않으면 겹칠 것입니다.

+0

예,하지만 어떻게 자동으로 렌더링합니까? 업데이트 문에있는 경우 bullet.update()를 추가해야합니다. 나는 그것을 프로그래밍하고있다. 또한 render() 메소드에서만 렌더링 할 수 있습니다. 어떻게하면 렌더링 할 것인가를 선언하고 bullet.update()를 update 문에 추가한다고 선언 할 수 있습니까? 아마 배열일까요? – joeelectricity

+0

@ user2441712 편집을 참조하십시오. 도움이되기를 바랍니다. – Twister1002

+0

좋아요,하지만 render 문에 bullet.paint()를 추가 할 필요가 없도록 만드는 방법은 무엇입니까? 이미지 배열을 사용해야합니까? – joeelectricity

0

게임을 만들 때 Slick2D는 AUTOMATICALLY으로 게임의 업데이트 메서드를 호출하고 메서드를 호출합니다. 게임의 업데이트/렌더링 호출을 객체의 업데이트/렌더링으로 만드는 것입니다.

import org.newdawn.slick.*; 

public class ExampleGame extends BasicGame { 
    public static void main(String[] args) throws SlickException { 
     //creates and starts the game 
     AppGameContainer g = new AppGameContainer(new ExampleGame("Title")); 
     g.start(); 
    } 
    public ExampleGame(String title) { 
     super(title); 
    } 

    public void render(GameContainer container, Graphics g) 
      throws SlickException { 
     // This code automatically runs on a loop 
     System.out.println("render"); 
    } 

    public void init(GameContainer container) throws SlickException { 
     // This code runs once 
     System.out.println("init"); 
    } 

    public void update(GameContainer container, int delta) 
      throws SlickException { 
     // This code automatically runs on a loop: 
     System.out.println("update"); 

    } 

}* 

이 로그에 출력하는 것입니다 :

init 
render 
update 
render 
update 
render 
render 
render 
update 
render 
... 

당신이 볼 수 있듯이, 예제 코드 렌더링 또는 업데이트 호출 더 루프가 없습니다 여기

은 예입니다. Slick2D에 루프가 내장되어 있습니다.

관련 문제