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

Dreat

Frischling

  • »Dreat« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Heilbronn

  • Private Nachricht senden

1

08.05.2013, 20:05

[Gelöst]Funktion wird nicht ausgeführt

Hallo erstmal,

ich habe folgendes Problem, ich habe eine Klasse "Player" diese erbt von der Klasse "Sprite". In der Sprite Klasse gibt es eine Funktion "move( x, y )".
Jetzt wollte ich in der Eventschleife über den Tastendruck "W" die Funktion "movePlayer()" aus der Player Klasse aufrufen in dieser werden x und y ausgerechnet und an die move(x, y ) Funktionübergeben und diese auch aufgerufen.

Edit: Hab vergessen zu erwähnen, ich benutz die SFML 2.0.

Eventschleife:

C-/C++-Quelltext

1
2
3
else if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) ){
                            player.movePlayer();
                        }


Playerklasse:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void Player::movePlayer(){

         x = 1.5f * cos( playerAngle );
         y = 1.5f * sin( playerAngle );
    move( x, y );
    
    
}


Spriteklasse:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void cSprite::move( float x, float y ){

    sfSprite.setPosition( vfPos.x+x, vfPos.y+y );

    vfPos.x += x;
    vfPos.y += y;

}


Die Funktion wird aufgerufen hab ich schon mit Haltepunkten überprüft, nur es passiert nichts wenn ich die move Funktion allerdings im render Teil aufrufe geht es.

Vielleicht weiß ja jemand woran es liegen könnte.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Dreat« (08.05.2013, 20:57)


Fourb

Treue Seele

Beiträge: 122

Beruf: Schüler

  • Private Nachricht senden

2

08.05.2013, 20:21

Entweder ich bin blind, oder es gibt da wirklich keinen Fehler.


Spontan würde ich denken, dass playerAngle kein Wert zugewiesen wurde. Wieso hast du für sfSprite.setPosition(x, y) einen extra Vector angelegt? Da würde ich gleich Getters + Setters kombinieren.
42 / Pi = 13,37

Dreat

Frischling

  • »Dreat« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Heilbronn

  • Private Nachricht senden

3

08.05.2013, 20:30

Edit: Oh nein wie peinlich ich hatte in der Framework Klasse noch eine 2te player Instanz mit dem selben Namen und die 2te wurde gerendert und die 1te bewegt :dash:
trotzdem danke.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Dreat« (08.05.2013, 20:56)


Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

4

08.05.2013, 20:59

Du hast übrigens das Prinzip der Vererbung nicht ganz verstanden.

Merke dir zur Vererbung einfach die "ist etwas"-Beziehung. Ist ein Player ein Sprite? Nein, eher nicht. Hat der Player ein Sprite? Das passt schon eher.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Dreat

Frischling

  • »Dreat« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Heilbronn

  • Private Nachricht senden

5

08.05.2013, 21:09

Dann sollte ich eher eine Instanz der cSprite Klasse in der Player Klasse machen?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

08.05.2013, 23:19

Genau das;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige