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

SFML, Window, funkcje

Ostatnio zmodyfikowano 2020-07-14 20:44
Autor Wiadomość
R0ut4
Temat założony przez niniejszego użytkownika
SFML, Window, funkcje
» 2020-07-13 13:27:33
Witajcie, dzisiaj zacząłem jeszcze raz tworzyć grę, jednak napotkałem przeszkodę, której ostatnim razem nie było. Może ktoś wyjaśnić o co chodzi?

C/C++
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

enum Stan
{
    Menu, Game, Pause, Eq
};

int main()
{
    sf::Window aplikacja( sf::VideoMode( 800, 600 ), "Project: MARS" );
    aplikacja.setFramerateLimit( 60 );
   
    sf::Texture grasstext;
    sf::Texture dirttext;
    grasstext.loadFromFile( "grass.png" );
    dirttext.loadFromFile( "dirt.png" );
    sf::Sprite grass( grasstext );
    sf::Sprite dirt( dirttext );
   
    Stan stan;
    sf::Event e;
    while( aplikacja.isOpen() )
    {
        while( aplikacja.pollEvent( e ) )
        {
            if( e.type == sf::Event::Closed )
            {
                aplikacja.close();
            }
        }
        //WYDARZENIA
        switch( stan )
        {
        case Menu:
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Enter ) )
            {
                stan = Game;
            }
            break;
        case Game:
           
            break;
        case Pause:
           
            break;
        case Eq:
           
            break;
        }
    }
    //WYŚWIETLANIE
    aplikacja.clear();
    switch( stan )
    {
    case Menu:
       
        break;
    case Game:
        const float tilesize = 50.f;
        int maptile[ 5 ][ 5 ] =
        {
            0, 0, 0, 0, 0,
            0, 1, 1, 1, 0,
            0, 1, 1, 1, 0,
            0, 1, 1, 1, 1,
            0, 1, 0, 0, 0,
        };
        for( int row = 0; row > 5; row++ )
        {
            for( int col = 0; col > 5; col++ )
            {
                if( maptile[ row ][ col ] = 0 )
                {
                    grass.setPosition( row * tilesize, col * tilesize );
                    aplikacja.draw( grass );
                }
                else
                {
                    dirt.setPosition( row * tilesize, col * tilesize );
                    aplikacja.draw( dirt );
                }
            }
        }
       
        break;
    case Pause:
       
        break;
    case Eq:
       
        break;
    }
    aplikacja.display();
}

BŁĘDY:
||=== Build: Debug in Mars (compiler: GNU GCC Compiler) ===|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp||In function 'int main()':|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp|53|error: 'class sf::Window' has no member named 'clear'; did you mean 'create'?|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp|73|warning: suggest parentheses around assignment used as truth value [-Wparentheses]|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp|76|error: 'class sf::Window' has no member named 'draw'|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp|81|error: 'class sf::Window' has no member named 'draw'|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp|87|error: jump to case label [-fpermissive]|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp|61|note:   crosses initialization of 'int maptile [5][5]'|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp|60|note:   crosses initialization of 'const float tilesize'|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp|90|error: jump to case label [-fpermissive]|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp|61|note:   crosses initialization of 'int maptile [5][5]'|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp|60|note:   crosses initialization of 'const float tilesize'|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp|54|warning: enumeration value 'Pause' not handled in switch [-Wswitch]|
C:\Users\Leoshirei\Desktop\Mars\Mars\main.cpp|54|warning: enumeration value 'Eq' not handled in switch [-Wswitch]|
||=== Build failed: 5 error(s), 3 warning(s) (0 minute(s), 4 second(s)) ===|
P-177371
nanoant20
» 2020-07-13 14:11:53
sprawdź klamry {}
C/C++
while( aplikacja.isOpen() )
{
    code...
} //zamykasz while, tej klamry nie powinno tu byc
//a dalej masz kod
//WYŚWIETLANIE
aplikacja.clear();
switch( stan )
//itd...
aplikacja.display();
} //tutaj powinna byc
return 0;
}

