2D-Programmierung - Welcher Weg ist der Beste?
-
Danke euch erst mal.
Ich hab nun mal das SFML Package installiert. Jetzt findet der aber das "-lsfml-system", das in den Linker Options steht (benutze Code::Blocks) nicht.
In der Anleitung steht ja, dass man die *.a files in den /lib-Ordner kopieren muss. Jetzt sind da aber 2 Verzeichnisse namens "static" und "dynamic" drin. Soll ich die jetzt alle durcheinander in den lib-Ordner würfeln?
edit: Habe genau das getan und es geht jetzt. Sorry^^
edit: Anderes Problem: Ich hab mir gerade das Beispiel hier
http://www.sfml-dev.org/tutorials/1.3/graphics-window.php
gezogen und probiert.
Fehler:
\programming\graphics-window.cpp||In function `int main()':|
\programming\graphics-window.cpp|9|error: 'class sf::RenderWindow' has no member named 'IsOpened'|
\programming\graphics-window.cpp|17|error: 'class sf::RenderWindow' has no member named 'Close'|
||=== Build finished: 2 errors, 0 warnings ===|
-
Mr X schrieb:
Schneller als SDL ist SFML in jedem Fall, je nach Rechner auch schon mal 3000%(Hab ich nicht nachgeprüft, aber SFML ist performanter als DarkGDK)
*rofl* Quelle?
Aber ja ne, ist klar, deswegen verwendet z. B. UT2004 unter Linux auch SDL, weil das ja so langsam ist

SDL ist eine C-API und bietet nicht so viel wie SFML, aber richtig benutzt ist SDL gleich performant wie SFML (ja, auch unter Windows). Aber die Diskussion hatten wir IIRC im Forum schon mal. Trotzdem: bitte denk nach bevor du Schwachfug schreibst.
EDIT: einem Anfaenger empfehle ich natuerlich trotzdem auch SFML
-
Und genau deshalb scheint mir SFML jetzt eine gute Lösung...
Ich kämpfe noch etwas, aber es wird schon klarer. Ich melde mich nochmal, wenn ich Probleme haben sollte...
-
Blue-Tiger schrieb:
*rofl* Quelle?
http://www.sfml-dev.org/forum/viewtopic.php?t=43
Blue-Tiger schrieb:
Aber ja ne, ist klar, deswegen verwendet z. B. UT2004 unter Linux auch SDL, weil das ja so langsam ist

Nur, um das OpenGL Fenster aufzumachen und die Userinputs zu verarbeiten (AFAIK). Da dort OpenGL benutzt wird, ist es wurscht, ob man SFML oder SDL nimmt.
Blue-Tiger schrieb:
SDL ist eine C-API und bietet nicht so viel wie SFML, aber richtig benutzt ist SDL gleich performant wie SFML (ja, auch unter Windows). Aber die Diskussion hatten wir IIRC im Forum schon mal. Trotzdem: bitte denk nach bevor du Schwachfug schreibst.
Im 3D-Bereich sollten sie sich, s.o., nichts tun, da beide ja OpenGL dafür nutzen. Bei 2D nutzt SFML ebenfalls OpenGL, aber SDL nimmt irgendwas, was da ist (das kann durchaus etwas ohne Hardwarebeschleunigung sein, daher langsamer). Es kommt natürlich auf den Programmierer an, wie er mit den Dingern arbeitet, aber provokativ kann man schon sagen, dass SFML schneller läuft.
Also, bevor man was von "Schwachfug" postet, erstmal einen Gang zurück und selber nachdenken

-
Blue-Tiger schrieb:
Mr X schrieb:
Schneller als SDL ist SFML in jedem Fall, je nach Rechner auch schon mal 3000%(Hab ich nicht nachgeprüft, aber SFML ist performanter als DarkGDK)
*rofl* Quelle?
Aber ja ne, ist klar, deswegen verwendet z. B. UT2004 unter Linux auch SDL, weil das ja so langsam ist

SDL ist eine C-API und bietet nicht so viel wie SFML, aber richtig benutzt ist SDL gleich performant wie SFML (ja, auch unter Windows). Aber die Diskussion hatten wir IIRC im Forum schon mal. Trotzdem: bitte denk nach bevor du Schwachfug schreibst.
EDIT: einem Anfaenger empfehle ich natuerlich trotzdem auch SFML
Es geht hier in diesem Thread(siehe Überschrift) um 2d, und da ist SFML angeblich(wie ich bereits schrieb) deutlich schneller. Quelle:
http://www.sfml-dev.org/forum/viewtopic.php?t=43&start=0Das sind zwar angaben der Fangemeinde und das Benchmark-Programm ist vom SFML-Entwickler geschrieben, aber angesichts dieser gewaltigen Performance Unterschiede(bezogen auf 2d) wird da schon irgendetwas wares dran sein, und das SFML schneller ist als DarkGDK habe ich selber erlebt(wieder nur 2d)
Ansonsten: Vielleicht bevor Du anderen Schwachfug in die Schuhe schiebst erstmal vielleicht nachfragen, wie ich darauf komme...

mfg
Philipp
-
Sorry nochmal...
Ich versuche jetzt was mit Fenstern zu machen, was aber nicht geht.
Ich habe, wie hier http://www.sfml-dev.org/tutorials/1.3/window-window.php beschrieben, die SFML/Window.hpp includiert und in die Main geschrieben:
sf::Window App(sf::VideoMode(800, 600, 32), "SFML Window");Als Fehler kommt:
obj\Debug\main.o||In function
main':| C:\\Projects\\sfml\\sfml_test\\main.cpp|36|undefined reference tosf::VideoMode::VideoMode(unsigned int, unsigned int, unsigned int)'|
C:\Projects\sfml\sfml_test\main.cpp|36|undefined reference tosf::Window::Window(sf::VideoMode, std::string const&, unsigned long, int)'| C:\\Projects\\sfml\\sfml_test\\main.cpp|68|undefined reference tosf::Window::~Window()'|
C:\Projects\sfml\sfml_test\main.cpp|68|undefined reference to `sf::Window::~Window()'|
||=== Build finished: 4 errors, 0 warnings ===|Der findet das anscheinend nicht... Aber die Datei ist da.
-
hast du auch die libs eingebunden und dies auch in der richtigen Reihenfolge?
mfg ligginator
-
In den Tutorials auf der SFML-Homepage sollte eigentlich alles erklärt sein. Im Forum findest du auch viele Problemlösungen.
-
Ich hatte ein paar Linker Options vergessen.
Der Witz ist jetzt:
Im Tut hier http://www.sfml-dev.org/tutorials/1.3/window-events.php
wird App.Close aufgerufen.
Aber anscheinend gibt es die Methode Close gar nicht.
Window.App gibts,
Window.Display gibts,
und ne Menge mehr, aber KEIN Close. Es wird mir nicht mal vorgeschlagen. Da kann doch was nicht stimmen...
-
mad_martin schrieb:
Nur, um das OpenGL Fenster aufzumachen und die Userinputs zu verarbeiten (AFAIK). Da dort OpenGL benutzt wird, ist es wurscht, ob man SFML oder SDL nimmt.
Im 3D-Bereich sollten sie sich, s.o., nichts tun, da beide ja OpenGL dafür nutzen. Bei 2D nutzt SFML ebenfalls OpenGL, aber SDL nimmt irgendwas, was da ist (das kann durchaus etwas ohne Hardwarebeschleunigung sein, daher langsamer). Es kommt natürlich auf den Programmierer an, wie er mit den Dingern arbeitet, aber provokativ kann man schon sagen, dass SFML schneller läuft.
SFML benutzt intern (auch fuer 2D) OpenGL. Und wenn du 'schnelles' SDL haben willst, musst du auch dort OpenGL verwenden. Daher meine Aussage "richtig benutzt ist SDL gleich schnell wie SFML". Und natuerlich weiss ein Anfaenger sowas nicht, daher ists auch gut, einem Anfaenger SFML zu empfehlen - ein fortgeschrittener Benutzer wird selbst abschaetzen koennen, ob er lieber direkt auf OpenGL programmiert oder die Power gar nicht benoetigt und deshalb die komfortablere API benutzt.
Wie gesagt hatten wir genau diese Diskussion schon mal hier, da ging es um genau den gleichen (schwachfugigen ;p) Thread auf dem SFML-Board. Natuerlich gewinnt Software-SDL nicht gegen Hardware-SFML.
Uebrigens wird genau das auch am Ende des von euch verlinkten Threads erwaehnt:

