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

[SFML 2.0] Gra się nie uruchamia na innych komputerach

Ostatnio zmodyfikowano 2013-06-06 21:06
Autor Wiadomość
Tytanisus
Temat założony przez niniejszego użytkownika
[SFML 2.0] Gra się nie uruchamia na innych komputerach
» 2013-05-27 21:58:57
Witam, dzisiaj zacząłem swoją przygodę z SFML 2.0 i stworzyłem już prostą grę 2D. Polega ona na tym, że trzeba uciekać niebieskim kwadratem przed czerwonym (taki berek na czarnej planszy :)). Oto screen: http://img12.imageshack.us/img12/7832/beztytuuvyb.png
Gra teoretycznie działa, jednak gdy przesyłam plik innym mają oni błędy z nieprawidłową aplikacją sys32. Czy ktoś wie może jak to naprawić? Pracuję na Microsoft Visual Studio 2012.
Link do spakowanej gry: http://www.sendspace.pl/file/f034b0817c7290b5ad61e21
Mi aplikacja działa poprawnie. Jednak problem zaczyna się gdy odpala ktoś inny. Czy mógłby mi ktoś powiedzieć jak temu zaradzić?
Dla zainteresowanych dorzucam dodatkowo kod maina:
C/C++
#include<SFML/Window.hpp>
#include<SFML/Graphics.hpp>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<ctime>
float ruch_na_przestrzeni_x( float a, float b )
{
    if( a <= 780 && a >= 0 )
    {
        if( b > a )
        {
            if( rand() % 5 == 0 ) a -= 0.2;
           
            if( rand() % 5 == 1 ) a += 0.4;
           
            if( rand() % 5 == 2 ) a += 0.6;
           
            if( rand() % 5 == 3 ) a += 0.8;
           
            if( rand() % 5 == 4 ) a -= 1.0;
           
        }
        else
        {
            if( rand() % 5 == 0 ) a += 0.2;
           
            if( rand() % 5 == 1 ) a -= 0.4;
           
            if( rand() % 5 == 2 ) a -= 0.6;
           
            if( rand() % 5 == 3 ) a -= 0.8;
           
            if( rand() % 5 == 4 ) a += 1.0;
           
        }
    }
    else
    {
        if( a < 10 )
             a += 1;
       
        if( a > 770 )
             a -= 1;
       
    }
    return a;
}
float ruch_na_przestrzeni_y( float a, float b )
{
    if( a <= 580 && a >= 0 )
    {
        if( b > a )
        {
            if( rand() % 5 == 0 ) a -= 0.2;
           
            if( rand() % 5 == 1 ) a += 0.4;
           
            if( rand() % 5 == 2 ) a += 0.6;
           
            if( rand() % 5 == 3 ) a += 0.8;
           
            if( rand() % 5 == 4 ) a -= 1.0;
           
        }
        else
        {
            if( rand() % 5 == 0 ) a += 0.2;
           
            if( rand() % 5 == 1 ) a -= 0.4;
           
            if( rand() % 5 == 2 ) a -= 0.6;
           
            if( rand() % 5 == 3 ) a -= 0.8;
           
            if( rand() % 5 == 4 ) a += 1.0;
           
        }
    }
    else
    {
        if( a < 10 )
             a += 1;
       
        if( a > 570 )
             a -= 1;
       
    }
    return a;
}
int main( int argc, char ** argv )
{
    float graczszybkoscpoziom = 8;
    float graczszybkoscpion = 8;
    srand( time( NULL ) );
    sf::RenderWindow okno;
    sf::Texture tekstura, wrog, koniec;
    sf::Sprite obrazek, obrazekwroga, zakonczenie;
    float a = 0, b = 0;
    tekstura.loadFromFile( "abc.jpg" );
    wrog.loadFromFile( "wrog.jpg" );
    koniec.loadFromFile( "koniec.jpg" );
    obrazekwroga.setTexture( wrog );
    obrazek.setTexture( tekstura );
    zakonczenie.setTexture( koniec );
    okno.create( sf::VideoMode( 800, 600, 32 ), "Gra" );
    obrazek.setPosition( 370, 580 );
    zakonczenie.setPosition( 220, 100 );
    obrazekwroga.setPosition( 0, 0 );
    while( okno.isOpen() )
    {
        sf::Event zdarzenie;
        okno.clear( sf::Color::Black );
        if( abs( obrazek.getPosition().x - a ) < 15 && abs( obrazek.getPosition().y - b ) < 15 )
        {
           
            while( okno.pollEvent( zdarzenie ) )
            {
                if( zdarzenie.type == sf::Event::Closed )
                     okno.close();
               
                if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
                     okno.close();
               
                if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Space )
                {
                    a = 0;
                    b = 0;
                }
            }
            okno.draw( zakonczenie );
        }
        else
        {
            obrazekwroga.setPosition( a, b );
            while( okno.pollEvent( zdarzenie ) )
            {
                if( zdarzenie.type == sf::Event::Closed )
                     okno.close();
               
                if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
                     okno.close();
               
                if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) && sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
                     obrazek.move( -( graczszybkoscpoziom ), -( graczszybkoscpion ) );
               
                if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) && sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
                     obrazek.move(( graczszybkoscpoziom ), -( graczszybkoscpion ) );
               
                if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) && sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
                     obrazek.move(( graczszybkoscpoziom ),( graczszybkoscpion ) );
               
                if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) && sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
                     obrazek.move( -( graczszybkoscpoziom ),( graczszybkoscpion ) );
               
                if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Up )
                     obrazek.move( 0, - graczszybkoscpion );
               
                if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Left )
                     obrazek.move( - graczszybkoscpoziom, 0 );
               
                if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Right )
                     obrazek.move( graczszybkoscpoziom, 0 );
               
                if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) )
                     obrazek.move( 0, graczszybkoscpion );
               
            }
            a = ruch_na_przestrzeni_x( a, obrazek.getPosition().x );
            b = ruch_na_przestrzeni_y( b, obrazek.getPosition().y );
            okno.draw( obrazekwroga );
            okno.draw( obrazek );
        }
        okno.display();
        std::cout << obrazek.getPosition().x << "    " << obrazek.getPosition().y << std::endl;
    }
    return 0;
}
P-84150
m4tx
» 2013-05-27 22:00:13
Strzelam, że nie dodałeś niezbędnych plików DLL obok binarki swojej gry.
P-84151
Tytanisus
Temat założony przez niniejszego użytkownika
» 2013-05-27 22:00:35
Dodałem... Tzn. myślę, że dodałem. Skopiowałem wszystkie DLLki z folderu "bin" do docelowego folderu z grą. Wysłałem link do sandspacea z .rarem
P-84152
DejaVu
» 2013-05-31 18:26:16
Czy ktoś wie może jak to naprawić? Pracuję na Microsoft Visual Studio 2012.
Jeżeli używasz Visual Studio C++ 2012 ze wszystkimi patchami to istnieje możliwość przełączenia ustawień kompilacji tak, aby aplikacje uruchamiały się na Windows XP. Jeżeli używasz Visual C++ 2012 Express, to aplikacje nie będą działały poniżej sytemu Windows 7 (no może Windows Vista jeszcze jest wspierany, ale tego pewien nie jestem).
P-84509
pekfos
» 2013-05-31 18:37:54
Dodałem... Tzn. myślę, że dodałem.
A te specyficzne dla Visuala? MSVCR110D.dll/MSVCR110.dll?
P-84511
_Ziemowit
» 2013-06-03 14:25:18
@pekfos:
W takim przypadku rzuca komunikatem o nieznalezieniu pliku MSVCRXX.dll, a nie o nieprawidłowej aplikacji.

