๊ทธ์ ๊ป ๊ทธ๋ํฝ ์ถ๋ ฅํ๊ธฐ 1ํธ์ ํฌ์คํ ํ์๋๋ฐ ์์ค๊ฐ ์์์ฃ ? ์ด์ ์ฌ๋ฆฌ๋ ค ํ๋๋ฐ ์ผ์ด ์ข ๋ฐ๋น ์ ์ค๋ ํฌ์คํ ํฉ๋๋ค.
์!!!!
์ค๋์ ์ ๊ฐ ๋ง๋ ์์ค์ ์ด๋ฏธ์ง ํ์ผ์ ๋ชจ๋ ๊ณต์ ํ ์์ ์ด๋ ์ ๋ฐ๋ผ์๋ง ์ฃผ์ ๋ค๋ฉด ์ฌ๋ฌ๋ถ๋ค๋ ๋ฉ์ง ๊ฒ์์ ๋ง๋์ค ์ ์์ต๋๋ค ใ ใ
( ์ ๋ ์ฒ์์ธ๋ฐ ์ด๋ฐ ๋ง์ ํ๊ณ ์๋ค์ ใ ใ ใ )
์ ์ ๊ฐ์ ์๋๋ก์ด๋ ์คํ๋์ค๋ฅผ ์ฌ์ฉํ๊ณ libGDX๊ฐ ์ค์น๋์ด์์ผ๋ฉฐ ์ด๊ณณ์ ์ค์ (assets)์ ๋๊ฐ์ด ํ์ จ๋ค๋ ๊ฐ์ ํ์ ์งํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ ์คํธ๋ ์๋๋ก์ด๋ ํฐ์ด ์๋ ๋ฐ์คํฌํ์์ ์งํํฉ๋๋ค. ( ์์ง ํฐ์์๋ ํ ์คํธ๋ฅผ ๋ชปํด๋ดค์ต๋๋ค. )
์ง๋ฌธ ์์ผ์๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์.
๊ทธ๋ผ ์์ํฉ๋๋ค.
์ค๋ ๋ณด์๊ฒ๋ ์์ค๋ ์๋์ ๊ฐ์ด ์คํ์ด ๋ฉ๋๋ค.
๋ ์ ์ผ์ชฝ์ผ๋ก ๊ณ์ ์์ง์ด๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๊ณ ์ผ๋ฆญํฐ๋ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ํ์ดํ๋ก ์ด๋์ด ๊ฐ๋ฅํฉ๋๋ค.
1. ์ถ๊ฐ๋ ํ์ผ ๋ฐ ํด๋์ค ( ์์ค ์คํ์ ํ์ํ ์ถ๊ฐ๋ ์ด๋ฏธ์ง ํ์ผ์ ์ฒจ๋ถํ์์ต๋๋ค. )
- carl-carlson.jpg๋ ์์ด๋ ๋๋ ํ์ผ์ธ๋ฐ ๋ค์ด๊ฐ์๋ค์ ใ ใ ;;;;
2. ์ฒจ๋ถ๋ ํ์ผ์ ๋ค์ด๋ฐ์ ํด๋น ์์น ( android/assets )์ ๋ฃ์ด์ฃผ์ธ์.
3. core์ ์๋ ์์ค๋ ์๋์ ๊ฐ์ต๋๋ค.
์ฐ์ Player ์ ๋๋ค.
์, ํ๋ ์ด์ด๋ ๊ฒ์์ ์ฃผ์ธ๊ณต ์ผ๋ฆญํฐ์ ๋๋ค. Sprite๋ฅผ ์ด์ฉํด์ ๋ฟ๋ ค์ค๊ฑฐ๊ตฌ์ setBounds๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์ผ๋ฆญํฐ์ ์ฌ์ด์ฆ๋ฅผ ์ง์ ํด์คฌ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ๋ถ์์ characterSprite๋ฅผ ๋ถ๋ฌ์ธ ์ ์๋๋ก getter๋ฅผ ํ๋ ์ ์ธํด์คฌ์ฃ .
๋ค์์ CharacterProcessor์ ๋๋ค.
CharacterProcessor๊ฐ InputProcessor๋ฅผ ๊ตฌํํ๋ฉด ๊ทธ ์์ ๊ฐ์ข ๋ฉ์๋๋ค์ ์ค๋ฒ๋ผ์ด๋ํด์ผํ๋๋ฐ ์ ๋ keyDown๋ฉ์๋๋ง ๊ตฌํ์ ํ๊ณ ๋๋จธ์ง ๋ฉ์๋๋ค์ ๊ธฐ๋ณธ์ผ๋ก ๋๋์์ต๋๋ค.
์ผ๋จ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ ์ด์ด๋ฅผ ํ๋ ์์ฑํด์ ๋ค๊ณ ์๊ณ ๊ทธ ํ๋ ์ด์ด์๋ํ getter์ธ getPlayer()๋ฅผ ๋ง๋ค์ด์คฌ์ต๋๋ค.
์ด์ ํค๋ณด๋ ์ ๋ ฅ์ ๋ฐ์์ ์ผ๋ฆญํฐ๋ฅผ ์์ง์ด๊ธฐ์ํด keyDown๋ฉ์๋๋ฅผ ๊ตฌํํฉ๋๋ค.
์ฌ๊ธฐ์ keycode 21์ ์ผ์ชฝ, 22๋ฅผ ์ค๋ฅธ์ชฝ ํ์ดํ๋ฅผ ๋งํฉ๋๋ค.
์ผ์ชฝํ์ดํ๊ฐ ๋๋ฆฌ๋ฉด ์ข์ธก์ผ๋ก ์ด๋ํ๋๋ฐ ์กฐ๊ฑด์ด ์์ต๋๋ค. ํ๋ฉด์ ๊ฐ์ฅ ์ข์ธก๊น์ง ๋๋ฌํ๋ฉด ๋์ด์ ์์ง์ด์ง ์๋๋ก if ์กฐ๊ฑด์ ์ฃผ์์ต๋๋ค. ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๋๊ฒ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
์, ์ด์ ๋ฉ์ธํด๋์ค์ธ MyGdxGame ํด๋์ค๋ฅผ ๋ณด์ค๊น์?
public class MyGdxGame extends ApplicationAdapter {
SpriteBatch batch;
Texture background;
Texture terrain;
TextureRegion groundTextureRegion;
float backgroundPos = 0;
CharacterProcessor inputProcessor;
@Override
public void create () {
batch = new SpriteBatch();
background = new Texture("sky2.jpg");
terrain = new Texture("grey_stone_1.png");
terrain.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);
groundTextureRegion = new TextureRegion(terrain);
inputProcessor = new CharacterProcessor();
Gdx.input.setInputProcessor(inputProcessor);
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.disableBlending();
batch.draw(background, 0, 0, 800, 480);
batch.enableBlending();
// let's draw ground image
batch.draw(groundTextureRegion, backgroundPos, 0, 800, 100);
if ( backgroundPos + 800 > 0 && backgroundPos + 800 < 800){
batch.draw(groundTextureRegion, backgroundPos + 800, 0, 800, 100);
}
// let's draw player
inputProcessor.getPlayer().getCharacterSprite().draw(batch);
batch.end();
updateScene();
}
private void updateScene(){
float deltaTime = Gdx.graphics.getDeltaTime();
backgroundPos -= 200 * deltaTime;
if ( backgroundPos <= -800 ){
backgroundPos = 0;
}
}
}
์ฐ์ create()์์๋ ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํด์ฃผ์์ต๋๋ค.
render()์์๋ ๋ฟ๋ ค์ฃผ๋ ๊ฒ์ ๋ด๋นํ๋๋ฐ ๊ฒ์์ด ์คํ๋๋๋์ ๋์์์ด ํธ์ถ๋๋ ๋ฉ์๋์ธ๊ฒ ๊ฐ์ต๋๋ค.
enableBlending์ผ๋ก ๋ฐฐ๊ฒฝ(sky2.jpg)์์ ๋ (grey_stone_1.png)๊ณผ ์ผ๋ฆญํฐ(player.png)๋ฅผ ๊ทธ๋ฆด ์ ์๋๋ก ํด์ฃผ์์ต๋๋ค.
๋ ์ ๊ทธ๋ฆด๋๋ batch.draw()์์ TextureRegion์ ์ด์ฉํ๊ณ , ์ผ๋ฆญํฐ๋ Sprite.draw๋ฅผ ์ด์ฉํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ์ ๊ทธ๋ฆด๋ ๋ ์ด ์ข์ธก์ผ๋ก ๊ณ์ ์ด๋ํ๋ฉด์ ๋ง์น ์ผ๋ฆญํฐ๊ฐ ์ฐ์ธก์ผ๋ก ์ด๋ํ๋๊ฒ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ค ์ ์๋๋ก ํด๋ณด์์ต๋๋ค.
updateScene()์์ ๊ทธ ํจ๊ณผ๋ฅผ ์ค ์ ์๋๋ก backgroundPos ( ๋ ๊ทธ๋ฆผ์ด ๋ฟ๋ ค์ง ์์น )๋ฅผ ๋ณ๊ฒฝํด์ฃผ๊ณ ์์ต๋๋ค.
์, ๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ํ๋ฉด ํ์ดํ๋ฅผ ๊ณ์ ๋๋ฅด๊ณ ์์ด๋ ํ๋ฒ ๋ฐ์ ์์ง์ด์ง ์์ต๋๋ค.
์ด๋ถ๋ถ์ ๋ํด์๋ ๋ค์ ํฌ์คํ ์์ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์๋ ค๋๋ฆฌ๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ทธ๋ผ ์ค๋๋ ์ฆํํ์๊ธธ ~ ^-^
์ง๊ธ๊น์ง libGDX๋ฅผ ๋ ํํ๊ณ ์๋ ์ผ์ด์น์์ต๋๋ค~
P.S : ๋์์ด ๋์ จ์ผ๋ฉด ๋๊ธ ํ๋ ๋จ๊ฒจ์ฃผ์ธ์ ^-^
[[ ์๋ณธ ์ด๋ฏธ์ง ํ์ผ์ฒจ๋ถ ]]