タイトルの通り、Linux Mint 14 で sfml-1.6 で作成したプログラムのコンパイル、リンク、実行に成功しました。コンパイルには g++ を使用しました。しかし、ソース ファイルを Windows に移動し、sfml ライブラリに相当する Windows にコンパイルしようとするとすぐにクラッシュします。プログラムは正常にコンパイルおよびリンクされますが、メインに到達する前にクラッシュします。自分の .h ファイルにグローバル オブジェクト/変数がないことを確認しました。しかし、sfml ライブラリではできません。ライブラリが壊れているのではないかと思い、コードを sfml 2.0. 用に移植しましたが、問題は解決しません。私が間違っていることについての手がかりはありますか?また、プラットフォーム固有のヘッダーを使用していないことも確認しました。
これが私のmain.cppです
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "World.h"
#include <sstream>
#include <vector>
#include <zip.h>
enum states
{
MENU,
GAME,
PAUSE,
EXIT,
DIE
};
player plr;
sf::Clock timer;
void getKeys(const sf::Input& input);
std::string floatToString(float flt);
int main(int argc, char** argv)
{
sf::RenderWindow window(sf::VideoMode(1024, 768), "sfTest");
window.SetFramerateLimit(60);
sf::Music startSong;
sf::Music endSong;
sf::Music s1, s2, s3;
sf::String musicBy;
musicBy.SetText("Music by Kevin McLeod: www.incompetech.com");
if(!s1.OpenFromFile("Batty McFaddin.ogg"))
return -1;
if(!s2.OpenFromFile("Merry Go.ogg"))
return -1;
if(!s3.OpenFromFile("One-eyed Maestro.ogg"))
return -1;
if(!endSong.OpenFromFile("One-eyed Maestro.ogg"))
return -10;
if(!startSong.OpenFromFile("Comedic Juggernaut.ogg"))
return -15;
endSong.SetVolume(50);
std::vector<sf::Music*> playList;
std::vector<sf::Music*>::iterator mIt;
s1.SetVolume(25);
s2.SetVolume(25);
s3.SetVolume(25);
playList.push_back(&s2);
playList.push_back(&s3);
playList.push_back(&s1);
startSong.SetLoop(true);
startSong.SetVolume(50);
const sf::Input& input = window.GetInput();
plr.setSpeed(.5);
plr.setMaxSpeed(15.0);
plr.setJumpForce(.4f);
plr.setJumpSpeed(16.f);
int state = MENU;
sf::String str;
str.SetText("Welcome to fatrunning!");
sf::String str2;
str2.SetText("Developed by Echoes Entertainment");
str2.Move(0, 100);
sf::String cont;
cont.SetText("Please press enter to play...");
cont.Move(0, 30);
sf::String spd;
sf::String menuHelp;
menuHelp.SetText("Stand on the block equivalent to the level (0-15) and press TAB");
menuHelp.Move(0, 30);
float endTime = 60*5;
float curTime = 0;
sf::Sprite menu;
sf::Image mim;
mim.LoadFromFile("MenuBackground.png");
menu.SetImage(mim);
sf::String scr;
sf::String thanks("Thanks for playing! Your score was: ");
//sf::String tarantulas(" Tarantual tarantulas Everybody loves tarantulas if there's just fuzz where your hamster was it's propably because of tarantulas They're so soft and they're so furry And they're so cute if your vision's blurry all of mine got free but dont you worry though they're crawling up your wall in a big hurry Tarantual tarantulas Everybody loves tarantulas if there's just fuzz where your hamster was it's propably because of tarantulas Don't look now but i have a feeling there's one above you on your ceiling but when they crawl they never fall unless the person under them is nervous at all Tarantual tarantulas Everybody loves tarantulas if there's just fuzz where your hamster was it's propably because of tarantulas \t \t can you feel that itch on the top of your head it could be one of them crawling instead but it wont bite unless it senses fear so just stay calm til' it's gone in a year \t\t Tarantual tarantulas Everybody loves tarantulas if there's just fuzz where your hamster was it's propably because of tarantulas Tarantual tarantulas Everybody loves tarantulas if there's just fuzz where your hamster was it's propably because of tarantulas if there's just fuzz where your hamster was it's propably because of tarantulas Tarantulas tarantulas it's propably because of tarantulas");
//.tarantulas.Move(3000, 0);
thanks.Move(0, 30);
scr.Move(500, 30);
World world;
world.addLevel("lvl1", "lvl1.txt");
world.addLevel("lvl2", "lvl2.txt");
world.addLevel("lvl3", "lvl3.txt");
world.addLevel("lvl4", "lvl4.txt");
world.addLevel("lvl5", "lvl5.txt");
world.addLevel("lvl6", "lvl6.txt");
world.addLevel("lvl7", "lvl7.txt");
world.addLevel("lvl8", "lvl8.txt");
world.addLevel("lvl9", "lvl9.txt");
world.addLevel("lvl10", "lvl10.txt");
world.addLevel("lvl11", "lvl11.txt");
world.addLevel("lvl12", "lvl12.txt");
world.addLevel("lvl13", "lvl13.txt");
world.addLevel("lvl14", "lvl14.txt");
world.addLevel("lvl15", "lvl15.txt");
world.setMenuLevel("menu.txt");
world.regPlr(plr);
bool once = false;
bool unodos = false;
float finalScore = 0;
while (state != DIE)
{
sf::Event e;
while (window.GetEvent(e))
{
if ( e.Type == sf::Event::Closed )
{
window.Close();
state = EXIT;
}
if( e.Type == sf::Event::KeyPressed )
{
if(e.Key.Code == sf::Key::Return)
{
if(!unodos)
{
state = GAME;
unodos = true;
}
}
}
}
getKeys(input);
window.Clear();
switch(state)
{
case MENU:
if(startSong.GetStatus() == sf::Sound::Stopped)
startSong.Play();
window.Draw(menu);
window.Draw(str);
window.Draw(str2);
window.Draw(cont);
break;
case GAME:
if(startSong.GetStatus() == sf::Sound::Playing)
{
mIt = playList.begin();
(*mIt)->Play();
startSong.Stop();
}
if((*mIt)->GetStatus() == sf::Sound::Stopped)
{
mIt++;
if(mIt == playList.end())
mIt = playList.begin();
(*mIt)->Play();
}
timer.Reset();
spd.SetText(floatToString(endTime-plr.time));
world.drawWorld(window);
world.update(input);
plr.update();
window.Draw(plr.getSprite());
window.Draw(spd);
plr.time+=timer.GetElapsedTime();
if(plr.time >= endTime || world.quit)
{
state = EXIT;
plr.time = endTime;
}
if(world.atMenu)
state = PAUSE;
break;
case PAUSE:
if(startSong.GetStatus() == sf::Sound::Playing)
startSong.Stop();
spd.SetText(floatToString(endTime-plr.time));
plr.update();
world.drawWorld(window);
world.update(input);
window.Draw(plr.getSprite());
window.Draw(spd);
window.Draw(menuHelp);
if(!world.atMenu)
state = GAME;
if(world.quit)
state = EXIT;
break;
case EXIT:
if(!once)
{
endSong.Play();
(*mIt)->Stop();
world.addLevel("end", "end.txt");
world.setLevel("end");
once = true;
finalScore = plr.score;
finalScore += (endTime-plr.time);
}
//tarantulas.Move(-3.5, 0);
plr.update();
world.drawWorld(window);
window.Draw(plr.getSprite());
scr.SetText(floatToString(finalScore));
//window.Draw(tarantulas);
window.Draw(musicBy);
window.Draw(thanks);
window.Draw(scr);
if(world.curLvl->atEnd)
state = DIE;
break;
case DIE:
window.Close();
break;
default:
break;
}
window.Display();
}
return 0;
}
std::string floatToString(float flt)
{
std::stringstream ss;
ss << flt;
return ss.str();
}
void getKeys(const sf::Input& input)
{
if(input.IsKeyDown(sf::Key::D))
{
plr.isAcc = true;
plr.right();
}
else if(input.IsKeyDown(sf::Key::A))
{
plr.isAcc = true;
plr.left();
}
if(input.IsKeyDown(sf::Key::Space))
{
plr.isJump = false;
plr.jump();
}
if(!input.IsKeyDown(sf::Key::D) && !input.IsKeyDown(sf::Key::A))
{
plr.isAcc = false;
}
if(!input.IsKeyDown(sf::Key::Space))
plr.isJump = true;
}
これは main.cpp 全体です。他のソースを見る必要がある場合は、私に尋ねてください。しかし、プログラムはメインに到達する前にクラッシュします。列挙型の定義にも達しません。