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:
#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; }
|
|
m4tx |
» 2013-05-27 22:00:13 Strzelam, że nie dodałeś niezbędnych plików DLL obok binarki swojej gry. |
|
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 |
|
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). |
|
pekfos |
» 2013-05-31 18:37:54 Dodałem... Tzn. myślę, że dodałem. |
A te specyficzne dla Visuala? MSVCR110D.dll/MSVCR110.dll? |
|
_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ć. |
|
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. |
|
« 1 » |