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

idontknow

unregistriert

1

16.11.2009, 21:40

[sfml] Sprite Move lauft nicht -> Fehlersuche erfolglos

moin!

Hab mal wieder ein Problem, hab Debugger benutzt alle (imo) relevanten Funktionen und ifs durchgekuckt, soweit passt alles, aber der sprite bewegt sich nicht!
Ich poste mal den relevanten Code! Hilfe wäre net wird vermutlich wieder ein mega banaler Fehler sein :(



C-/C++-Quelltext

1
2
3
4
// Game Loop!

MyGame->Move(Window->GetFrameTime());
MyGame->Render();
Window->Display();


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
bool CGame::Move(int fFrameTime)
{
    bool B = false;
    if(m_TheBall != 0)
    {
        m_TheBall->Move(fFrameTime);
    }
    B = m_PlayerPaddleRight->Move(fFrameTime) ? B = true : B = false;
    B = m_PlayerPaddleLeft->Move(fFrameTime) ? B = true : B = false;

    return B;
};

Der Ballpointer wird anfangs auf 0 gesetzt, dann ird ein ball erstellt, fleigt der aus dem Spielfeld, wird er gelöscht auf 0 gesetzt und ein neuer erstellt. Das passt, die IFs werden ausgeführt, wie es sein soll!
Die Paddels sind atm unrelevant, der Rückgabe wert "B" auch!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
bool CBall::Move(int fFrameTime)
{
// [...] (auskommentiert, danicht releavant zum Test!!)


    m_vPosition.x = m_vPosition.x + (m_vVelocity.x * fFrameTime);
    m_vPosition.y = m_vPosition.y + (m_vVelocity.y * fFrameTime);
    setPosition(m_vPosition.x, m_vPosition.y);
    
    return false;
};


so. Hier wird die Position neu gesetzt und die move methode der vball klasse aufgerufen. höngt damit zusammen, dass sfml die spirtes relativ zur linken oberen ecke bewegt ich aber bewegung relativ zum mittelpunkt haben wollte!

C-/C++-Quelltext

1
2
3
4
5
6
void CBall::setPosition(int x, int y)
{
    m_vPosition.x = x;
    m_vPosition.y = y;
    m_Sprite.SetPosition((int)(x - 0.5 * m_Diameter), (int)(y - 0.5 * m_Diameter));
};


Das soillte alles relevante sein, der Render Vorgang wird einmal durchgeführt (alles erscheint wie es sein soll, bis auf dass sich der Ball nicht bewegt!!) und sollte passen!

Findet wer den fehler pls :)

mfg

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

2

16.11.2009, 22:05

Zitat

bool CGame::Move(int fFrameTime)


C-/C++-Quelltext

1
bool CGame::Move(float fFrameTime)


Weiterhin kannst du den Ursprung des Sprites auch beliebig verschieben. Dann musste nicht rumrechnen.

goldfisch007

Alter Hase

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

3

16.11.2009, 22:05

Re: [sfml] Sprite Move lauft nicht -> Fehlersuche erfolgl

Zitat von »"idontknow"«

[...]der Render Vorgang wird einmal durchgeführt [...]


hab nich so den plan aba: wenn der render vorgang 1x ausgeführt wird, dann zeichnet der doch exakt eine position oder?

demnach denke ich sollte der render vorgang wohl so oft ausgeführt werden, bis sich der ball(? wars doch oder) zu ende bewegt hat....

das wäre zumindest die banale lösung ma gucken wie falsch ich liege ;)
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

idontknow

unregistriert

4

16.11.2009, 22:10

hat sich dank unsigned_long erledigt, war ein type fehler wodurch frametime zu 0 wurde (multiplikation -> bewegung = 0)

unsigned long

Treue Seele

Beiträge: 140

Wohnort: Herzogenrath

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung

  • Private Nachricht senden

5

16.11.2009, 22:11

harhar ^^ sieg ^^

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

6

16.11.2009, 22:14

Zitat von »"unsigned long"«

harhar ^^ sieg ^^


Ach komm, du mit deinen 12 Posts :D

unsigned long

Treue Seele

Beiträge: 140

Wohnort: Herzogenrath

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung

  • Private Nachricht senden

7

16.11.2009, 22:15

Och auf die 10k komm ich schnell wieder rauf ^^

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

8

16.11.2009, 22:16

kleiner tipp:
dieses gebilde:

C-/C++-Quelltext

1
B = m_PlayerPaddleRight->Move(fFrameTime) ? B = true : B = false;

macht das gleiche wie:

C-/C++-Quelltext

1
2
3
4
if(m_PlayerPaddleRight->Move(fFrameTime))
b = b = true;
else
b = b = false;


es sollte reichen wenn du das so schreibst:

C-/C++-Quelltext

1
B = m_PlayerPaddleRight->Move(fFrameTime);


du kannst den zurückgegebenen wert also gleich zuordnen
"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?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

9

16.11.2009, 22:22

Zitat von »"unsigned long"«

Och auf die 10k komm ich schnell wieder rauf ^^


Jaja.. ganz so viele waren es (zumindest hier) auch wieder nicht. ;) :p

Aber Willkommen zurück auf jeden Fall! (ich habs gewusst, dass du es nicht lassen kannst. :p)

unsigned long

Treue Seele

Beiträge: 140

Wohnort: Herzogenrath

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung

  • Private Nachricht senden

10

16.11.2009, 22:31

thx

Werbeanzeige