Hi,
ich versuche mich gerade an einem Action-Game mit
top-down Sicht. Box2D verwende ich für collision und hit detection.
Nun komme ich mit der Steuerung der Spielfigur nicht so richtig weiter.
Die Bewegung erscheinen schwammig, die Anfangsbeschleunigung ist zu gering
und die Rotation stellt mich auch nicht zufrieden(damit belaste ich euch aber nicht
).
Hat jemand Erfahrung mit der Steuerung von Figuren mittels Kräften und Impulsen in Box2D?
(und eine Lösung die nicht "schwammig" aussieht?)
Hier mein Code bis jetzt:
(warum killt er die ganzen Absätze im Code?[ahh jetzt geht es])
|
C-/C++-Quelltext
|
1
2
3
4
5
|
_fixtureDef.shape = &_bodyBox;
_fixtureDef.friction = 0.0f;
_fixtureDef.density = 1.0f;
_fixtureDef.restitution= 0.0f;
_body->CreateFixture(&_fixtureDef);
|
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
// Move the PlayerSprite
float MoveX = 0;
float MoveY = 0;
if (Game::GetInput().IsKeyDown(sf::Key::A)) MoveX=-1;
if (Game::GetInput().IsKeyDown(sf::Key::D)) MoveX= 1;
if (Game::GetInput().IsKeyDown(sf::Key::W)) MoveY=-1;
if (Game::GetInput().IsKeyDown(sf::Key::S)) MoveY= 1;
if ((MoveX*MoveY)!=0)
{
if(MoveX>0) MoveX= 0.715f;
if(MoveX<0) MoveX=-0.715f;
if(MoveY>0) MoveY= 0.715f;
if(MoveY<0) MoveY=-0.715f;
}
_body->ApplyForce(b2Vec2(MoveX*Speed*elapsedTime,MoveY*Speed*elapsedTime),_body->GetPosition());
GetSprite().SetPosition(_body->GetPosition().x*Game::Scale,_body->GetPosition().y*Game::Scale);
// slow down
if (MoveX==0) _body->ApplyForceToCenter(b2Vec2(-5*_body->GetLinearVelocity().x,0));
if (MoveY==0) _body->ApplyForceToCenter(b2Vec2(0,-5*_body->GetLinearVelocity().y));
|