Your benchmarks are severly flawed. You are comparing the software, 2D library that ships with SDL to OpenGL. Of course you are going to get a huge difference in performance - you don't even need to perform a benchmark to understand that.
I perfectly know that, this benchmark is basically just for beginners who might not be aware of the technical details, and wonder how SFML compares to a well known multimedia library.
-
Blue-Tiger schrieb:
mad_martin schrieb:
Nur, um das OpenGL Fenster aufzumachen und die Userinputs zu verarbeiten (AFAIK). Da dort OpenGL benutzt wird, ist es wurscht, ob man SFML oder SDL nimmt.
Im 3D-Bereich sollten sie sich, s.o., nichts tun, da beide ja OpenGL dafür nutzen. Bei 2D nutzt SFML ebenfalls OpenGL, aber SDL nimmt irgendwas, was da ist (das kann durchaus etwas ohne Hardwarebeschleunigung sein, daher langsamer). Es kommt natürlich auf den Programmierer an, wie er mit den Dingern arbeitet, aber provokativ kann man schon sagen, dass SFML schneller läuft.
SFML benutzt intern (auch fuer 2D) OpenGL. Und wenn du 'schnelles' SDL haben willst, musst du auch dort OpenGL verwenden. Daher meine Aussage "richtig benutzt ist SDL gleich schnell wie SFML". Und natuerlich weiss ein Anfaenger sowas nicht, daher ists auch gut, einem Anfaenger SFML zu empfehlen - ein fortgeschrittener Benutzer wird selbst abschaetzen koennen, ob er lieber direkt auf OpenGL programmiert oder die Power gar nicht benoetigt und deshalb die komfortablere API benutzt.
Wie gesagt hatten wir genau diese Diskussion schon mal hier, da ging es um genau den gleichen (schwachfugigen ;p) Thread auf dem SFML-Board. Natuerlich gewinnt Software-SDL nicht gegen Hardware-SFML.
Uebrigens wird genau das auch am Ende des von euch verlinkten Threads erwaehnt:

