์•ˆ๋…•ํ•˜์„ธ์š”~์ผ€์ด์น˜์ž…๋‹ˆ๋‹ค~

 ๋ฐฉ๊ธˆ ์ „์— ํฌ์ŠคํŒ… ํ–ˆ์—ˆ๋Š”๋ฐ ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๋Š๊ณ  ๋˜ ํฌ์ŠคํŒ…ํ•˜๋„ค์š” ใ…Žใ…Ž


์ง€๋‚œ ์‹œ๊ฐ„์—๋Š” ๋ฐฐ๊ฒฝํ™”๋ฉด ๋„ฃ๊ณ  ๋•…๋„ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์ผ€๋ฆญํ„ฐ๋„ ๋„ฃ์–ด์„œ ์›€์ง์—ฌ๋ดค์Šต๋‹ˆ๋‹ค.


๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜์žˆ์—ˆ์ฃ ? ๋ณดํ†ต ํ™”์‚ดํ‘œ๋ฅผ ๋ˆ„๋ฅด๊ณ ์žˆ์œผ๋ฉด ๊ณ„์† ์—ฐ์†์ ์œผ๋กœ ์›€์ง์—ฌ์ค˜์•ผ ํ•˜๋Š”๋ฐ ๊ทธ๋ ‡๊ฒŒ ๋˜์ง€ ์•Š์•˜๋˜ ๊ฑฐ์ฃ .


์ž, ๊ทธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.


์šฐ์„  ์ˆ˜์ •๋œ Player ์†Œ์Šค๋ฅผ ๋ณด์—ฌ๋“œ๋ฆด๊ฒŒ์š” ~

public class Player extends Actor {

private Sprite characterSprite;

boolean leftMove;
boolean rightMove;

float x;

Player(){
characterSprite = new Sprite(new Texture("player.png"));
characterSprite.setBounds(Gdx.graphics.getWidth()/2-100, 100,
 
Gdx.graphics.getWidth()/10, Gdx.graphics.getHeight()/5);
}
public Sprite getCharacterSprite(){
return characterSprite;
}
public void updateMotion(){
if ( leftMove ){
x = characterSprite.getX() - 5;
characterSprite.setX(x);
}
if ( rightMove ){
x = characterSprite.getX() + 5;
characterSprite.setX(x);
}
}

public void setLeftMove(boolean t){
if ( rightMove && t ) rightMove = false;
leftMove = t;
}
public void setRightMove(boolean t){
if ( leftMove && t ) leftMove = false;
rightMove = t;
}
}

setLeftMove์™€ setRightMove ๊ทธ๋ฆฌ๊ณ  updateMotion์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์ƒˆ๋กœ ์ƒ๊ฒผ๋„ค์š”.


๊ทธ๋Ÿผ ์ด๋ฒˆ์—” CharacterProcess์˜ ์†Œ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ๋ณผ๊นŒ์š”??

@Override
public boolean keyDown(int keycode) {
System.out.println("keycode : " + keycode);
switch(keycode){
case 21:
player.setLeftMove(true);
break;
case 22:
player.setRightMove(true);
break;
}
return true;
}

@Override
public boolean keyUp(int keycode) {

switch(keycode){
case 21:
player.setLeftMove(false);
break;
case 22:
player.setRightMove(false);
break;
}
return true;
}

๋„ค, ์œ„ ์ฒ˜๋Ÿผ keyUp ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๊ตฌํ˜„ํ•ด์คฌ๊ณ ์š” keyDown๋ฉ”์†Œ๋“œ๋Š” ๋ญ”๊ฐ€ ๋˜๊ฒŒ ๊ฐ„๋‹จํ•ด์กŒ๋„ค์š” ๊ทธ์ตธ? ^-^


์ด๋ ‡๊ฒŒ ์ˆ˜์ •ํ•˜๋ฉด ํ‚ค ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋Š” ๋๋‚œ๊ฒ๋‹ˆ๋‹ค. ์—? ์ด๊ฒŒ ๋ญ๋ƒ๊ตฌ์š”?

ํ•œ๋ฒˆ ์†Œ์Šค๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…๋“œ๋ฆด๊ฒŒ์š” ^-^ ์ €๋Š” ์นœ์ ˆํ•œ ์ผ€์ด์น˜๋‹ˆ๊นŒ์š” ใ…Žใ…Žใ…Ž

์ž, ์ผ๋‹จ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ”๋€ CharacterProcess์—์„œ์˜ ์ฒ˜๋ฆฌ๋ถ€ํ„ฐ ํ•œ๋ฒˆ ๋ณด์‹œ์ฃ .

์™ผ์ชฝ ํ™”์‚ดํ‘œ ํ‚ค๊ฐ€ ๋ˆŒ๋ฆฌ๋ฉด

1. player.setLeftMove(true)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

2. setLeftMove(true)๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์•„๋ž˜ ๋กœ์ง์„ ๋”ฐ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

 - ๋งŒ์•ฝ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™์ค‘์ด์—ˆ๋‹ค๋ฉด rightMove๋ฅผ false๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

 - ๋ฌด์กฐ๊ฑด leftMove๋ฅผ true๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

3. ๋


์™ผ์ชฝ ํ™”์‚ดํ‘œ ํ‚ค๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋ฉด 

1. player.setLeftMove(false)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

2. setLeftMove(false)๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์•„๋ž˜ ๋กœ์ง์„ ๋”ฐ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

 - if๋ฌธ์—์„œ false์™€ && ์กฐ๊ฑด์ด ๋งž๋ฌผ๋ฆฌ๋ฉด์„œ if๋ฌธ์€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 - ๋ฌด์กฐ๊ฑด leftMove๋ฅผ false๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.


