0
SFML 1.6에서 스프라이트를 움직이는 데 문제가 있습니다. 내 프로그램의 모든 변수가 올바르게 설정되어 있지만 sf::Sprite.Move()
함수는 main()
함수 내에서만 작동합니다. 아래 main.cpp 파일에있는 playerMoveTest()
함수의 문제를 복제했습니다. 누구든지이 버그에 대한 해결책을 알고 있거나 기꺼이 도울 수 있다면 많은 도움이 될 것입니다.SFML 1.6 - sf :: Sprite.Move()가 main() 함수 외부에서 작동하지 않습니다.
#include "main.h"
#include "collision.cpp"
#include "events.cpp"
#include "animation.cpp"
//#include "hud_pls_mnu.cpp" TODO Put Back in
#include "physics.cpp"
#define FPS 60 //Define frames per second for the program to run on
#define WIN_DEM_X 800
#define WIN_DEM_Y 600
#define MNU_OFF 0
#define MNU_MAIN 1
#define MNU_PAUSE 2
#define MNU_INV 3
int menu=MNU_OFF;
void playerMoveTest(void);
int main()
{
//Open a window
sf::RenderWindow App(sf::VideoMode(WIN_DEM_X, WIN_DEM_Y), "Crispy Bacon");
bool firstframe=true;
//Initialize the player
if(!player_data.image.LoadFromFile("spritesheet.png"))
return EXIT_FAILURE;
sf::Sprite player(player_data.image);
player.SetPosition(10, 10);
player_data.time_in_cycle.Reset();
player.Resize(300,300); //Resize "player" to be smaller than the window
//Initialize an object
if(!cursor_data.image.LoadFromFile("cursor.png"))
return EXIT_FAILURE;
sf::Sprite cursor(cursor_data.image);
cursor.SetPosition(400, 300);
cursor_data.time_in_cycle.Reset();
cursor.Resize(50, 50);
//NOTE Testing stuff here
sf::Vector2f playerSize=player.GetSize();
sf::Vector2f objectSize=cursor.GetSize();
printf("Player size:\nX:%f\nY:%f\nObject Size:\nX:%f\nY:%f\n", playerSize.x, playerSize.y, objectSize.x, objectSize.y);
App.SetFramerateLimit(60);//Set a FPS cap
//Draw screen border.(Room 101)
sf::Shape rm_101;
rm_101.AddPoint(5, 5, sf::Color(255, 0, 0), sf::Color(0, 0, 0));
rm_101.AddPoint(5, WIN_DEM_Y-5, sf::Color(255, 0, 0), sf::Color(0, 0, 0));
rm_101.AddPoint(WIN_DEM_X-5, WIN_DEM_Y-5, sf::Color(255, 0, 0), sf::Color(0, 0, 0));
rm_101.AddPoint(WIN_DEM_X-5, 5, sf::Color(255, 0, 0), sf::Color(0, 0, 0));
rm_101.SetOutlineWidth(20);
rm_101.EnableFill(false);
// Define a text string for version number
sf::String version_num("Pre-Alpha v0.0.0");
version_num.SetPosition(10.f, 550.f);
version_num.SetColor(sf::Color::Black);
//Create a view
sf::View view(sf::FloatRect(0, 0, 800, 600));
//Start running loop
while (App.IsOpened())
{
// Get elapsed time
Frametime = App.GetFrameTime();
//Process Events(i.e. the window was told to close)
switch(menu)
{
case MNU_OFF:
game_events(App);
break;
case MNU_MAIN:
if(firstframe==true) break;
}
//Move stuff TODO:Make so uses linked lists(in phisics file?
move(player, player_data);
playerMoveTest();
//Match proper player animation frame
animateBody(player, player_data);
//Clear Screen NOTEVarious screnclears for testing
if(collide_rec(player, cursor))
App.Clear(sf::Color(100, 100, 100));
else
App.Clear(sf::Color(255, 255, 255));
//Set View to player
view.SetCenter(player.GetPosition());
//Display stuff
App.SetView(view);//Set View to normal
App.Draw(rm_101);
App.Draw(player);
App.Draw(cursor);
//After the view is set to the HUD position
App.SetView(App.GetDefaultView());//Set veiw to HUD position
App.Draw(version_num);
App.Display();
firstframe=false;
}
}
void playerMoveTest(void)
{
player.Move(50,50);
}
몇 가지 질문 : 왜 아직도 2.0 대신 SFML 1.6을 사용하고 있습니까? 보고있는 버그를 보여주는 최소한의 샘플로 코드를 제거하려고 시도 했습니까? 함수'move'가 main에서 기능 만한다는 것은 무엇을 의미합니까? 정확히 무엇이 잘못 될까요? – Alex