Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Edytor map

Ostatnio zmodyfikowano 2012-04-19 18:23
Autor Wiadomość
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:

C/C++
#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;
        //Okno.Clear();
       
       
    }
}
P-54806
DejaVu
» 2012-04-19 13:11:22
W tym kodzie nie ma niczego, więc nie ma czego oceniać :P
P-54807
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.
P-54808
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.
P-54811
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
P-54812
DejaVu
» 2012-04-19 15:07:05
P-54813
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
P-54824
« 1 »
  Strona 1 z 1