• [플밍] 프로그래밍 switch문 질문.2012.08.02 AM 01:06

게시물 주소 FONT글자 작게하기 글자 키우기

루리웹에 은근히 플밍 고수들 많으신거 같은데 도와주세요~

일단 언어는 c++인데 대부분 switch문은 비슷하니 상관 없을듯.

제가 하고자 하는게
키를 누르면 -> 그 키에 관한 bool값이 1이 되서 -> 캐릭터가 그것을 받아들이고 움직여야 하는데요.
키를 누르는 것을 확인할 때 스위치 문을 썼더니 상수가 아니라고 난리칩니다.
상수쓰면 상관 없긴 하는데, 나중에 옵션을 이용해서 조작키를 바꿀거라서 가능하면 변수가 먹히도록 하고싶어요.

제가 설명을 못해서 걍 코드 첨부.

//문제없는거
inline void keyDown(SDLKey i)
{
switch (i)
{
case SDLK_RIGHT : -nput.ri[0] = 1; break;
case SDLK_LEFT : -nput.le[0] = 1; break;
case SDLK_UP : -nput.up[0] = 1; break;
case SDLK_DOWN : -nput.dn[0] = 1; break;
}
}
좌측의 SDLK_~~은 SDL라이브러리에 정의된 상수입니다. 특정 키를 누르면 -nput내부의 대응키가 1로 바뀜.

//문제있는거
inline void keyDown(SDLKey i)
{
switch (i)
{
case -nputoption.ri[0] : -nput.ri[0] = 1; break;
case -nputoption.le[0] : -nput.le[0] = 1; break;
case -nputoption.up[0] : -nput.up[0] = 1; break;
case -nputoption.dn[0] : -nput.dn[0] = 1; break;
}
}
좌측의 -nputoption은 미리 지정해 놓은 키 값인데요, 이걸 나중에 옵션에서 변화시킬거라서 변수입니다.
근데 switch문은 상수만 먹어요. 즉 안됩니다.
이부분을 '빠르게' 어떻게 비슷하게 구현할 수 있을까요?
격투게임 만들거라서 시간이 굉장히 중요합니다;;

능력자분들 부탁드려요~
댓글 : 15 개
if-else 쓰셈 ...
변수로는 안되요 상수여만합니다.
스위치문에서는 조건문안의 값이 정확하게 나와야 되는데 결과값이 변수이면 컴파일러가 못알아 먹어요
쏘류//
최소한 사용하는 키가 abcdef 하고 up down left right select start 12개에다
2인용하면 2배인 24개인걸요;
매 프레임마다 확인하면 느릴 거 같은데;
컴파일러느님이 알아서 다 해줌요
switch 쓰나 if-else 1000개 쓰나 결과물은 똑같음요
  • V1046
  • 2012/08/02 AM 01:20
쏘류님말씀에 격히동감.....
쏘류// ?! 컴파일러느님은 대단하군요. 해보겠습니다.
const int로 쓰시면 되지 않나요?
머... 그러면 -nputoption.ri[0] 값을 수정하지 못한다는 문제점이 있지만^^;
그게 아니면 if문이 답일듯 하네요
if( ) { }
else if ( ) { }
else if ( ) { }
...
else{ }
이거 말하시는거죠?
switch문이나 if문이나 거기서 거기..
ㅇㅇ
생각보다 답변이 빠르네요 ㄷㄷ
요즘 컴파일러들은 알아서 척척척...
하지만 콘솔게임쪽 같은걸 개발하실려면 컴파일러의 특성이 다 다르니 유의 하시길.
도와주신 분들 모두 감사합니다~
완성되면 한번 루리웹 올려볼게요.
문항 자체가 i 값이 무엇인가? 라는 건데
i 값을 변수랑 비교할 필요가 있나요?
일단 i값을 변수에 저장한 값과 같은지 비교를 하고
나머지 처리를 하시는게 나을듯 합니다.
ex>-nputoption.ri[0] 이 SDLK_RIGHT 일때
switch(i)
{
case SDLK_RIGHT :
-nput.ri[0] = 1;
//-nputoption.ri[0]을 변화시킨다면
if(i == -nputoption.ri[0])
-nputoption.ri[0] = SDLK_LEFT;
break;
.
.
.
.
친구글 비밀글 댓글 쓰기