diego997 Temat założony przez niniejszego użytkownika |
[SFML] Edytor map » 2012-04-19 13:09:34 Witam, robimy z kolegą projekt edytora map do gry, którą chcemy w przyszłości napisać. Opracowaliśmy schematy i ogólne zasady, na jakich gra ma działać (bardzo podobne do gier Pokemon na GameBoy'a ;) - przesuwa się mapa, nie gracz, gracz jest cały czas na środku). A więc mapa składa się z kratek o stałej wielkości (40x40px) i nasz edytor na początku wyświetla na ekranie taką właśnie siatkę. Pytanie nasze brzmi, czy dobrze podchodzimy do tematu? Na początku używaliśmy funkcji Okno.Display() w pętli komunikatów, ale ekran wyświetlał na przemian siatkę i czarne tło (migał). Przenieśliśmy ją poza pętlę i działa poprawnie, ale przez nie odświeżanie ekranu cały czas po np. zmianie rozmiaru okna zmniejsza się wygenerowana siatka. Pytanie brzmi, czy to ma tak działać, a z naszej strony wystarczy dodać warunki w pętli (inicjacja funkcji Okno.Display() przy zmianie rozmiaru okna czy interakcji użytkownika), czy macie jakiś inny, lepszy pomysł na rozwiązanie tego problemu? Zamieszczam kod: #include <iostream> #include <SFML\Graphics.hpp>
int main() { sf::RenderWindow Okno( sf::VideoMode( 800, 600, 32 ), "sss" ); const sf::Input & sterowanie = Okno.GetInput(); sf::Shape Box[ 20 ][ 15 ]; for( int x = 0; x < 20; x++ ) { for( int y = 0; y < 15; y++ ) { Box[ x ][ y ] = sf::Shape::Rectangle( 0, 0, 40, 40, sf::Color::White, 1, sf::Color::Black ); Box[ x ][ y ].SetPosition( x * 40, y * 40 ); } } bool block = 1; while( Okno.IsOpened() ) { sf::Event Event; while( Okno.GetEvent( Event ) ) { } if( block ) { for( int x = 0; x < 20; x++ ) { for( int y = 0; y < 15; y++ ) { Okno.Draw( Box[ x ][ y ] ); } } Okno.Display(); } block = 0; } }
|
|
DejaVu |
» 2012-04-19 13:11:22 W tym kodzie nie ma niczego, więc nie ma czego oceniać :P |
|
diego997 Temat założony przez niniejszego użytkownika |
» 2012-04-19 13:15:02 Ale czy samo podejście jest dobre, czy napisalibyście taki program innym sposobem? Bo mapka może być większa niż ekran oczywiście, wyświetlają się tylko te kratki, które są w obszarze okna, i po kliknięciu np. strzałki w prawo, na nowo renderuje się obszar widoczny przez użytkownika. |
|
DejaVu |
» 2012-04-19 13:26:01 Nie ma czego oceniać w kodzie, który przedstawiłeś. Rozwiązanie jest dobre, jeżeli działa i się sprawdza. Sposób rozwiązania determinuje posiadana wiedza. Wiedzę i doświadczenie z kolei zdobywa się przez kodowanie, więc rzuć kostką by wylosować odpowiedź Ciebie satysfakcjonującą. Będzie równie trafna jak każda inna opinia na forum. |
|
diego997 Temat założony przez niniejszego użytkownika |
» 2012-04-19 13:39:18 Kurcze ale załóżmy że na ekranie wyświetlałbym nie 300 kostek(15x20) tylko 1000 wtedy pętla wyglądałą by następująco for(int i = 0 ; i < 1000 ; i ++) Okno.Draw(Box{i}); dlatego się pytam czy takie podejscie jest dobre.
P.S Okno.Draw(Box.{i}) zamiast[i'] ponieważ strona mi dopisuje na koniec [/i] ;p |
|
DejaVu |
» 2012-04-19 15:07:05 |
|
diego997 Temat założony przez niniejszego użytkownika |
» 2012-04-19 18:23:45 Możecie skompilować ten kod http://pastebin.com/ZVrseiDs i zobaczyć o co mi chodzi Dziala lewy przycisk myszy |
|
« 1 » |