SHOW:
|
|
- or go back to the newest paste.
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 */ |