티스토리 뷰
반응형
//////////////////////////////objectHero.h////////////////////////////
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #pragma once #include "Header.h" #include "Object.h" class ObjectHero : public Object { protected: CGPoint m_SrcPos;//소스의 위치 CGSize m_SrcSize; //소스의 사이즈 CGSize m_OffSet; int m_iState;//상태 값 int m_nframe; float m_fFrameTime; // 애니메이션 해야하니까. float m_fSpeed; float m_fUpPower; float m_fGravity; int m_iJumpState; int m_PreviState; bool m_bReFire;// pos.x = m_fSpeed * dt; public : virtual bool init(HBITMAP _res); virtual void render(); virtual void tick(float dt); void action(float dt); //액션에 대한갱신 함수 void animation(float dt); // 애니메이션에 대한 갱신 함수 }; |
/////////////objecthero.cpp///////////////////
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | #include "ObjectHero.h" #include "Object.h" #include "Header.h" #include "ST.h" #include "BulletManager.h" bool ObjectHero::init( HBITMAP _res) { Object::init( _res); m_SrcSize = MakeSize (53,144); m_SrcPos = MakePoint (0, 10); m_nframe =0; m_fFrameTime = 0;//초기화 안해주면 멈춤 m_fSpeed = 300; //캐릭터 이동 속도 값 framespeed m_iState = STAND; m_iDerection = 0; m_fUpPower = 600.0f; m_fGravity = 1500.0f; m_iJumpState = JUMP_IDLE; m_PreviState =STAND; m_bReFire =FALSE; return true; } void ObjectHero::render() { HDC m= ST::call()->m_hMemDC; HDC b = ST::call()->m_hBackDC; HBITMAP bit = (HBITMAP)SelectObject(m, m_hResource); ////////////////////////////////////////////////////마스크값///////////////////////////////////////////// BitBlt(b, m_Position.x+m_OffSet.width, m_Position.y+m_OffSet.height+m_fZ, //그릴위치 pos.x, pos.y //object.h에 있는 m_position의 x,y좌표 변경 m_SrcSize.width, m_SrcSize.height, // 그릴 크기 msrcsize.width, msrcsize.height m, // 소스가 있는 DC m_SrcPos.x+m_SrcSize.width*m_nframe, m_SrcPos.y+m_SrcSize.height, // 그릴 그림이 있는 위치 m_srcPos.x, m_srcPos.y pos.x+size.width *m_nFrame. SRCAND); // 그리기 방식 ///////////////////////////////////////////////메인페인트 값////////////////////////////////////// BitBlt(b, m_Position.x+m_OffSet.width, m_Position.y+m_OffSet.height+m_fZ, //그릴위치 pos.x, pos.y //object.h에 있는 m_position의 x,y좌표 변경 m_SrcSize.width, m_SrcSize.height, // 그릴 크기 msrcsize.width, msrcsize.height m, // 소스가 있는 DC m_SrcPos.x+m_SrcSize.width*m_nframe, m_SrcPos.y, // 그릴 그림이 있는 위치 m_srcPos.x, m_srcPos.y pos.x+size.width *m_nFrame. SRCPAINT); // 그리기 방식 SelectObject(m, bit); } void ObjectHero::tick(float dt) // 움직임 업데이트. { this->action(dt); this->animation(dt); } void ObjectHero::action(float dt) { CGPoint pos = this->getPostion(); static bool bKeyPress = FALSE; if(GetAsyncKeyState('C') && bKeyPress == FALSE) { m_iState = FIRE; m_bReFire = TRUE; bKeyPress = TRUE; } else if(!GetAsyncKeyState('C')) bKeyPress = FALSE; if(m_iState != FIRE) { if(m_iState != JUMP) m_iState = STAND; if( GetAsyncKeyState(VK_LEFT) ) { pos.x--; if(m_iState != JUMP) m_iState = WALK; m_iDerection =VK_LEFT; } if( GetAsyncKeyState(VK_RIGHT) ) { pos.x++; if(m_iState != JUMP) m_iState = WALK; m_iDerection = VK_RIGHT; } if( GetAsyncKeyState(VK_UP) ) { pos.y--; if(m_iState != JUMP) m_iState = WALK; } if( GetAsyncKeyState(VK_DOWN) ) { pos.y++; if(m_iState != JUMP) m_iState = WALK; } if(GetAsyncKeyState('Z')) //jump 돌입. { m_iState = JUMP; } if(GetAsyncKeyState('X') ) { m_iState =ATTACK; } this->setPosition(pos); } //좌표값을 cgpoint pos = this->getPostion(); //if(getasynckeystate())로 가져와서 x++등 좌표수정, state상태 변경 해줌. // 이걸 main으로 보내버림. //폭과 넓이가 변경되면 변수로 받아서 처리한다. (그릴 크기에) // 헤더에 struct size로 만든다. float width, height, , 메이크 포인트 같이 함수로 만들어서 cpp에서 처리 할 것. // } void ObjectHero::animation(float dt) { if(m_iState != m_PreviState) { m_PreviState = m_iState; m_nframe = 0; } switch(m_iState) { case STAND: { m_SrcPos = ccp((m_iDerection == VK_RIGHT ? 0 :610), 10); m_SrcSize= cgs(54, 144); m_OffSet = cgs( -m_SrcSize.width/2, -m_SrcSize.height); int maxFrame = 3; m_fFrameTime += dt; // 프레임타임이 있는 이유 : 프레임이 넘어가기까지 걸리는 시간 을 계속 dt에서 받아와서 누적함. dt는 더 작은 숫자임. if( m_fFrameTime > 0.2f ){ // 걸리는 시간이 0.2f보다 크면, m_fFrameTime = 0.f; // 프레임다시 초기화. m_nframe++; //프레임이 넘어가게 함. } if( m_nframe > maxFrame ) m_nframe = 0; //프레임 장수가 넘어가면 프레임 다시 초기화. break; } case WALK: { m_SrcPos = ccp((m_iDerection == VK_RIGHT ? 0 :610), 310); m_SrcSize= cgs(75, 143); m_OffSet = cgs( -m_SrcSize.width/2, -m_SrcSize.height); int maxFrame = 7; m_fFrameTime += dt; if( m_fFrameTime > 0.1f ){ m_fFrameTime = 0.f; m_nframe++; } if( m_nframe > maxFrame ) m_nframe = 0; break; } case ATTACK : { m_SrcPos = ccp(0, (m_iDerection == VK_RIGHT ? 1300:1600)); m_SrcSize= cgs(169, 130); int maxFrame = 4; m_fFrameTime += dt; if( m_fFrameTime > 0.1f ){ m_fFrameTime = 0.f; m_nframe++; } if( m_nframe > maxFrame ) m_nframe = 0; break; } case JUMP: { m_SrcPos = ccp((m_iDerection == VK_RIGHT ? 0 :610), 610); //그림 위치 지정 m_SrcSize= cgs(85, 135); // 몇 씩 읽어들일건지? m_OffSet = cgs( -m_SrcSize.width/2, -m_SrcSize.height); // offset 지정 if(m_iJumpState != JUMP_IDLE && m_iJumpState != JUMP_END) // 점프상태에서만 증가시켜야 한다. { m_fZ -= m_fUpPower *dt; //z축을 uppower * dt 만큼 누적 m_fUpPower -= m_fGravity * dt; //업파워를 중력만큼 감소시킨다. } if(m_fUpPower > 0 ) m_iJumpState = JUMP_UP; // 업파워가 0보다 크면 점프 상태니까 jump up else m_iJumpState = JUMP_DOWN; // 아닌경우 내려오는 상태 if(m_fUpPower < -600) m_iJumpState = JUMP_END; //-600인 경우 초기값의 반대이기 때문에 점프상태가 끝났다. m_fFrameTime += dt; //프레임 타임 증가. switch(m_iJumpState) //점프 상태 판단 { case JUMP_IDLE: //점프 준비 상태 { if(m_fFrameTime > 0.01f) { m_fFrameTime =0.f; m_iJumpState = JUMP_UP; // 점프 업 } break; } case JUMP_UP : //올라가는 그림 그리기. { if(m_fFrameTime >0.1f) m_nframe =1; if(m_fFrameTime >0.2f)m_nframe =2; if(m_fFrameTime >0.3f) m_fFrameTime = 0.f; break; } case JUMP_DOWN: // 내려오는 그림 그리기. { if(m_fFrameTime >0.1f) m_nframe =3; if(m_fFrameTime >0.2f)m_nframe =4; if(m_fFrameTime >0.3f) m_fFrameTime = 0.f; break; } case JUMP_END: // 내려와서 서있는 모습. { if(m_fFrameTime >0.1f) m_nframe =5; if(m_fFrameTime >0.2f)m_nframe =6; if(m_fFrameTime >0.3f) m_fFrameTime = 0.f; //////////다시 초기화//////////// m_iState = STAND; m_iJumpState = JUMP_IDLE; m_fUpPower = 600.0f; m_fZ = 0.f; break; } } break; } case FIRE: { m_SrcPos = ccp((m_iDerection == VK_RIGHT ? 0 :610), 910); m_SrcSize= cgs(122, 155); m_OffSet = cgs((m_iDerection == VK_RIGHT ? -40 : -100), -m_SrcSize.height); m_fFrameTime += dt; if(m_fFrameTime > 0.1f) m_nframe = 0; if(m_fFrameTime > 0.15f) m_nframe = 1; if(m_fFrameTime > 0.2f && m_fFrameTime<0.25f) { if(m_bReFire == true) { BulletManager::sharedManager()->createBullet((this->getPostion()), (this->getDirection())); CGPoint pos = this->getPostion(); pos.x+= m_iDerection == VK_RIGHT? -70 :90; m_bReFire = FALSE; } //만약refire가 true면 진입, refire는 false로. bulletmanager->shaerdmanage(r()->createbullet(this->getposition, this->getdirection()); //cgpoint pos = this->getpositon(); // pos.x += m_idirection == vk_right? -70:90; m_nframe = 2; } if(m_fFrameTime > 0.25f) m_nframe = 3; if(m_fFrameTime > 0.3f){ m_nframe = 4; if(m_bReFire == TRUE) m_fFrameTime = 0.21f; } if(m_fFrameTime > 0.35f) { m_iState = STAND; } break; } } } |
반응형
'API > DF.project' 카테고리의 다른 글
scenetower.h & scenetower.cpp (0) | 2014.10.09 |
---|---|
bulletmanager.h & bulletmanager.cpp (0) | 2014.10.09 |
Scene.h & Scene.cpp (0) | 2014.10.09 |
objectbullet.h & objectbullet.cpp (0) | 2014.10.09 |
object.h & object.cpp (0) | 2014.10.09 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 정규식 특수문자
- IntelliJ #gradle #tomcat #spring #springmvc
- JSON파싱
- JSON
- 공백찾기
- Failed to load resource: the server responded with a status of 404 (Not Found)
- no getter for property named
- poi 엑셀
- JSON날짜
- Regex
- 엑셀다운로드
- 계좌번호정규식
- select제어
- 정규식 한글만
- POI EXCEL
- 정규식 숫자만
- poi
- 정규식
- selectbox
- spring 엑셀
- Spring
- mybatis
- PageNotFound - No mapping for GET
- ''찾기
- js
- 인텔리제이
- 이메일 정규식
- spring error #
- SpringXmlModelInspection
- jQuery
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함