Advertisement
Guest User

Untitled

a guest
Mar 5th, 2015
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. /*
  2. * Fragmenty kodu pochodzą z mojej gry Square ( https://github.com/sheadovas/SQUARE/blob/master/Player.cpp )
  3. */
  4.  
  5. /* Mi przychodzą do głowy 2 pomysły, a raczej 1 pomysł, który zrobiłem i 2 możliwe jego rozwiązania.
  6. * 1. najbardziej trywialny, czyli wykrywasz blok:
  7. */
  8. if(level->field[posY][posX].f_type == FT::Button_on)
  9. {
  10. // i zmieniasz jego wszystkie wartości ręcznie:
  11.  
  12. level->field[posY][posX].f_type = FT::Button_off;
  13.  
  14. level->field[p.second.y][p.second.x].f_type = FT::None;
  15. level->field[p.second.y][p.second.x].isTrap = false;
  16. level->field[p.second.y][p.second.x].isWall = false;
  17. }
  18.  
  19.  
  20. /* 2. zakłada na dokładnie tym samym, lecz przydaje się gdy masz więcej zmieniających się w ten sposób typów bloków i wtedy jest bardziej wygodny i czytelny */
  21.  
  22. // w klasie level tworzymy sobie nową metodę
  23. void Level::changeTileTo(Vector2i pos, FT /* enum typu bloku */ newType)
  24. {
  25. // pos to pozycja bloku, który chcemy zmienić
  26. // newType to nowy typ bloku, np u ciebie jeżeli gracz wejdzie na DOOR_OPEN i chcemy zmienić je na zamknięte
  27. // to newType będzie wynosił DOOR_CLOSED
  28.  
  29. // zmieniamy wartości na odpowiednio, można to jakoś sobie to zautomatyzować
  30. field[pos.y][pos.x].f_type = ... ;
  31. field[pos.y][pos.x].isTrap = ... ;
  32. field[pos.y][pos.x].isWall = ... ;
  33. }
  34.  
  35.  
  36. // wracamy do if'a gdzie sprawdzamy jaki typ bloku
  37. if(level->field[posY][posX].f_type == FT::Button_on)
  38. {
  39. level->changeTileTo(Vector2i(posX,posY), FT::Button_off);
  40. }
  41.  
  42. /* Zakładam, że przed każdym rysowaniem aktualizujesz kafelki z Level */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement