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

moritz31

Treue Seele

  • »moritz31« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hessen

Beruf: Student

  • Private Nachricht senden

11

03.05.2011, 18:41

hab nochma ne frage jetzt.
hab mir jetzt für mein gegner ne klasse geschrieben, die folgenden inhalt hat,

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
private:
    int x;
    int y;
    sf::Sprite Player;
    sf::Window &Window;
    sf::Sprite Gegner;
public:
    void checkPosition(sf::RenderWindow &Window,sf::Sprite Player,sf::Sprite Gegner);
    void move(sf::RenderWindow &Window,sf::Sprite Sprite);


das Porblem liegt jetzt bei der Funktion check Position, dort werden die x und y werte genau wie ich es will verändert, jedoch wird das sprite mit der funktion move nicht bewegt

12

03.05.2011, 20:47

Also erstmal frage ich mich warum du in der Gegner-Klasse ein Sprite für den Spieler hast?! Dann überlege ich warum du, wenn du schon eine Referenz aufs Fenster hast und das Sprite des Spieler in die Klasse kopierst, die Methoden mit einer Parameterliste austattest, die genau das erwartet, was eh schon Teil der Klasse ist.

Warum verändert eine Methode, die den Namen checkPosition() trägt denn die Koordinaten deines Gegners?

Und zu guter Letzt können wir dir wohl nicht sagen, warum sich dein Sprite nicht bewegt, wenn du uns nicht den Quellcode zu deiner move-Funktion zeigst und den Kontext in dem sie aufgerufen wird.

Gruß
SaRu_

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

13

03.05.2011, 20:58

Das wird wohl daran liegen, dass du die Kopie bearbeitest bevor sie zerstört wird. :D
Mal ganz davon abgesehen, dass eine Methode keine Referenz(oder Kopie xD) auf ein Element des Objects genötigt, um es zu bearbeiten, solltest du dir vielleicht nochmal dein Buch schnappen und die Kapitel über Referenzen und Zeiger durchlesen.
"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?

moritz31

Treue Seele

  • »moritz31« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hessen

Beruf: Student

  • Private Nachricht senden

14

03.05.2011, 21:56

ich muss ja aber ne Referenz auf Window machen um es an die Funktion zu übergeben.

checkPosition Quellcode:

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
void KI :: checkPosition(sf::RenderWindow &Window,sf::Sprite Player,sf::Sprite Gegner)
{
        

        if(Player.GetPosition().x >= Ki.GetPosition().x)
        {
            
            x = 200;
            
            
        }

        if(Player.GetPosition().x <= Ki.GetPosition().x)
        {
            
            x = -200;
            
        }

        if(Player.GetPosition().y >= Ki.GetPosition().y)
        {
            
            
            y = 200;
            
        }

        if(Player.GetPosition().y <= Ki.GetPosition().y)
        {
            
            y = 200;
            
        }

        
};

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

15

03.05.2011, 22:21

Das Sprite enthält einen Vector mit der Position. In dem ist die Position des Sprites gespeichert(welch Überraschung). Um das Sprite zu bewegen musst du den Vector bearbeiten(mit SetPosition oder Move) . Du brauchst die Variablen x und y eigentlich garnicht.
"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?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

16

03.05.2011, 22:36

Ja aber was macht die Funktion mit Window? Du prüfst Schwellenwerte und setzt die Position neu. Großer Tipp und nimm ihn bitte ernst. Am Anfang kleine "sinnfreie" Programme schreiben, um die eigenen Fähigkeiten zu erweitern. Danach langsam steigern. Nicht zu früh zu viel wollen. Sieht mir stark danach aus.
„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.“

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

17

04.05.2011, 12:50

ich muss ja aber ne Referenz auf Window machen um es an die Funktion zu übergeben.

Ja du musst es machen, weil wir es dir im anderen Thread gesagt haben. Aber du hast leider noch überhaupt nicht verstanden, was Referenzen sind und warum man sie zu welchem Zeitpunkt verwenden sollte. Tut mir leid, aber dir fehlen in dieser Hinsicht einfach Grundlagen. Nimm dir ein Buch und ließ es und dann wirst dir so einiges klar werden.
Dein Sprite wird deswegen nicht bewegt, weil du eine Kopie eines Sprites anlegst(die nur innerhalb der Funktion existiert), diese bewegst und sie anschließend wieder zerstört wird. Das was du da bewegst, ist einfach nicht das Sprite, das du bewegen willst.

Edit: Stell es dir einfach so vor. Du leihst dir ein Buch von einem Freund aus und kopierst dir einige Seiten des Buches und versiehst diese Seiten mit deinen Notizen. Wenn du dem Freund das Buch wieder gibst, dann weiß er nicht, dass du diese Notizen gemacht hast und wird sich auch nicht über sein verunstaltetes Buch beschweren. Du willst allerdings direkt in das Buch krakeln. Denn der Freund soll lesen, was du im Buch verändern möchtest und das klappt nur, wenn du nicht die Seiten kopierst, sondern direkt reinmalst.

Werbeanzeige