jeżeli używasz enum w switch
powinno być np. tak
C/C++
enum Stan { Menu, Game, Pause, Eq };
Stan stan = Menu; //uzupelnij
switch( stan )
{
case Menu:
    break;
    //itd...az do
default: //default też brakuje
    break;
}

C/C++
//jest
sf::Window aplikacja( sf::VideoMode( 800, 600 ), "Project: MARS" );
//powinno byc
sf::RenderWindow aplikacja( sf::VideoMode( 800, 600 ), "Project: MARS" );
P-177372
R0ut4
Temat założony przez niniejszego użytkownika
» 2020-07-13 16:31:40
po poprawieniu klamry:
C/C++
||=== Build: Debug in Mars( compiler: GNU GCC Compiler ) === |
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp || In function 'int main()':|
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp | 52 | error
    : 'class sf::Window' has no member named 'clear'; did you mean 'create' ?|
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp | 72 | warning: suggest parentheses around assignment used as truth value[ - Wparentheses ] |
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp | 75 | error: 'class sf::Window' has no member named 'draw' |
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp | 80 | error: 'class sf::Window' has no member named 'draw' |
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp | 86 | error: jump to case label[ - fpermissive ] |
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp | 60 | note: crosses initialization of 'int maptile [5][5]' |
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp | 59 | note: crosses initialization of 'const float tilesize' |
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp | 89 | error: jump to case label[ - fpermissive ] |
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp | 60 | note: crosses initialization of 'int maptile [5][5]' |
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp | 59 | note: crosses initialization of 'const float tilesize' |
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp | 53 | warning: enumeration value 'Pause' not handled in switch[ - Wswitch ] |
C:\U sers\Leoshirei\Desktop\Mars\Mars\main.cpp | 53 | warning: enumeration value 'Eq' not handled in switch[ - Wswitch ] |
||=== Build failed: 5 error( s ), 3 warning( s )( 0 minute( s ), 1 second( s ) ) === |

Edit:
Już się kompiluje, ale nic się nie wyświetla i nic się nie dzieje.
P-177373
R0ut4
Temat założony przez niniejszego użytkownika
» 2020-07-13 18:07:34
Poprzedni post do wywalenia xd

Mam teraz taki kod, ale nic się nie dzieje. Ktoś coś?
C/C++
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/System.hpp>

enum Stan
{
    Menu, Gra
};

int main()
{
    sf::RenderWindow window( sf::VideoMode( 800, 600 ), "Projekt: MARS" );
    Stan stan = Menu;
   
    while( window.isOpen() )
    {
        sf::Event event;
        while( window.pollEvent( event ) )
        {
            if( event.type == sf::Event::Closed )
                 window.close();
           
            switch( stan )
            {
            case Menu:
                // obsługa zdarzeń w menu
                if( sf::Keyboard::isKeyPressed( sf::Keyboard::Enter ) )
                {
                    stan = Gra;
                }
                break;
            case Gra:
                // obsługa zdarzeń w grze
                break;
            }
           
        } //while
        window.clear();
       
        switch( stan )
        {
        case Menu:
            // wyświetlanie w menu
            break;
           
        case Gra:
            // wyświetlanie w grze
            const float Tilesize = 50;
            int Tilemap[ 5 ][ 5 ] =
            {
                { 0, 0, 0, 0, 0 },
                { 0, 1, 1, 1, 0 },
                { 0, 1, 1, 1, 1 },
                { 0, 0, 1, 0, 0 },
                { 0, 0, 1, 0, 0 }
            };
           
            sf::Texture grasstext;
            sf::Texture dirttext;
           
            grasstext.loadFromFile( "grass.png" );
            dirttext.loadFromFile( "dirt.png" );
           
            sf::Sprite grass( grasstext );
            sf::Sprite dirt( dirttext );
           
            for( int row = 0; row > 5; row++ )
            {
                for( int col = 0; col > 5; col++ )
                {
                    if( Tilemap[ row ][ col ] == 0 )
                    {
                        grass.setPosition( row * Tilesize, col * Tilesize );
                        window.draw( grass );
                    }
                    else
                    {
                        dirt.setPosition( row * Tilesize, col * Tilesize );
                        window.draw( dirt );
                    }
                }
            }
           
            break;
        }
       
        window.display();
    } //while
    return 0;
}
P-177374
nanoant20
» 2020-07-13 18:26:26
C/C++
sf::RenderWindow aplikacja( sf::VideoMode( 800, 600 ), "Project: MARS" );
aplikacja.setFramerateLimit( 60 );

