Hallo zusammen,
ich habe ein Problem mit dem Event-Handling der SFML. Ich habe schon mehrere Foren durchsucht konnte bis jetzt aber noch keine Hilf für mein Problem finden.
Mein Problem ist ich baue grade ein TileMap-basietes Spiel nach alter Zelda-Manier auf. Nun habe ich aber ziemliche Probleme mit dem Movement meines Players.
1. Wenn ich nach dieser Art das ganze realisere:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
void Game::run(){
init();
while(gameWindow.IsOpened()){
sf::Event event;
if(gameWindow.GetEvent(event)){
if(event.Type == sf::Event::Closed){
gameWindow.Close();
}
}
checkKeyEvents(event);
player.stopAnimation();
checkMouseEvents(event);
// hier ghets noch weiter
}
|
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
void Game::checkKeyEvents(sf::Event event){
player.calculateTilePosition();
int x = player.getTileXPosition();
int y = player.getTileYPosition();
int steps = 4;
if(gameWindow.GetInput().IsKeyDown(sf::Key::W)||
gameWindow.GetInput().IsKeyDown(sf::Key::Up)){
player.startAnimation(16,19);
if( player.getTileYPosition()<=0 ||
(y-1 >= 0 && world.getTileMap(currentXTileMap,currentYTileMap).getTile(x,y-1).isWalkAble())){
for(float i = 0;i<128;i=i+steps ){
elapsedTime = gameWindow.GetFrameTime();
player.move(0,steps*(-1)); //oben
drawGame();
}
}
}
else if(gameWindow.GetInput().IsKeyDown(sf::Key::S) ||
gameWindow.GetInput().IsKeyDown(sf::Key::Down)){
// usw.. blablba
}
|
Kann ich mich zwar bewegen die MouseEvents werden auch richtig gedeutet, nur bewegt sich das Player-Sprite wenn man eine Bewegungstaste drückt ziemlich lange nach oben. Heißt drück ich zu lange die eine Bewegungs- oder Angriffstaste habe ich keine wirkliche Kontrolle mehr über das Sprite.
2. Wenn ich es so versuche:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
void Game::run(){
init();
while(gameWindow.IsOpened()){
sf::Event event;
if(gameWindow.GetEvent(event)){
if(event.Type == sf::Event::Closed){
gameWindow.Close();
}
}
while(gameWindow.GetEvent(event)){
if(event.Type == sf::Event::KeyPressed){
checkKeyEvents(event);
}
player.stopAnimation();
if(event.Type == sf::Event::MouseButtonPressed){
checkMouseEvents(event);
}
}
}
|
Erkennt er hier nicht wirklich ob eine Taste gedrückt wurde. Nehme ich die if's raus erkennt er keine Pfeiltasten und keine Mausklicks mehr als Event.
So jetzt meine eigentlich Frage:Wwie bekomme ich am besten eine saubere Bewegung hin und Möglichkeit z.B. auch "gleichzeitig" eine MouseClick auf einem Button zu bemerken.
Gruß Wofl