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

[C++, SFML]Crash aplikacji

Ostatnio zmodyfikowano 2012-10-10 20:22
Autor Wiadomość
Rughailon
Temat założony przez niniejszego użytkownika
[C++, SFML]Crash aplikacji
» 2012-10-10 20:10:05
Witam. Postanowiłem sobie napisać gierkę. Niestety spotkałem się z dziwnym problemem, przez którego crashuje mi gra.

Najgorsze jest, że nie potrafię znaleść błędu. Kiedy porównuję swój dawniejszy projekt z aktualnym, tak samo go nie znajduję.
Nic nie pomogło. Kilkukrotne sprawdzanie kodu, usunięcie zbędnych rzeczy i zostawienie tych najważniejszych itp. Crash cały czas jest.
Pojawia się konsola, a po włączeniu gry pojawia się rama okna aplikacji.
Zdjęcie:
http://scr.hu/0y75/ba9d0

Kod:
C/C++
#include <SFML/Window.hpp>
#include <SFML/System.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>
#include <fstream>

using namespace std;
using namespace sf;
int MapaTeren[ 20 ][ 20 ];

template < class Tab >
void Load( Tab map )
{
    fstream file;
    file.open( "mapa.map", ios::in );
    for( int y = 0; y < 20; y++ ) {
        for( int x = 0; x < 20; x++ ) {
            file >> MapaTeren[ y ][ x ];
        }
    }
    file.close();
}

int main()
{
    cout << "Menu:" << endl << "1 = Nowa gra\n" << "2 = Sterowanie\n" << "3 = Wyjscie\n";
    int opcja;
    cin >> opcja;
    if( opcja == 1 )
    {
        RenderWindow OknoGry( VideoMode( 800, 600, 32 ), "NoName - Alpha 0.1" );
        int zmienna = 10; int promieniowanie = 0; int ScrollX = 0; int ScrollY = 0;
        Load( MapaTeren );
        Image KafleTeren;
        KafleTeren.LoadFromFile( "MapaKafle.bmp" );
        Sprite chodnik;
        chodnik.SetImage( KafleTeren );
        chodnik.SetSubRect( IntRect( 0, 0, 50, 50 ) );
        while( OknoGry.IsOpened() ) {
            Event zdarzenie;
            while( OknoGry.GetEvent( zdarzenie ) ) {
                if( zdarzenie.Type == Event::Closed )
                     OknoGry.Close();
               
            }
        }
        OknoGry.Clear();
        for( int y = 0; y < 20; y++ ) { //int y = ScrollY/50; y < ScrollY/50+21; y++
            for( int x = 0; x < 20; x++ ) { //int x = ScrollX/50; x < ScrollX/50+17; x++
                if( MapaTeren[ y ][ x ] == 1 ) {
                    chodnik.SetPosition( y * 50 + ScrollY, x * 50 + ScrollX );
                    OknoGry.Draw( chodnik );
                }
            }
            OknoGry.Display();
        }
        return 0;
    }
    if( opcja == 2 ) {
        cout << "Fatal Error!. :/\n";
        return 0;
    }
    if( opcja == 3 ) {
        cout << "Milego dnia. :)\n";
        return 0;
    }
    if( opcja > 3 || opcja < 1 ) {
        cout << "Nie znana opcja! Wylaczam program!\n";
        return 0;
    }
}

Pewno dziwicie się, dlaczego zrobiłem takie proste menu, w dodatku w konsoli. Są to tylko takie eksperymenty, ale to nie przez nie występuje crash.
P-66585
DejaVu
» 2012-10-10 20:16:42
Sprawdź najpierw czy najprostsze kody z tutoriala działają. Poza tym ten kod jest niepoprawny patrząc z punktu widzenia architektury aplikacji SFML.
P-66587
SeaMonster131
» 2012-10-10 20:21:15
Według mnie, to:
C/C++
OknoGry.Clear();
for( int y = 0; y < 20; y++ ) { //int y = ScrollY/50; y < ScrollY/50+21; y++
    for( int x = 0; x < 20; x++ ) { //int x = ScrollX/50; x < ScrollX/50+17; x++
        if( MapaTeren[ y ][ x ] == 1 ) {
            chodnik.SetPosition( y * 50 + ScrollY, x * 50 + ScrollX );
            OknoGry.Draw( chodnik );
        }
    }
    OknoGry.Display();
}
powinno być w pętli
C/C++
while( OknoGry.IsOpened() ) {
    Event zdarzenie;
    while( OknoGry.GetEvent( zdarzenie ) ) {
        if( zdarzenie.Type == Event::Closed )
             OknoGry.Close();
       
    }
}
? :)
P-66588
Rughailon
Temat założony przez niniejszego użytkownika
» 2012-10-10 20:22:54
@SeaMonster131 & DejaVu
Macie racje. Jak ja mogłem to przegapić. :D Bardzo dziękuje za pomoc. :)
P-66589
« 1 »
  Strona 1 z 1