2014-06-22 3 views
2

나는 libgdx/java에서 health bar를 만드는 방법을 궁금해했다. 나는 모양 막대를 만드는 데 채워진 모양을 사용할 수 있다고 생각하는 모양 렌더러를 찾고 있는데, 그 방향으로 접근하는 방법을 잘 모르겠다. 반면에 scene2D와 NinePatches를 사용하여 게임의 헬스 바를 만드는 방법을 살펴 보았습니다. 나는 구글에서 웹 사이트를 검색하여 NinePatch/Scene2D를 사용하려고 시도했다. 그러나 코드를 추가 할 때 내 스크린에 렌더링하려고 할 때 항상 문제가 발생한다. 그래서 누군가가 어떤 방법 으로든 libgdx에서 기능적 건강 바를 만들 수 있다면, 나는 매우 감사 할 것입니다. 고맙습니다.Libgdx에서 healthbar를 만드는 방법은 무엇입니까?

10 개의 게시물을 게시하지 않았기 때문에 아직 사진을 게시 할 수 없습니다. 여기에 링크 http://gyazo.com/6650f3d820f31c99c3f8061ebed0bdec이 있습니다. 죄송합니다

+0

귀하의 질문의 밤은이 논리를, 그것을 구현할 수있는 방법이다. 시도한 방법을 Google에 알려 주지만 코드를 표시하지는 마십시오. Scene2d를 사용하는 것이 좋습니다.코드에서 시도한 것을 보여주십시오. – SneakyB

+0

도움이 될 수도 있습니다. http://stackoverflow.com/questions/21892694/libgdx-how-to-program-an-hp-bar – noone

답변

1

나는 Scene2D 및 단계와 경험이 있지만, 여기에 내가 간단한 healthbar 할 것 어떻게하지 않습니다

  • 은 직사각형을 만들고 색상이나 질감이 채우기를.
  • 플레이어가 HP를 잃을 때 HP가 잃어버린 것과 같은 비율로 그 사각형을 단축합니다.
  • 화면의 높이/너비로 기본 직교 카메라를 만듭니다. 보통이 뷰포트 카메라를 호출합니다.
  • 다른 모든 그리기 논리 아래에서 SpriteBatch도 변경합니다. spriteBatch(viewportCam.Combined)
  • 이 스프라이트 배치 내에서 상태 표시 줄을 그립니다.
    • 당신이 healthbar 뒤에 약간 큰 사각형을 그리면
      public void Draw() 
      { 
          spriteBatch(normalCam.combined); 
          spriteBatch.begin(); 
          //Normal draw logic. 
          spriteBatch.end(); 
      
          spriteBatch(viewportCam.combined); 
          spriteBatch.begin(); 
          //Draw UI elements last so the will be drawn on top of the rest. 
          spriteBatch.end(); 
      } 
      
    당신은 자신을 경계해야합니다.
  • 건강 상태의 남은 양에 따라 색을 변경할 수 있습니다.

편집 그냥 다른 방법을 사용하여 다시 현재이 가로 질러왔다. 저는 1 픽셀 너비의 빨간 그라디언트에서 나오는 ninepatch입니다. health = new NinePatch(gradient, 0, 0, 0, 0) 이렇게하면 스트레치하는 동안 아티팩트가 발생하지 않습니다. 여기에서 나는 얼마나 오랫동안 그것이 필요하고 그리는지를 계산합니다.

width = currentHealth/totalHealth * totalBarWidth; 

이제 어디에서나 원하는 그림을 그릴 수 있습니다.

health.draw(batch, 10, 10, width, gradient.getHeight); 

만약 당신이 그것에 대한 컨테이너를 원한다면 당신은 그것을위한 ninepatch를 셋업하고 백그라운드에서 역동적 인 건강 전에 그것을 그립니다. 그래서 컨테이너가 위쪽/아래쪽에서 2 크고 왼쪽/오른쪽에서 5라고 가정 해 봅시다.

container = new NinePatch(containerRegion, 5, 5, 2, 2); 
//Offset it by the dynamic bar, let's say the gradient is 4 high. 
container.draw(batch, 5, 8, totalBarWidth + 10, 8); 
health.draw(batch, 10, 10, width, 4); 

왼쪽에 컨테이너 5를 "하드 코딩"하고 가로 10 피트로 만들었습니다. 수직으로 나는 그것을 2만큼 낮추었 고 바를 완벽하게 맞추기 위해 높이를 8로 만들었습니다.

+0

그래서 2 개의 정사각형 카메라를 만들었지 만 그 중 하나는 카메라의 제작에 사용되지만 건강 바? 사각형이 손상된 후에 크기가 짧아 지도록하고 for 루프를 사용하여 공격 받고 있는지 확인합니다. 간단히 말해 하나의 건강 포인트 에서요? 도움을 주셔서 감사합니다. 진지하게 저에게 많은 도움이 될 것입니다. – user3765704

+0

나는 지금까지 이것을 시도했다. 나는 분명히 코드의 일부가 빠져 있음을 알고있다. 또한 메소드를 어디에 던져야하는지, 즉 내 메인에서 렌더링/생성하는 데 문제가 있습니다. http://gyazo.com/fde6d8f36a027097576b848a491625d8 – user3765704

+0

또한 생성자에서 오류가 발생한다고 말합니다. Java Null Pointer, 사각형을 만들고 위치를 설정하는 것이 필요하다고 생각 하긴하지만 생성자에서 Vector2 ^와 관련이 있다고 생각합니다. – user3765704

1

이것은 당신이 당신의 자기 아주 잘 쓰여진

import com.badlogic.gdx.ApplicationAdapter; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.GL20; 
import com.badlogic.gdx.graphics.Pixmap; 
import com.badlogic.gdx.graphics.Pixmap.Format; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 


public class MyGdxGame extends ApplicationAdapter { 
    SpriteBatch batch; 
    int i=0; 
    Texture texture,texture2; 
    @Override 
    public void create() { 
     batch = new SpriteBatch(); 

     initTestObjects() ; 
    } 

    @Override 
    public void render() { 
     Gdx.gl.glClearColor(0, 0, 0, 0); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     batch.begin(); 


     batch.draw(texture2,100,100,300,20); 
    batch.draw(texture,100,100,i,20); 
    if(i>300) 
    { 
     i=0; 
    } 
    i++; 

     batch.end(); 
    } 
    private void initTestObjects() { 

     int width =1 ; 
     int height = 1; 
     Pixmap pixmap = createProceduralPixmap(width, height,0,1,0); 
     Pixmap pixmap2 = createProceduralPixmap(width, height,1,0,0); 

    texture = new Texture(pixmap); 
    texture2 = new Texture(pixmap2); 



     } 



    private Pixmap createProceduralPixmap (int width, int height,int r,int g,int b) { 
     Pixmap pixmap = new Pixmap(width, height, Format.RGBA8888); 

     pixmap.setColor(r, g, b, 1); 
     pixmap.fill(); 

     return pixmap; 
     } 
} 
관련 문제