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

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

11

21.10.2012, 19:08

Sind map_x und map_y richtig gesetzt? Setz mal einen Breakpoint in die Renderfunktion und geh Schritt für Schritt mit dem Debugger durch. Dann guck mal ob da alles richtig aufgerufen wird. Dort kannst du auch noch mal Werte überprüfen.
„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.“

12

21.10.2012, 20:19

map_x und map_y sind richtig. An jedem Punkt des Programms sind die Werte der Variablen richtig.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

13

21.10.2012, 21:19

Das hast du mit dem Debugger rausgefunden? Hast du Breakpoints gesetzt und in der Rendermethode mal geguckt was welche Werte hat? Und fürs rendern wird alles richtig übergeben? Wenn du wirklich sicher bist dass die Antwort ja heißt, dann ist gut. Ansonsten setz dich mit dem Thema noch mal auseinander. Ansonsten könntest du gucken was passiert wenn du einen Teil der Map zeichnest. Also einfach nur ein Stück der Grafik unabhängig von den Daten der Karte. Oder die Textur der Karte. Vielleicht liegt hier ein falsches Format vor, welches nicht geladen wird und dadurch gibt es diesen Bug. Hab von SFML keine Ahnung. Probiers mal.
„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.“

14

21.10.2012, 22:17

Hab die ganze Klasse mal ein wenig umgeschrieben, bekomm aber nur 1 Tile (32*32) gezeichnet. Werte stimmen also an sich schon.
Sobald ich weitere Ergebnisse bringen kann, werde ich meine Lösung hier für zukünftige SFML'er posten.

Nimelrian

Alter Hase

Beiträge: 1 216

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

  • Private Nachricht senden

15

21.10.2012, 22:33

Übrigens als kleiner Tipp:

C-/C++-Quelltext

1
2
3
4
5
image.loadFromFile("graphics/boden.png");
  if(!image.loadFromFile("graphics/boden.png"))
    {
      std::cout << "boden.png konnte nicht geladen werden!\n";
    }


Kannst du auch wesentlich kürzer als

C-/C++-Quelltext

1
2
if(!image.loadFromFile("graphics/boden.png"))
  std::cout << "boden.png konnte nicht geladen werden!\n";


schreiben.

Damit sparst du einen image-load (Die kosten jede Menge Performance, besonders, da du das ganze momentan noch bei jedem Rendern neu lädst) und die Klammern beim if
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

16

21.10.2012, 23:52

und die Klammern beim if

... sind Geschmackssache. Ich mache z.B. grundsätzlich Klammern hin.
Beim Rest stimme ich zu.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

17

22.10.2012, 00:10

Ist überhaupt keine schlechte Angewohnheit mit den Klammern. Kann schnell zu Problemen führen wenn man die weg lässt. Ist bei uns bei der Arbeit teilweise Pflicht Klammern zu setzen. Wie gesagt, wenn du schreibst du hast was an der Klasse angepasst kann dir dadurch keiner Helfen. Du musst uns den Code zeigen. Manchmal reicht es auch wenn man erklärt, was man gemacht hat. Vor allem bei Anfängern ist es aber besser den Code zu sehen. Sonst kann es schnell zu Missverständnissen führen. Aber auch bei Fortgeschrittenen und Profis ist es oft gut wenn man Code sieht.
Auf meinen Beitrag bist du auch nicht eingegangen. Wie sieht es nun aus mit dem Debugger? Debugging bedeutet mehr als oben auf Debug zu klicken. Ich möchte dir nichts unterstellen aber oft wird davon ausgegangen, dass sei schon alles. Und wie ist es mit der einzelnen Ausgabe? Wobei du ja nun etwas siehst. Aber liegt das an deinem Code? Sprich hat du es umgeschrieben dass nur ein Tile angezeigt wird oder ist das ein anderer Nebeneffekt. Stimmen möglicherweise die Koordinaten nicht und er malt die Tiles alle übereinander? Dann würde nur das zuletzt gemalte Tile angezeigt werden. Je nach Farbe sieht es vielleicht aus wie der Hintergrund.
„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.“

Flutschi

Treue Seele

Beiträge: 90

Wohnort: Schweiz

  • Private Nachricht senden

18

22.10.2012, 00:23

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        void DrawMap(sf::RenderTexture &rMap, sf::RenderWindow &Spiel)
        {
            for(int i = 0; i < map_x; i++)
            {
                for(int j = 0; j < map_y; j++)
                {
                    sf::Sprite sprite;
                    sprite.setTexture(textur);
                    if(map[i][j] >= 0)
                    {
                        sprite.setTextureRect(sf::IntRect(map[i][j]*32, 0, 32, 32));
                        sprite.move(i, j);
                    }
                    rMap.draw(sprite);
                }
                rMap.display(); <------ brauchts das vieleicht?
            }

            sf::Sprite sMap(rMap.getTexture()); // Karte laden
            Spiel.draw(sMap); // Karte zeichnen
        }


Fehlt dir nicht ein rMap.display() ? (habs oben eingefügt..)

http://www.sfml-dev.org/documentation/2.…nderTexture.php
♥ SFML 2.0 Visual Express 2010 ♥

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

19

22.10.2012, 00:38

Wie gesagt, ich habe keine Ahnung von SFML, aber soweit ich das richtig sehe, setzt du mit SetTextureRect nicht einen Teil deiner Sprite, sondern einen Teil der Textur als Bild für die Sprite. Heißt du überschreibst die Textur einfach sehr sehr oft. Heißt, deine Sprite hat als Textur das letzte Tile was in deiner Map ist. Deswegen wird dir auch immer nur ein Tile angezeigt. Vorher hattest du sicherlich dass Problem, dass das letzte Tile eben aussah wie der Hintergrund und du deswegen nichts gesehen hast.

Edit: Hab mir den Code noch mal angeguckt und es sollte doch passen. Mein Fehler. Allerdings übergibst du bei "Move" i und j. Du möchtest aber vermutlich i*32 und j*32 übergeben.
„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.“

20

22.10.2012, 14:05

Habe heute wieder eine Weile dran rumgefuscht und bin nun wieder auf altem Stand. Weiterhin nichts.

@Schorsch:
Wenn ich die Werte einzeln ausgebe, stimmen sie.
Im Debugger stimmen sie ebenfalls.
Aber das *32 hatte ich bei i und j wirklich vergessen, danke dafür.
So wie ich es oben gemacht habe, hat es ähnlich ohne Klasse funktioniert. Habe aber mal (danke an eXpl0it3r) eingestellt, dass er nach jedem Textur auswählen resettet und auch 100% die richtige Textur nimmt. Aber selbst wenn es die falsche Textur bzw. nicht vorhandene Textur wäre, wäre ein weißes Feld vorhanden.
Hintergrund ist schwarz und keins der Tiles ist schwarz, daher sieht es nicht wie der Hintergrund aus.


@Flutschi:
rMap.display() eingefügt, bringt aber auch nichts.
Zeichne es ja in das RenderWindow und da wird das Display in der Hauptschleife aufgerunfen.

Werbeanzeige