์˜ค๋ฅธ์ชฝ ํ™”์‚ดํ‘œ ํ‚ค๊ฐ€ ๋ˆŒ๋ฆฌ๊ฑฐ๋‚˜ ์˜ฌ๋ผ๊ฐ”์„ ๋•Œ๋„ ๋™์ผํ•œ ๋กœ์ง์„ ๋”ฐ๋ผ๊ฐ‘๋‹ˆ๋‹ค.


์ž, ์—ฌ๊ธฐ์„œ ํ•˜๋Š” ์ผ์€ ํ‚ค๊ฐ€ ๋ˆŒ๋ ธ์„ ๋•Œ ์ผ€๋ฆญํ„ฐ์˜ ์ด๋™์„ ๊ฒฐ์ •์ง“๋Š” boolean๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ๋งŒ ํ•˜๋Š” ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ขŒํ‘œ๋ฅผ ๋ณ€๊ฒฝํ•œ ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ  ์•„์ง ํ™”๋ฉด์— ๋ฟŒ๋ ค์ง€๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.


์ž ๊ทธ๋Ÿผ ๋ฉ”์ธ ํด๋ž˜์Šค์—์„œ๋Š” ๋ญ๊ฐ€ ์ˆ˜์ •์ด ๋๋Š”์ง€ ํ•œ๋ฒˆ ๋ณด์‹ค๊นŒ์š”?

    @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();
inputProcessor.getPlayer().updateMotion();

}


์ž, ๋ฉ”์ธ ํด๋ž˜์Šค์—์„œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์€ render()๋ฉ”์†Œ๋“œ์˜ ๋งˆ์ง€๋ง‰ ์ค„์— inputProcessor.getPlayer().updateMotion() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๊ฒŒ ๋ฌด์Šจ ๋ฉ”์†Œ๋“œ์˜€๋Š”์ง€ ์œ„์—์„œ ๋ณด์…จ๋‚˜์š”?

๊ทธ๋ƒฅ ์ง€๋‚˜์นœ ๋ถ„๋“ค์„ ์œ„ํ•ด์„œ ์•„๋ž˜ ๋‹ค์‹œ ๋ณด์—ฌ๋“œ๋ฆด๊ฒŒ์š”.


    public void updateMotion(){
if ( leftMove ){
x = characterSprite.getX() - 5;
characterSprite.setX(x);
}
if ( rightMove ){
x = characterSprite.getX() + 5;
characterSprite.setX(x);
}
}

์ด ๋ฉ”์†Œ๋“œ๋Š” ์œ„์—์„œ Playerํด๋ž˜์Šค์— ์ƒˆ๋กœ์ด ์ถ”๊ฐ€๋˜์—ˆ๋˜ ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํ•˜๋Š” ์ผ์€ Player๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š” leftMove์™€ rightMove ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์—๋”ฐ๋ผ ์ผ€๋ฆญํ„ฐ์˜ ์ขŒํ‘œ๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ ์ขŒํ‘œ๋งŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.


๊ทธ๋ฆฌ๊ณ  ๋ฉ”์ธ ํด๋ž˜์Šค์—์„œ ์ด ์ผ€๋ฆญํ„ฐ๋ฅผ ๋ฟŒ๋ฆฌ๊ณ ์žˆ์ฃ .


์ด์ œ ์ด๋ ‡๊ฒŒ ์ˆ˜์ •๋œ ์†Œ์Šค๋ฅผ ์‹คํ–‰ํ•ด๋ณด์„ธ์š”.


๋ฐฉํ–ฅํ‚ค๋ฅผ ๋ˆ„๋ฅด๊ณ ์žˆ๋Š” ๋™์•ˆ ์ผ€๋ฆญํ„ฐ๊ฐ€ ๊ณ„์† ์›€์ง์ž…๋‹ˆ๋‹ค.


์•„, ๊ทธ๋ฆฌ๊ณ  ์ „์—๋Š” ์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด์„œ ์ผ€๋ฆญํ„ฐ๊ฐ€ ์Šคํฌ๋ฆฐ์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์—†๋„๋ก ํ–ˆ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ์— ์ˆ˜์ •ํ•˜๋ฉด์„œ ๊ทธ๋ถ€๋ถ„์ด ๋น ์กŒ๋„ค์š”.


ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€์ง€๋Š” ๋ชปํ•˜๋„๋ก ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ํ•œ๋ฒˆ ์กฐ๊ฑด์„ ๋„ฃ์–ด๋ณด์„ธ์š”~~~  ^-^ ํžˆํž›~ ์ˆ™์ œ์ž…๋‹ˆ๋‹ค~~~


๊ทธ๋ฆฌ๊ณ  ์ ํ”„๊ธฐ๋Šฅ์ด๋‚˜ ๋ญ ์ด๋Ÿฐ๊ฒƒ๋“ค์„ ๋„ฃ์œผ๋ฉด ์žฌ๋ฐŒ๊ฒ ์ฃ ? ใ…‹ใ…‹


๊ทธ๋Ÿผ ์˜ค๋Š˜์€ ์ด๋งŒ ์ค„์ด๊ฒ ์Šต๋‹ˆ๋‹ค.


๊ณ„์† ์žฅ๋ง›๋น„๊ฐ€ ๋‚ด๋ฆฌ๋Š”๋ฐ ๊ณฐํŒก์ด ์กฐ์‹ฌํ•˜์‹œ๊ณ  ์ฆํ”„ํ•˜์„ธ์š”~~ ใ…‹ใ…‹


์ด์ƒ ์นœ์ ˆํ•œ ์ผ€์ด์น˜์˜€์Šต๋‹ˆ๋‹ค.