pekfos |
» 2024-07-15 18:42:12 Chciałbym teraz rozdzielić podłogę(parkiet, płytki etc.) od kafelków(trawa, kamienie, piasek, skały etc.). Podłoga to nie kafelki? Czy dobrym rozwiązaniem będzie stworzenie drugiego vertexarray i dynamicznie przypisywanie do niego elementów ? Czy lepiej stworzyć drugą listę statyczną i pole bez podłogi renderować jako transparent w floorset.png (tileset dla podłogi) Tak. Jeśli wiesz, że wyświetlasz niewidzialną grafikę, to lepiej tego nie robić. A jak nie wiesz, to przezroczysty kafel też załatwia sprawę. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-07-15 18:44:57 Znaczy, że zrobić drugą statyczną listę vertexArray ? Bo jakoś nie rozumiem, a sam zdecydować też się nie mogę ... |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-07-15 20:20:24 Dobra, zrobiłem statyczną drugą listę sf::vertexArray floors o rozmiarach mapy, czyli 16x16. Działa dobrze, czy to optymalne nie wiem. Ale tak zrobiłem. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-07-16 17:06:57 teraz chciałbym dodać budynki do mojej gry, które są opisywane skryptami. Skrypt jaki wygląda tak jak poniżej. Nie wiem w jaki sposób renderować i przetwarzać takie budynki. Jakiś pomysł ? Ja wymyśliłem na razie coś takiego, że budynki będą przetwarzane tak samo jak mapy i do map dodawały elementy, tylko nie wiem jak to zrobić z obecnym kodem. name "test house" texture "assets/buildings/test house.png" size 16 16
// FLOORS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0
// WALLS Wall "walls/stone_wall_top_3" 48 16 Wall "walls/stone_wall_top_3" 80 16 Wall "walls/stone_wall_top_3" 112 16 Wall "walls/stone_wall_top_3" 144 16 Wall "walls/stone_wall_bottom" 144 48 Wall "walls/stone_wall_bottom" 112 48 Wall "walls/stone_wall_bottom" 80 48 Wall "walls/stone_wall_bottom" 48 48 Wall "walls/stone_wall_top_4" 16 16 Wall "walls/stone_wall_top_2" 16 48 Wall "walls/stone_wall_top_2" 16 80 Wall "walls/stone_wall_top_2" 16 112 Wall "walls/stone_wall_top_6" 16 144 Wall "walls/stone_wall_top_3" 48 144 Wall "walls/stone_wall_top_3" 176 16 Wall "walls/stone_wall_top_9" 80 144 Wall "walls/stone_wall_bottom" 176 48 Wall "walls/stone_wall_bottom" 208 176 Wall "walls/stone_wall_bottom" 176 176 Wall "walls/stone_wall_bottom" 16 176 Wall "walls/stone_wall_bottom" 48 176 Wall "walls/stone_wall_bottom" 80 176 Wall "walls/stone_wall_bottom" 208 48 Wall "walls/stone_wall_top_3" 208 16 Wall "walls/stone_wall_top_5" 240 16 Wall "walls/stone_wall_top_7" 240 144 Wall "walls/stone_wall_top_8" 176 144 Wall "walls/stone_wall_top_3" 208 144 Wall "walls/stone_wall_top_2" 240 112 Wall "walls/stone_wall_top_2" 240 80 Wall "walls/stone_wall_top_2" 240 48 Wall "walls/stone_wall_bottom" 240 176
// ITEMS
// FURNITURES
|
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-07-16 18:18:26 Dobra to była chwila mojego zwątpienia. Poradziłem sobie. #ifndef Buildings_hpp #define Buildings_hpp
class Building : public GameObject { public: sf::Vector2i size; std::vector < ItemOnMap * > _items; std::vector < Furniture * > _furnitures; std::vector < Wall * > _walls; Building( string name, float x, float y ) : GameObject( name, x, y ) { string filename = "assets/" + name + ".txt"; ifstream file( filename ); if( !file.is_open() ) { cout << "cant open building script: " << filename << "\n"; return; } string line; string objectType; string objectName; std::getline( file, line ); std::getline( file, line ); std::getline( file, line ); std::istringstream lineStream( line ); lineStream >> objectType; lineStream >> size.x >> size.y; cout << size.x << " " << size.y << "\n"; std::getline( file, line ); std::getline( file, line ); int value; for( int y = 0; y < size.y; y++ ) { for( int x = 0; x < size.x; x++ ) { file >> value; cout << value << " "; } cout << "\n"; } while( std::getline( file, line ) ) { if( line.empty() ) { continue; } std::istringstream lineStream( line ); lineStream >> objectType; if( objectType == "Item" ) { int x, y; getline( lineStream, objectName, '"' ); getline( lineStream, objectName, '"' ); lineStream >> x; lineStream >> y; x = x -( size.x * 16 / 2 ) + position.x; y = y -( size.y * 16 / 2 ) + position.y; ItemOnMap * item = new ItemOnMap( getItem( objectName ), x, y ); _items.push_back( item ); cout << "Item: " << objectName << "\n"; } if( objectType == "Furniture" ) { string name; int x, y; getline( lineStream, objectName, '"' ); getline( lineStream, objectName, '"' ); lineStream >> x; lineStream >> y; x = x -( size.x * 16 / 2 ) + position.x; y = y -( size.y * 16 / 2 ) + position.y; Furniture * furniture = new Furniture( getPrefab( objectName ), x, y ); _furnitures.push_back( furniture ); cout << "Furniture: " << objectName << "\n"; } if( objectType == "Wall" ) { string name; int x, y; getline( lineStream, objectName, '"' ); getline( lineStream, objectName, '"' ); lineStream >> x; lineStream >> y; x = x -( size.x * 16 / 2 ) + position.x; y = y -( size.y * 16 / 2 ) + position.y; Wall * wall = new Wall( getPrefab( objectName ), x, y ); _walls.push_back( wall ); cout << "Wall: " << objectName << "\n"; } } file.close(); } void addGameObjectsToMainLists() { for( auto & item: _items ) { gameObjects.push_back( item ); itemsOnMap.push_back( item ); } for( auto & furniture: _furnitures ) { gameObjects.push_back( furniture ); furnitures.push_back( furniture ); } for( auto & wall: _walls ) { gameObjects.push_back( wall ); walls.push_back( wall ); } } };
#endif
|
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-07-16 18:18:26 |
|
1 2 « 3 » |