Jeżeli masz system 64-bit to nie odpalisz skompilowanej u Ciebie aplikacji na 32bitowym systemie (chyba, że coś pozmieniasz - nie znam Visuala, i nie wiem czy da się coś takiego zrobić, ale i tak nie ma gwarancji działania - kompilowanie na innym systemie/architekturze zawsze może spowodować problemy).

Co do pliku MSVCR110D.dll - jeżeli program, który chcesz wysłać do kolegi woła o tę dllkę, to najpierw trzeba skompilować w trybie Release, a potem dopiero publikować.
P-84707
DejaVu
» 2013-06-06 21:06:05
Jeżeli masz system 64-bit to nie odpalisz skompilowanej u Ciebie aplikacji na 32bitowym systemie (chyba, że coś pozmieniasz - nie znam Visuala, i nie wiem czy da się coś takiego zrobić, ale i tak nie ma gwarancji działania - kompilowanie na innym systemie/architekturze zawsze może spowodować problemy).
To nie jest prawdziwe stwierdzenie. To kompilator decyduje o tym czy kod aplikacji będzie generowany 64-bitowy czy też 32-bitowy. System operacyjny nie ma na to żadnego wpływu.

Temat zamykam, bowiem autor przestał się interesować tym wątkiem.
P-85078
« 1 »
  Strona 1 z 1