Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Stazer

Alter Hase

  • »Stazer« ist der Autor dieses Themas

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

1

18.12.2010, 01:25

Zoom in SFML

Moin,
ich habe ein Problem.
Für mein derzeitiges Spiel benötige ich einen Zoom der proportional gegenüber der Geschwindigkeit arbeitet.
Die Geschwindigkeit wird in einer float Variable namens Speed gespeichert.
Je höher der Speed ist , desto weiter soll rausgezoomt werden.
Nun bin ich leider ( ja um 1:23 :D ) ratlos wie ich das anpacken soll...
Hat jemmand eine Idee?

MfG Stazer

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

2

18.12.2010, 08:54

Die SFML verwendet intern soweit ich weiß OpenGL, d.h. du könntest da an den Matrizen rumschrauben, um zu zoomen.

http://www.opengl.org/resources/faq/technical/viewing.htm

Da gibts nen Abschnitt zum zoomen.

3

18.12.2010, 10:53

Oder du nutzt ganz einfach SFML::View ;)

4

18.12.2010, 10:55

C-/C++-Quelltext

1
2
sf::View * view = &m_window.GetDefaultView();
view->Zoom(1.f + 1.f*timeDelta);


bzw.

C-/C++-Quelltext

1
2
sf::View * view = &m_window.GetDefaultView();
view->Zoom(1.f - 1.f*timeDelta);


SFML 1.6

Markus

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »qwertzui11« (18.12.2010, 11:23)


n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

5

18.12.2010, 11:14

ok, so würde es natürlich viel einfacher gehen ^^

Ich bin davon ausgegangen, dass der TE die API von SFML bereits gecheckt hat, nach dieser funktionalität...

Stazer

Alter Hase

  • »Stazer« ist der Autor dieses Themas

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

6

18.12.2010, 12:12

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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Method to handle the input
void Player::HandleInput ( )
{
    if ( this->Application->GetWindow ( )->GetInput ( ).IsKeyDown ( sf::Key::W ) && this->Speed <= Ship::GetTopSpeed ( ) * this->Application->GetWindow ( )->GetFrameTime ( ) )
    {
        Speed += Ship::GetAcceleration ( ) * this->Application->GetWindow ( )->GetFrameTime ( ) ;
        this->CompleteZoomFactor = 1 - 1 * this->Application->GetWindow ( )->GetFrameTime ( ) ;
    }
    if ( this->Application->GetWindow ( )->GetInput ( ).IsKeyDown ( sf::Key::S ) && this->Speed > 0.0f )
    {
        Speed -= Ship::GetSpeedBrake ( ) * this->Application->GetWindow ( )->GetFrameTime ( ) ;
        this->CompleteZoomFactor = 1 + 1 * this->Application->GetWindow ( )->GetFrameTime ( ) ;
    }
    if ( this->Application->GetWindow ( )->GetInput ( ).IsKeyDown ( sf::Key::A ) && this->Speed >= Ship::GetRotationSpeedProportion ( ) * this->Application->GetWindow ( )->GetFrameTime ( ) )
        this->Sprite.Rotate ( Ship::GetLeftRotation ( ) * this->Application->GetWindow ( )->GetFrameTime ( ) ) ;
    if ( this->Application->GetWindow ( )->GetInput ( ).IsKeyDown ( sf::Key::D ) && this->Speed >= Ship::GetRotationSpeedProportion ( ) * this->Application->GetWindow ( )->GetFrameTime ( ) )
        this->Sprite.Rotate ( Ship::GetRightRotation ( ) * -1 * this->Application->GetWindow ( )->GetFrameTime ( ) ) ;
}

// Method to update the position and rotation
void Player::Update ( )
{
    this->Camera.Zoom ( this->CompleteZoomFactor ) ;
    this->CompleteZoomFactor = 0.0f ;
    /*if ( this->Speed > 0 )
    {
        this->Speed -= Ship::GetFriction ( ) * this->Application->GetWindow ( )->GetFrameTime ( ) ;
        this
    }
    if ( this->Speed < 0 )
        this->Speed = 0.0f ;*/
    float Radian = this->Sprite.GetRotation ( ) * 3.14159265f / 180.f ;
    sf::Vector2f Position ( std::sin ( Radian ) * Speed , std::cos ( Radian ) * Speed ) ;
    this->Camera.Move ( Position ) ;
    this->Sprite.Move ( Position ) ;
    this->Application->GetWindow ( )->SetView ( this->Camera ) ;
    //this->Application->GetWindow ( )->SetView ( this->Application->GetWindow ( )->GetDefaultView ( ) ) ;
}


Danke schonmal.
Doch leider gibt es ein Problem.
Wenn ich Gas gebe ( W ) dann zoomt er raus.
Gut...
Doch wenn ich Bremese zoomt er zwar wieder ran ,a llerdings nicht in die Ursprungsposition.
Vorallem , wie soll ich das später mit der Reibung machen?
Das miteinbziehen der Reibung hab ich nun mal mit /**/ ausgeklammert.
Hoffe ich ihr könnt mir helfen.

MfG Stazer

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

18.12.2010, 13:14

da der zoomfaktor direkt mit der geschwindigkeit zutun hat kannst du ihn am ende der updatemethode daraus berechnen.

zoomfakter = 1 +/- geschwindigkeit/x

wobei x ein wert ist den du wohl ausprobieren musst. hab ich dir das nicht schon gestern gesagt?^^
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Stazer

Alter Hase

  • »Stazer« ist der Autor dieses Themas

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

8

18.12.2010, 13:38

Ja und ich habs probiert aber es hat nnie richtig funktioniert :D.
Bin total ratlos... :D

MfG Stazer

Werbeanzeige