Your benchmarks are severly flawed. You are comparing the software, 2D library that ships with SDL to OpenGL. Of course you are going to get a huge difference in performance - you don't even need to perform a benchmark to understand that.
I perfectly know that, this benchmark is basically just for beginners who might not be aware of the technical details, and wonder how SFML compares to a well known multimedia library.
Naja, richtig benutzt ist C++ dann auch so schnell wie Assembler!
SDL hat nicht umsonst einen puren 2D Part. Es arbeitet so einfach mit OpenGL zusammen, damit man 3D Anwendungen möglich macht. Bei Diskussionen um Geschwindigkeit etc, sollte man schon über den "reinen" 2D Part von SDL sprechen, ansonsten unterscheided sich SDL von purem OpenGL nämlich auch durch gar nix, ausser, dass die Initialisierung etwas einfacher gemacht wird (es sei denn man verwendet OpenGL blits mit SDL, was dann jedoch wiederum gääähnend langsam ist)
-
der vorschlag mag etwas unkonventionell sein, aber: wer 2d grafikprogrammierung von der pike auf lernen möchte, sprich double buffering und page flipping und dergleichen... dem würde ich empfehlen, das mit java zu tun (im ernst).
warum? man erzielt sehr schnell recht vernünftige ergebnisse. die performance ist auf modernen rechnern absolut ausreichend (ich hab selbst eine 2d engine in java geschrieben - wollte mal sehen ob das geht - fps konstant vom v-sync gecapped...).
der haupt punkt ist, dass man sich nicht mit apis wie directx oder opengl rumschlagen muss; das erledigt die bibliothek... und so kann man sich voll drauf konzentrieren, fullscreen exclusive handlen zu lernen, zu rendern usw...
beherrscht man dann diese technologie ist der sprung von 2d in java auf 2d in einer xbeliebigen anderen sprache klein, denn wenn man erstmal weis, wie in 2d umgebungen gerendert wird, ist es leicht (finde ich) das auf andere umgebungen zu abstrahieren. ein guter programmierer sollte sich nie auf nur eine sprache beschränken und c/c++ sind ganz gemächlich aussterbende technologien (gut, ob java viel länger leben wird, kann ich auch nicht sagen)
aber wenn man rendern lernen will und 50% des codes nur zur fehlerbehandlung da sind, dann kommt man nur geringfügig dazu, sich aufs wesentliche zu konzentrieren.
btw c# soll auch sehr gute grafikbibliotheken haben.
also wenn jemand nicht gleich ein konkretes spiel bauen will sondern erstmal lernen möchte, wie man 2d animationen darstellt, scrolling und ebenen etc implementiert: in java spart ihr locker 30-50% codezeilen, die ihr schreiben müsst und es geht auch alles damit, was in c++ geht.
-
Öhm... vielleicht können wir uns wieder auf mein Problem konzentrieren. Ich hab bereits was, aber es geht nicht, da die Klasse Windown keine Methoden namens Close() oder IsOpened() hat, obwohl es so im Tutorial steht...
-
Hast du dir Version 1.3 gezogen? Und nimmst das passende Tutorial? Dann muss etwas bei dir schief gelaufen sein. Zeig mal deinen Code her!
-
BenNation schrieb:
Öhm... vielleicht können wir uns wieder auf mein Problem konzentrieren. Ich hab bereits was, aber es geht nicht, da die Klasse Windown keine Methoden namens Close() oder IsOpened() hat, obwohl es so im Tutorial steht...

anderes wird ab hier entfernt werden
-
BenNation, meld dich mal auf www.sfml-dev.org im forum an und frag in einem der passenden bereiche nach. du wirst ne antwort normalerweisse innerhalb von 12 h direkt von laurent (dem entwickler) bekommen.