막장

[액알용] 4방향 이동 / 대쉬 플래그 코드 모음

by 시트르산 posted Nov 29, 2010
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

// 캐릭터의 스테이트를 정의 //
void Char_State(Base_Character &chara)
{
 if (!chara.isJumpEnd);
 else if (KEY_DOWN(VK_SPACE)) // 스페이스 키 : 점프
 { chara.state = JUMP;   
  if (KEY_DOWN(VK_RIGHT)) chara.state = JUMP_RIGHT;  // 동시에 눌린 경우 : 우방점프
  else if (KEY_DOWN(VK_LEFT)) chara.state = JUMP_LEFT; // 동시에 눌린 경우 : 좌방점프
  Last_Frame_Jump = Frame; chara.isJumpEnd = false;} //점프 시도한 프레임을 저장.(lastframejump)
 else if (KEY_DOWN(VK_RIGHT)) // 오른쪽 화살표 키
 { chara.state = MOVE_RIGHT; chara.Way_4 = MOVE_RIGHT;
  if (chara.isMoveRightEnd) { chara.isMoveRightEnd = false; if (!chara.isDash) chara.Last_Frame_Move_RIGHT = Frame; }
  if (KEY_DOWN(VK_SPACE))  chara.state = JUMP_RIGHT;}
 else if (KEY_DOWN(VK_LEFT) )  // 왼쪽 화살표 키
 { chara.state = MOVE_LEFT; chara.Way_4 = MOVE_LEFT;
  if (chara.isMoveLeftEnd) { chara.isMoveLeftEnd = false; if (!chara.isDash)  chara.Last_Frame_Move_LEFT = Frame; }
  if (KEY_DOWN(VK_SPACE))  chara.state = JUMP_LEFT; }
 else { chara.state = NONE; chara.isDashEnd = true; chara.isMoveRightEnd = true; chara.isMoveLeftEnd = true; }// chara.Speed = 3;
 
 // 대쉬시 스피드. 수정요망 //
 if (!chara.isDashEnd) chara.Speed = 5; else chara.Speed = 2;
 
 // 대쉬플래그 세우기 (우로) : 한번 우키 입력 / 끊김 / 20프레임내 다시 입력 //
 if (chara.Last_Frame_Move_RIGHT > 0) // 만약 라스트 프레임이 0보다 크다면!
 { if (Frame - chara.Last_Frame_Move_RIGHT >= 1 && Frame - chara.Last_Frame_Move_RIGHT <= 6) 
  if (!KEY_DOWN(VK_RIGHT)) //만약 프레임차이가 20보다 작을때 오른쪽 키가 안눌려졌다
  chara.isDash = true;  //그러면 대쉬 플래그가 선다 
  if (chara.isDash)   // 안눌려진 후 12프레임 안에 다시 눌렸을때 그리고 다시 안눌렸을때 플래그 조절
  { if (Frame - chara.Last_Frame_Move_RIGHT <=12) 
  { if (KEY_DOWN(VK_RIGHT)) { chara.isDashEnd = false; chara.isDash = false; chara.Last_Frame_Move_RIGHT = 0;} }
   else {chara.isDash = false; chara.isDashEnd = true; chara.Last_Frame_Move_RIGHT = 0;} }
 }

 // 대쉬플래그 세우기 (좌로) : 한번 좌키 입력 / 끊김 / 20프레임내 다시 입력 //
 if (chara.Last_Frame_Move_LEFT > 0) // 만약 라스트 프레임이 0보다 크다면!
 { if (Frame - chara.Last_Frame_Move_LEFT >= 1 && Frame - chara.Last_Frame_Move_LEFT <= 6) 
  if (!KEY_DOWN(VK_LEFT)) //만약 프레임차이가 20보다 작을때 오른쪽 키가 안눌려졌다
  chara.isDash = true;  //그러면 대쉬 플래그가 선다 
  if (chara.isDash)   // 안눌려진 후 12프레임 안에 다시 눌렸을때 그리고 다시 안눌렸을때 플래그 조절
  { if (Frame - chara.Last_Frame_Move_LEFT <=12) 
  { if (KEY_DOWN(VK_LEFT)) { chara.isDashEnd = false; chara.isDash = false; chara.Last_Frame_Move_LEFT = 0;} }
   else {chara.isDash = false; chara.isDashEnd = true; chara.Last_Frame_Move_LEFT = 0;} }
 }
}

 

 

