Your SlideShare is downloading. ×
0
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Present delegate-state
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Present delegate-state

91

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
91
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Delegate  pa)ern   State  pa)ern Giang  Minh
  • 2. Outline •  Delegate   –  Bài  toán,  vấn  đề   –  Giới  thiệu  delegate  và  áp  dụng   –  Các  trường  hợp  nên  sử  dụng   •  State   –  Bài  toán  thực  tế     –  Vấn  đề  khi  giải  quyết  bằng  phương  pháp  thông   thường   –  Các  giải  quyết  với  state  
  • 3. Bài toán •  Slidemenu
  • 4. Bài toán •  Slidemenu
  • 5. Bài toán •  Slidemenu
  • 6. Bài  toán •  Vấn  đề   –  Cùng  một  dạng  nhưng  được  lặp  lại   •  Có  một  vài  hành  vi  khác  nhau   •  Thông  thường   –  Dư  thừa  code   –  Không  sử  dụng  lại  được  code
  • 7. Delegate pattern •   
  • 8. Hoàn cảnh sử dụng •  Giảm  thiểu  sự  móc  nối  các  func^on  giữa  các   class   •  Có  những  thành  phần  cố  định   –  Nhưng  hành  vi  thay  đổi  tuỳ  ngữ  cảnh
  • 9. Nhận xét •  Điểm  mạnh   –  Reuse   –  Mềm  dẻo   •  Điểm  yếu   –  Tốn  công   –  Khi  cần  phản  hồi  đến  nhiều  delegator
  • 10. Bài toán 2 •  Nhân  vật  trong  game  có  hành  động   –  Nhảy  khi  ấn  phím  B
  • 11. Bài toán 2 •  Nhân  vật  trong  game  có  hành  động   –  Nhảy  khi  ấn  phím  B void  Heroine::handleInput(Input  input)   {      if  (input  ==  PRESS_B)      {          yVelocity_  =  JUMP_VELOCITY;          setGraphics(IMAGE_JUMP);      }   }  
  • 12. Bài toán 2 •  Nhân  vật  trong  game  có  hành  động   –  Nhảy  khi  ấn  phím  B   void  Heroine::handleInput(Input  input)   {      if  (input  ==  PRESS_B)      {          yVelocity_  =  JUMP_VELOCITY;          setGraphics(IMAGE_JUMP);      }   }   –  Vấn  đề????
  • 13. Sửa bug1 void  Heroine::handleInput(Input  input){      if  (input  ==  PRESS_B){          if  (!isJumping_){              isJumping_  =  true;              //  Jump...          }   •  -­‐>  OK   •  Muốn  thêm  động  tác  ngồi???  
  • 14. Thêm  trạng  thái •  Thêm  if   void  Heroine::handleInput(Input  input){      if  (input  ==  PRESS_B)  {          //  Jump  if  not  jumping...      }  else  if  (input  ==  PRESS_DOWN){          if  (!isJumping_)        {              setGraphics(IMAGE_DUCK);          }      }    else  if  (input  ==  RELEASE_DOWN)    {          setGraphics(IMAGE_STAND);      }   } •  Any  problem??
  • 15. Thêm  trạng  thái •  Thêm  if   void  Heroine::handleInput(Input  input){      if  (input  ==  PRESS_B)  {          //  Jump  if  not  jumping...      }  else  if  (input  ==  PRESS_DOWN){          if  (!isJumping_)        {              setGraphics(IMAGE_DUCK);          }      }    else  if  (input  ==  RELEASE_DOWN)    {          setGraphics(IMAGE_STAND);      }   }     •  Any  problem??   –  Ngồi  -­‐>  ấn  nhảy,  thả  phím  down  -­‐>  đứng  dậy  trên   không
  • 16. Sửa bug2 •  Thêm  checker   void  Heroine::handleInput(Input  input){      if  (input  ==  PRESS_B)    {          if  (!isJumping_  &&  !isDucking_)        {              //  Jump...          }      }    else  if  (input  ==  PRESS_DOWN)    {          if  (!isJumping_)        {              isDucking_  =  true;              setGraphics(IMAGE_DUCK);          }      }    else  if  (input  ==  RELEASE_DOWN)    {          if  (isDucking_){              isDucking_  =  false;              setGraphics(IMAGE_STAND);          }      }   }  
  • 17. Thêm chức năng •  Tấn  công  khi  đang  nhảy  và  ấn  DOWN  
  • 18. Thêm chức năng •  Tấn  công  khi  đang  nhảy  và  ấn  DOWN   •  Đặt  bom  khi  ngồi  lâu   •  …………………    
  • 19. Thêm chức năng •  Tấn  công  khi  đang  nhảy  và  ấn  DOWN   •  Đặt  bom  khi  ngồi  lâu   •  …………………   •  -­‐>  quá  nhiều  checker,  flag,  countdown  
  • 20. Finite State machine •  a
  • 21. Finite state machine •  Enum  +  if   enum  State   {      STATE_STANDING,      STATE_JUMPING,      STATE_DUCKING,      STATE_DIVING   }; void  Heroine::handleInput(Input  input)   {      switch  (state_)      {          case  STATE_STANDING:              if  (input  ==  PRESS_B)              {                  state_  =  STATE_JUMPING;                  yVelocity_  =  JUMP_VELOCITY;                  setGraphics(IMAGE_JUMP);              }              else  if  (input  ==  PRESS_DOWN)              {                  state_  =  STATE_DUCKING;                  setGraphics(IMAGE_DUCK);              }              break;   …………………………………
  • 22. Finite state machine •  Enum  +  if   enum  State   {      STATE_STANDING,      STATE_JUMPING,      STATE_DUCKING,      STATE_DIVING   }; void  Heroine::handleInput(Input  input)   {      switch  (state_)      {          case  STATE_STANDING:              if  (input  ==  PRESS_B)              {                  state_  =  STATE_JUMPING;                  yVelocity_  =  JUMP_VELOCITY;                  setGraphics(IMAGE_JUMP);              }              else  if  (input  ==  PRESS_DOWN)              {                  state_  =  STATE_DUCKING;                  setGraphics(IMAGE_DUCK);              }              break;   ………………………………… Ø  Số  lượng  state  tăng   Ø  Mỗi  state  có  dữ  liệu  riêng   l  Countdown   l  Timing
  • 23. State  pa)ern •  Mỗi  state  được  implement  riêng   •  State  <  -­‐-­‐  >  Behavior   •  StateInterface class  HeroineState   {   public:      virtual  void  handleInput(Heroine&  heroine,  Input  input)  {}      virtual  void  update(Heroine&  heroine)  {}      virtual  void  enter(Heroine&  heroine){}   };
  • 24. class  DuckingState  :  public  HeroineState{   public:      DuckingState()    :  chargeTime_(0)    {}        void  handleInput(Heroine&  heroine,  Input  input)  {          if  (input  ==  RELEASE_DOWN)        {              //  Change  to  standing  state...              heroine.setGraphics(IMAGE_STAND);          }      }      void  update(Heroine&  heroine)  {          chargeTime_++;          if  (chargeTime_  >  MAX_CHARGE){              heroine.superBomb();          }      }   private:      int  chargeTime_;   };
  • 25. class  Heroine   {   public:      void  handleInput(Input  input)      {          state_-­‐>handleInput(*this,  input);      }        void  update()      {          state_-­‐>update(*this);      }          void  sw^chState(HeroineState*  new_state)      {          state_    =    new_state;          state_-­‐>enter  (*this);      }            //  Other  methods...   private:      HeroineState*  state_;   };
  • 26. Các  state  khác •  Standing,  Jumping,  DivingState
  • 27. Hoàn cảnh sử dụng •  Hành  vi  phụ  thuộc  vào  một  vài  trạng  thái  của   object   •  Phân  chia  được  hoạt  động  của  object  ra   những  state  khác  biệt,  cụ  thể   •  Object  phản  hồi  theo  những  chuỗi  input  hoặc   sự  kiện
  • 28. Nhận xét •  Thêm  state  dễ  dàng   –  Sơ  đồ  chuyển  trạng  thái   –  Tách  rời  các  state   •  Quản  lý  giữa  các  state  rõ  ràng   –  Bỏ  flag,  checker….
  • 29. THẢO  LUẬN
  • 30. Thực hành •  Nhân  vật  có  3  trạng  thái   –  Đứng   –  Chạy  chậm   –  Chạy  nhanh   •  KeyboardDelegate   •  StatePa)ern  

×