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

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

21

25.06.2012, 22:47

Ich hatte das mal so implementiert das die große Tilemap in kleinere Chunks, z.B. 16x16 Tiles, zerlegt habe und jeden Chunk dann in einem VBO gespeichert habe. Dann kann man alles in jedem Frame brutforcen und trotzdem leicht rendern.

22

25.06.2012, 22:50



Ich hatte das mal so implementiert das die große Tilemap in kleinere Chunks, z.B. 16x16 Tiles, zerlegt habe und jeden Chunk dann in einem VBO gespeichert habe. Dann kann man alles in jedem Frame brutforcen und trotzdem leicht rendern.
ich hatte ähnliches vor, aber hier kommt wieder das problem mit den animationen ins spiel. hatte es dann letztendlich sein gelassen, muss aber jeder wissen, inwieweit er sich damit einschränken will/kann.

EDIT:
hier mal meine funktion, beginnt ab zeile 105, mag vll etwas kryptisch wirken, aber meine maps bestehen aus mehreren layern, sodass sich mehrere bodentiles übereinander kombinieren lassen.

23

26.06.2012, 04:01

Hey FreezingEngine,

könntest du deine Tile - Klasse mal posten ?
Why so serious ?

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

24

26.06.2012, 15:38

HPP:

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
#ifndef TILE_HPP
#define TILE_HPP

//SFML Includes
//
#include <SFML\Graphics.hpp>

class Tile
{
public:

    //SFML Instanzen
    sf::Sprite Sprite;

    //Variabeln
    bool Kollision;

    //Funktionen
    void SetPosition(int X,int Y);
    void SetImage(sf::Image &TileImage);

    //Konstruktor
    Tile();
};

#endif


CPP:

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
//Eigene Includes
//
#include "Tile.hpp"

//Konstruktor
//
Tile::Tile()
{

  // 

}

//Position setzen
//
void Tile::SetPosition(int X,int Y)
{
    //Position des Sprites setzen
    //
    Sprite.SetPosition(X,Y);
}

//Bild setzen Funktion
//
void Tile::SetImage(sf::Image &TileImage)
{
    Sprite.SetImage(TileImage);
}
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

25

26.06.2012, 16:08

ich kenne mich mit SFML nicht aus, daher:
benötigst du eigentlich ein Sprite-Objekt, um ein Image-Objekt auf den Bildschirm zeichnen zu können? (ich gehe mal davon aus, dass es auch eine Funktion für die Image-Objekte gibt)

ich würde eher dazu raten, in dem Tile direkt das Bild und die Variable "Kollision" zu speichern (sonst nichts) und alle Tiles in einem 2D-Array oder einem vergleichbaren Konstrukt (2 Indizes) zu speichern
der Index des Tiles entspricht dann der Position des Tiles und so kann man (bei rechteckigen Tiles) auch von vorn herein nur die Tiles durchgehen, die auch sichtbar sind (ohne die Koordinate in den Index der Liste umrechnen zu müssen)

vielleicht ist es ja in C++ anders als ich es gewohnt bin, aber die Membervariablen sollten schon privat sein und von Außen mittels Getter- und Setter-Methoden erreichbar sein (sofern überhaupt erforderlich)
wofür sonst gibt es die Methoden zum festlegen der Position und des Bilds, wenn man auch direkt auf das Sprite zugreifen kann (wenn ich mich dabei einfach mal an die aktuelle Struktur halte)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

26

26.06.2012, 16:14

Ok, um das ganze mal für den Threadersteller zusammenzufassen:

Zeichnest du immer die ganze Map? Wenn ja, versuch mal, nur zu zeichnen was auch potentiell sichtbar ist.
Wenn die Performance dann immer noch zu schlecht ist, dann fürchte ich, dass das mit SFML im Moment einfach nicht besser geht.
SFML basiert aber auf OpenGL und sollte relativ einfach damit zu kombinieren sein. D.h. für optimale Performance könntest du in deiner SFML Anwendung einfach nur das Map Rendering direkt mit OpenGL implementieren...

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

27

26.06.2012, 16:23

Ich habe einmal ein Komplettes Framework geschrieben, das hat Tilemaps unterstützt (war auch relativ schnell). Der Thread müsste auch noch irgendwo hier rumgammeln. (CBFramework)
Dieses verwendet die RenderImages von SFML. Läuft bei einem statischen Feld belibiger Größe so schnell, dass FPS keine Aussage liefern. Ist also gut genug für Spiele. Den Code darfste gerne verwenden, war eh Schrott xD
Den Tilemap- und Resourcemanager-Teil schreibe ich evtl nochmal neu, der war relativ gut, nur schlecht gecoded und ist inzwischen vermutlich inkompatibel mit den Current Prereleases von SFML 2.0.

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

28

26.06.2012, 18:03

Warum erbt Tile nicht einfach von Sprite? Dann hätte man Zugriff auf die Methoden.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

29

26.06.2012, 18:19

Ich hab die Getter/Setter Diskussion mal abgetrennt

Warum erbt Tile nicht einfach von Sprite? Dann hätte man Zugriff auf die Methoden.

Das halt ich im Allgemeinen für keine besonders Gute Idee. Ein Tile ist in der Regel imo rein konzeptuell sehr verschieden von einem Sprite...

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

30

26.06.2012, 19:47

Aber wenn in seiner Tilemap jedes Tile auf jeden Fall auch ein Sprite ist? Man kann es natürlich so handhaben wenn man keinen Zugriff von außen auf das Sprite erlauben will. Aber wenn es sowieso der Fall ist und man alleine am Projekt arbeitet ist das relativ egal. Dann bräuchte er die beiden Methoden immerhin schon mal nicht durchreichen.
Und es wäre auch übersichtlicher (zumindest ein ganz kleines Bisschen).

Werbeanzeige