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

21

25.10.2012, 00:09

Ich bin den Code mit Breakpoints durchgegangen, jedoch habe ich den Fehler nicht gefunden. Zeile 125 wird ausgeführt, eigentlich müsste es doch dann funktionieren.
Mir ist nur aufgefallen dass ich in Zeile 116 this.Shot geschrieben habe. Ich habe das jetzt in Shot geändert. Außerdem wird Zeile 214 nie ausgeführt. Ich weiß aber nicht warum ?(

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

22

25.10.2012, 01:20

Ich weiß aber nicht warum ?(

du kannst ja erstmal mit dem Debugger probieren, den Fehler zu finden
diese Stelle wird ja ausgeführt, wenn Remove auf false gesetzt ist
wo wird Remove überall gesetzt?
welche der Stellen könnte Schuld daran sein, dass der Codeteil nicht aufgerufen wird?
oder wird die Methode an sich gar nicht aufgerufen?
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

23

25.10.2012, 13:44

Ich bin den Code in der Bullet-Klasse mit Breakpoints durchgegangen und musste feststellen dass die Remove-Zeilen 190, 195, 200 und 205 nach einiger Zeit ausgelöst werden. Trotzdem finde ich den Fehler nicht und verstehe auch nicht warum die Kugeln nicht gezeichnet werden ?( Bevor eine Remove-Zeile ausgelöst wird, müssten die Kugeln doch gezeichnet werden. So wie es scheint fliegen unsichtbare Kugeln durch die Gegend. Und wenn eine Kugel die Grenze berührt wird Remove auf true gesetzt.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

24

25.10.2012, 14:23

Da hast du doch schon recht viel raus gefunden. Die Kugeln werden also erzeugt und irgendwann auch gelöscht. Dazwischen werden sie aber nicht gerendert. Setz doch mal einen Breakpoint direkt in die Render-Methode der Bullet Klasse. Quasi in Zeile 212. Dann guck mal ob die Render-Methode von der Klasse aufgerufen wird.
Ich finds gut dass du dir so helfen lässt und nicht entnervt auf eine Antwort wartest. So hast du einen viel viel größeren Lerneffekt. Darum gehts hier ja:) Also Lob an dich, dass du es so annimmst.
„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.“

25

25.10.2012, 20:29

Der Breakpoint in Zeile 212 wird nie ausgelöst, auch nicht nachdem ich aus den beiden foreach-Scheifen aus der Draw-Methode der Map-Klasse for-Schleifen gemacht hatte. Aber das dachte ich mir schon. Wäre ja zu einfach gewesen.
Die beiden Zeilen 184 und 186 werden auch ausgelöst und Remove ist dabei auf false. Deswegen verstehe ich nicht warum das Remove in Zeile 212 nicht ausgelöst wird ?(

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

26

25.10.2012, 23:45

Er kommt erst gar nicht zu der If-Abfrage. Das bedeutet, dass die Render-Methode niemals aufgerufen wird. Guck doch mal wo die Render-Methode aufgerufen werden soll und ob sie da aufgerufen wird. Also nicht in der Bullet Klasse gucken sondern eine Schicht darüber.
„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.“

27

26.10.2012, 11:12

Meinst du mit einer Schicht drüber die Draw Methode in der Map-Klasse? Die bin ich nämlich schon durchgegangen und ich habe bemerkt dass die Zeile bullet.Draw(batch, myBullet); nicht ausgelöst wird. Ich weiß aber nicht woran das liegt.

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void Draw(SpriteBatch batch){
        batch.Draw(hintergrund, new Rectangle(0, 0, 1280, 720), Color.White);
        Player.Draw(batch);
        for (int i = enemieslist.Count - 1; i >= 0; i--) 
        {
            Enemy enemy = enemieslist[i];
            enemy.Draw(batch, myEnemy);
        }
        for (int i = bulletslist.Count - 1; i >= 0; i--) 
        {
            Bullet bullet = bulletslist[i];
            bullet.Draw(batch, myBullet);
        } 
}      

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

28

26.10.2012, 11:22

wenn man es abstrakter formulieren will, würde man sagen:
für jedes Projektil der Projektilliste wird die Draw-Methode aufgerufen
und genau dies wird erfüllt
und wie viele Projektile gibt es wenn keins und gleichzeitig alle dargestellt werden?

setze doch mal vor die Schleife einen Breakpoint ;)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

29

26.10.2012, 13:38

Wenn ich einen Breakpoint vor die for Schleife setze, bekomme ich folgende Ergebnisse:
bulletslist.Count = 0
i= -1
Ist das nicht richtig so? Ganz am Anfang gibt es ja noch keine Projektile.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

30

26.10.2012, 14:36

ändert sich das denn jemals?
wo werden _dieser_ Liste denn die Projektile hinzugefügt?
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige