Advertisement
Guest User

Untitled

a guest
Mar 5th, 2015
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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