본문 바로가기

프로그래밍/libGDX

[libGDX] 파티클 에디터

Libgdx의 파티클 엔진

Libgdx에서는 자체적으로 파티클 엔진을 가지고 있고, 파티클 에디터도 제공하고 있습니다. 파티클 에디터는 화려한 파티클 효과를 제작할 수 있는 좋은 프로그램입니다. 


방금 만들어본 파티클 효과


다른 파티클 에디터와 비교해서 손색이 없는 에디터를 제공하고 있습니다. 다만 UI에 좀 버그가 있는것 같아서 원하는대로 조절하기 힘들때가 있습니다. 그래도 기능적으로는 완전합니다.


파티클 에디터

파티클 에디터는 Libgdx를 받아서 실행할 수 있습니다. Libgdx 파일을 받은후 Libgdx폴더 경로에서 명령 프롬프트를 실행합니다. 그리고 나서 다음을 입력해서 파티클 에디터를 실행할 수 있습니다.

java -cp gdx.jar;gdx-natives.jar;gdx-backend-lwjgl.jar;gdx-backend-lwjgl-natives.jar;extensions\gdx-tools\gdx-tools.jar com.badlogic.gdx.tools.particleeditor.ParticleEditor

Linux나 맥 사용자는 실행하는 명령어가 좀 다릅니다. 아래의 커맨드를 입력해서 실행하면 됩니다.

java -cp gdx.jar:gdx-natives.jar:gdx-backend-lwjgl.jar:gdx-backend-lwjgl-natives.jar:extensions/gdx-tools/gdx-tools.jar com.badlogic.gdx.tools.particleeditor.ParticleEditor

파티클 에디터를 실행한 화면입니다.


파티클 에디터를 실행한 화면


파티클 에디터 사용법은 옵션 하나 하나 건들면서 직접 익히는게 좋을 것 같습니다. 옵션이 너무 많아서 여기서 설명하기가 어렵네요. 죄송합니다.ㅠㅠ


Libgdx에 적용하기

파티클 효과를 만들어 봤으니 이제 Libgdx에 적용해야 합니다. 먼저 파티클 에디터로 파티클을 만든 후 저장한 파티클 파일과 사용된 이미지 파일들을 프로젝트의 assets 폴더 안에 넣어줍니다. (파티클 파일과 이미지 파일은 같은 폴더 안에 있어야 합니다.) 



Libgdx에서 파티클 효과는 ParticleEffect 클래스를 이용하면 됩니다. ParticleEffect 클래스의 생성자는 어떠한 인자도 받지 않습니다. 대신 ParticleEffect 는 파티클 파일을 load 해서 사용합니다.

ParticleEffect effect = new ParticleEffect();

effect.load(Gdx.files.internal("particle/fire.p"), Gdx.files.internal("particle"));

그리고 매 프레임마다 파티클 이펙트를 업데이트 시켜주고 렌더링해서 화면에 그려주어야 합니다. 업데이트는 update로 할 수 있고, 렌더링은 draw 메쏘드를 이용하면 됩니다.

public void render(float delta) {

effect.update(delta);

effect.draw(batch);

}

draw 메쏘드는 SpriteBatch만 받을 수도 있고, SpriteBatch와 delta를 같이 받을 수 있습니다. 두개의 인수를 받는경우 내부적으로 update까지 하게 되므로 따로 update를 안해줘도 됩니다. 그래서 아래와 같이 써도 됩니다.

public void render(float delta) {

effect.draw(batch, delta);

}


파티클 효과를 추가할때 주의할점

파티클 에디터로 저장된 파일을 열어보면 이미지 파일 경로가 절대 경로로 되어 있는것을 볼 수 있습니다. 


마지막줄을 보면 이미지 경로가 절대경로로 되어있다.


게임을 실행되는 디렉토리는 항상 달라지므로 절대 경로를 사용하면 안됩니다. 여기서 경로를 모두 지우고 파일명만 남겨둬야 합니다.


파일 이름만 남겨두자


몇가지 팁

파티클 에디터에 보면 다음과 같은 옵션들이 있습니다.



여기의 옵션들중 크게 의미있는 것은 위의 3가지 입니다.

  • Additive: Add Blend mode을 사용하지 말지 결정하는 옵션입니다.
  • Attached: 파티클 애니메이션이 실행중일때 Emiiter의 위치를 바꾸면 전체 파티클의 위치가 변합니다.
  • Continuous: 파티클 애니메이션을 반복실행합니다. 체크가 해제되어있으면 애니메이션이 한번 실행되고 끝납니다.


위 그림이 Attached 옵션이 설정되어 있을 때이고, 아래 그림이 옵션이 해제되어 있을 때이다.


마치면서

Libgdx는 자체적으로 훌륭한 파티클 엔진을 갖추고 있습니다. 거의 모든 파티클 기능들을 가지고 있기 때문에 굉장히 유용하고 광범위하게 사용할 수 있습니다. 또한 Libgdx 위키에 쓰여진 글에 따르면 Libgdx의 파티클 엔진은 조만간 수정할 계획을 가지고 있다고 하니 앞으로 더욱 강력한 파티클 엔진이 되지 않을까 싶습니다.


참고 링크들

http://www.java-gaming.org/topics/particle-effects-in-libgdx/29484/view.html

https://github.com/libgdx/libgdx/wiki/Particle-editor