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

1

10.01.2012, 22:52

[SFML] Tiles werden nicht richtig angezeigt

Hallo,

ich möchte gerne ein Tile von einem Tilesheet anzeigen. Das Problem ist nur, dass ein anderes (halb rot halb schwarz) was über dem zu zeichnenden Tile liegt, irgendwie "abfärbt". Denn ich habe so einen blassen roten strich am Rand.
Und ja ich hab alles richtig ausgeschnitten. Wenn ich ein paar rote Pixel auf dem zu zeichnenden Tile mache, sind diese viel deutlicher. Siehe Bild.

Was kann ich da machen?

Code:

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
        sf::RenderWindow _mainWindow;
    _mainWindow.Create(sf::VideoMode(800,600,32),"test", sf::Style::Close );
    _mainWindow.Draw(sf::Shape::Rectangle(0, 0, _mainWindow.GetWidth(), _mainWindow.GetHeight(), sf::Color(0xff,0xff,0xff)));

    sf::Image image;
    image.LoadFromFile("image.bmp");
    sf::Sprite sprite(image);

    for(int i = 0; i<10; i++)
    {   
       int posX = 60;
       int posY = 60;
       int X = 0;
       int Y = 1;
       sf::IntRect Rect(posX*X,posY*Y,posX*X+posX,posY*Y+posY);

       sprite.SetSubRect(Rect);
       sprite.SetX(60);
       sprite.SetY(i*60+20);

       _mainWindow.Draw(sprite);
    }

    _mainWindow.Display();
»Zerod« hat folgendes Bild angehängt:
  • Unbenannt.png

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

11.01.2012, 06:46

Lass Platz zwischen den Tiles in deiner Tile-Map. Dieses Abfärben von benachbarten Pixeln tritt auf, wenn Du die Tiles skaliert darstellt, denn da werden bei der Skalierung der Tiles die umgebenden Pixel unter Umständen mit in das finale Ergebnis eingerechnet. Je mehr Du skalierst, desto größer wird dieser Raum, der mit in das finale Ergebnis einbezogen wird. Wenn Du sie gar nicht skalierst, dann hast Du wohl einfach die falschen Koordinaten.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

11.01.2012, 11:15

Ich hab die Tiles eigentlich überhaupt nicht skaliert. Aber was den für falsche Koordinaten. Alle werte sind ganzzahlige.

Forang

Frischling

Beiträge: 23

Wohnort: Wesel

Beruf: Schule

  • Private Nachricht senden

4

11.01.2012, 14:06

Probier mal image.SetSmooth(false);
Das Problem wurde hier aber auch schon mehrmals besprochen (z.B. www.spieleprogrammierer.de/15-2d-und-3d-…lem/#post214507)

5

11.01.2012, 14:10

Eine schlechte Positionsauswahl war damit gemeint, nicht der Typ.
Ich persönlich verstehe nicht, warum du ein Subrect setzt, wo du doch einfach das Bild beschneiden könntest, lädt ja dann auch schneller. :D

MfG
Check

6

11.01.2012, 14:42

weil ich dann einfach eine Tilemap Laden kann auf der dann 10 verschiedene Tiles liegen und dann kann ich ja mit nem kleinen Tile Manager sagen: "myTiles.getTile(3,5)". Außerdem möchte ich noch Animationen machen bei dem ich ja auch so ein Spritesheet hab auf dem alle Player Animationen sind und ich muss dann nur sagen dass er nach X Frames einen anderen Bildausschnitt zeigen soll. Hab ich jetzt z.b. Tile Animationen bei dem die Wasser Animation an der Lava Animation liegt hab ich dann ja auch immer nen roten bzw. nen blauen Strich^^.
Nutzen die Profis nicht auch Tile bzw Sprite Sheets oder gucken die auch das da immer genug platz zwischen ist?


PS.: Nachdem ich alle Antworten gelesen hab hab ich mal setSmooth(false) ausprobiert und JA es tut THX

7

11.01.2012, 14:53

Das war mir schon klar. Nur bei dem momentanem Syntax macht das eben wenig Sinn.

MfG
Check

Werbeanzeige