// 캐릭터 초기화 //
void Init_Char(Base_Character &chara)
{
   chara.positionX = 0;  chara.positionY = 0; chara.Speed = 2;   chara.isCols = false;
   chara.Large_X = 23;  chara.Large_Y = 32; chara.Way_4 = MOVE_RIGHT; chara.state = NONE;
   chara.isMove = false; chara.isDash = false; chara.isJumpEnd = true;  chara.isMoveRightEnd = true;
   chara.isMoveLeftEnd = true;     chara.isDashEnd = true;
   chara.STREN = 5;   chara.INDUR = 4;  chara.VITAL = 5;  chara.LEVEL = 1;
   chara.EXP = 0;   chara.HP = 100;  chara.MP = 50;
   chara.ATK = chara.STREN*10; chara.DEF = chara.INDUR*10; chara.SPI = 10;
   chara.Last_Frame_Move_LEFT = 0; chara.Last_Frame_Move_LEFT = 0;
}

// 무기에 대한 정보 //
void Init_Weapon(Base_Weapon &weapon)
{
 weapon.Attack_Range_X = 0; weapon.isSwing = 0; weapon.positionX = 0; weapon.positionY = 0;
 weapon.Speed = 0;   weapon.state   = 0;
}

// 적에 대한 정보 //
void Init_Enemy(Base_Enemy &enem) // 적1
{
   enem.positionX = (VGfloat)Full_Screen_X-300;  enem.positionY = 0; enem.Speed = 2;    enem.isCols = false;
   enem.Large_X = 23;  enem.Large_Y = 32;  enem.Way_4 = MOVE_RIGHT; enem.state = NONE;
   enem.isMove = false;  enem.isDash = false; enem.isJumpEnd = true;  enem.isDmgdEnd = true;
   enem.STREN = 5;   enem.INDUR = 4;  enem.VITAL = 5;  enem.LEVEL = 1;
   enem.EXP = 0;   enem.HP = 100;   enem.MP = 50;
   enem.ATK = enem.STREN*10; enem.DEF = enem.INDUR*10; enem.SPI = 10;
}

void Init_Enemy_2(Base_Enemy &enem) // 적2
{
   enem.positionX = (VGfloat)Full_Screen_X-220;  enem.positionY = 0; enem.Speed = 2;    enem.isCols = false;
   enem.Large_X = 23;  enem.Large_Y = 32;  enem.Way_4 = MOVE_RIGHT; enem.state = NONE;
   enem.isMove = false;  enem.isDash = false; enem.isJumpEnd = true;  enem.isDmgdEnd = true;
   enem.STREN = 5;   enem.INDUR = 4;  enem.VITAL = 5;  enem.LEVEL = 1;
   enem.EXP = 0;   enem.HP = 100;   enem.MP = 50;
   enem.ATK = enem.STREN*10; enem.DEF = enem.INDUR*10; enem.SPI = 10;
}

// 충돌체크 //
bool Check_Cols_Fscreen(Base_Character &chara) // 전체화면 충돌 체크
{ if (chara.positionX > Full_Screen_X-50) {chara.isCols = true;}
 else if (chara.positionX < 0)   {chara.isCols = true;}
 return chara.isCols;
}
// 충돌 체크 //
VGfloat  Cols_Fscreen_Solve(VGfloat positionX, bool isCols)
{ return positionX; }

 

Who's 시트르산

?

제작중인 게임 :

Midnight Blue  (미드나잇 블루) - RPGXP

 공동제작 : 휘파람개비님

 시스템 : 45%, 스토리 : 10%, 맵 : 3%, 제작 : 1%

 CG : 2%         총 진행도 : 3%

 

 이번 게임은 공동제작인 만큼 최선을 다하겠습니다 ^^

기다려주세요~~