//tutaj tworzysz obiekt do przechowywania tekstury, niepotrzebnie przeniosles
sf::Texture grasstext;
sf::Texture dirttext;
grasstext.loadFromFile( "grass.png" );
dirttext.loadFromFile( "dirt.png" );
sf::Sprite grass( grasstext );
sf::Sprite dirt( dirttext );


Stan stan = Menu;
while( aplikacja.isOpen() )
{ //itd...
P-177375
R0ut4
Temat założony przez niniejszego użytkownika
» 2020-07-13 19:16:00
Nadal nic się nie dzieje
P-177376
DejaVu
» 2020-07-14 00:30:43
Co to znaczy 'nic się nie dzieje'? Może nie kompilujesz w ogóle projektu? W Code::Blocks takie rzeczy z tego co kojarzę to były możliwe.
P-177377
nanoant20
» 2020-07-14 12:25:33
błąd logiczny jest w pętlach for

C/C++
//jest
for( int row = 0; row > 5; row++ )
for( int col = 0; col > 5; col++ )
//powinno byc
for( int row = 0; row < 5; row++ )
for( int col = 0; col < 5; col++ )

wersja skrócona::
C/C++
#include <iostream>

#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/System.hpp>
#include <SFML/Audio.hpp>

using namespace std;
using namespace sf;

enum Stan { Menu, Gra, End };

int main()
{
    sf::RenderWindow window( sf::VideoMode( 250, 250 ), "Projekt: MARS" );
   
    sf::Texture grasstext;
    sf::Texture dirttext;
   
    grasstext.loadFromFile( "grass.png" );
    dirttext.loadFromFile( "dirt.png" );
   
    sf::Sprite grass( grasstext );
    sf::Sprite dirt( dirttext );
   
    const float Tilesize = 50;
    int Tilemap[ 5 ][ 5 ] =
    {
        { 0, 0, 0, 0, 0 },
        { 0, 1, 1, 1, 0 },
        { 0, 1, 1, 1, 1 },
        { 0, 0, 1, 0, 0 },
        { 0, 0, 1, 0, 0 }
    };
    //Stan stan = Menu;
   
    while( window.isOpen() )
    {
        sf::Event event;
       
       
        while( window.pollEvent( event ) )
        {
            if( event.type == sf::Event::Closed )
                 window.close();
           
        } //end while( window.pollEvent( event ) )
       
        //window.clear();
        window.clear( sf::Color::Yellow );
       
        for( int row = 0; row < 5; ++row )
        {
            for( int col = 0; col < 5; col++ )
            {
                if( Tilemap[ row ][ col ] == 0 )
                {
                    dirt.setPosition( col * Tilesize, row * Tilesize );
                    window.draw( dirt );
                }
                if( Tilemap[ row ][ col ] == 1 )
                {
                    grass.setPosition( col * Tilesize, row * Tilesize );
                    window.draw( grass );
                }
               
            } //end col
        } //end row
       
       
        window.display();
       
       
    } //end while( window.isOpen() )
   
    return 0;
} //end main

P-177380
« 1 » 2
  Strona 1 z 2 Następna strona