Spiele mit C++ & DirectX programmieren.. wie fange ich an?



  • Hi,
    ich möchte gerne Spiele unter DirectX programmieren, hab aber echt 0 Peilung wie das vonstatten gehen soll??
    Habe mir bereits das DirectX 9.0 SDK heruntergeladen, und jetzt?
    könnte ihr mir helfen?
    ich besitze grundlegende bzw fortgeschrittene C Kenntnisse, denke von daher sollte C++ kein allzugroßes Hinterniss sein... oder? 😕

    Habt ihr irgendwelche Seiten von euren Projekten im Internet? Würde mich sehr freuen bzw. Ideen und Motivation geben das durchzuziehen.. Danke schonmal im Vorraus!



  • Original erstellt von Gothic Thing:
    Habe mir bereits das DirectX 9.0 SDK heruntergeladen, und jetzt?

    Jetzt solltest du in der Doku lesen und in die Samples schauen.

    Original erstellt von Gothic Thing:
    **
    ich besitze grundlegende bzw fortgeschrittene C Kenntnisse, denke von daher sollte C++ kein allzugroßes Hinterniss sein... oder? 😕**

    Also ist Bedienung des Compilers/ Linkers/ IDE kein Problem?

    Original erstellt von Gothic Thing:
    Habt ihr irgendwelche Seiten von euren Projekten im Internet? Würde mich sehr freuen bzw. Ideen und Motivation geben das durchzuziehen.. Danke schonmal im Vorraus!

    Benutze einfach google, oder schau einfach in die Signaturen von den Leuten hier.



  • Wegen dem Compiler:

    Also ich weis eigentlich nur wie man kompiliert oder ne seperate Objekt Datei erstellt, habe bisher Borland 5.5 benutzt... hm, gibts da bei C++ große Unterschiede?



  • ich besitze grundlegende bzw fortgeschrittene C Kenntnisse, denke von daher sollte C++ kein allzugroßes Hinterniss sein...

    ROFL

    In C++ programmiert man idr. ganz anders als in C! Du solltest lieber erstmal C++ lernen, als den Umgang mit irgend einer API

    und jetzt?

    FAQ lesen und dann die Doku lesen



  • ich empfehle dir ein beispiel aus dem directx sdk zu holen, und dieses so lange auseinander zunehmen, bis du es vollständig verstehst. das heisst alle kommentare lesen und danach löschen (verbessert die übersicht). alle variablen umbenennen, so wie du es gewöhnt bist. funktionen umbenennen, so wie du es gewöhnt bist (etc.). eventuell teile des programms löschen (falls diese überflüssig sind für eine minimale programmfunktionalität). gleichzeitig immer in der directx sdk doku nachlesen was die funktionen machen, damit du sie genau verstehst. wenn du dann das beispielprogramm soweit reduziert hast, dass du es 100% verstehst, dann würde ich anfangen mir über eine engine, für dein spiel gedanken zu machen. im prinzip geht man dann hin und schreibt sich zu jedem themengebiet von directx eine klasse, deren methoden die directx funktionen aufrufen. dabei gibt es zwei grundsätzliche vorgehensweisen der programmierung.

    die eine benutzt directxdatentypen/-strukturen/-enums/-funktionen (etc.) DIREKT und VERMISCHT in der engine und legt keinen wert auf unabhängigkeit. die andere vergehensweise benutzt nur intern, INNERHALB der klassen diese directxspezifischen daten und lässt keine nach aussen (z.b. über funktionsparameter, d.h. dein spiel, das auf deiner engine "aufsitzt" darf keine directx daten benutzen, sondern nur "eigene" klassen). das hat den vorteil, das ein spiel, das mit einer solchen engine programmiert wurde, relativ einfach auf eine andere version von directx (oder auch opengl) umgeschrieben werden kann. allerdings bietet directx 9 so viele funktionen an, das man eigentlich für die nächsten 5 jahre (mindestens) ausreichend mit funktionalität versorgt ist (es gibt alte spiele, die mit directx 7 programmiert wurden, die besser sind als einige neue die directx 8 oder 9 benutzen) ein gutes spiel ist definiert durch gute grafik und ein gutes system, wobei das system weitesgehend hardwareunabhängig ist und die grafik, wenn man directx 9 benutzt, eigentlich nur vom design abhängt (programmierung vorausgesetzt). solange man das programm nur für windows schreibt, ist es deshalb egal ob man unabhängig programmiert oder nicht.

    ich würde dir emüfehlen es abhängig zu schreiben, und die datentypen/funktionen von directx 9 zu benutzen, das macht die programmierung einfacher!

    wenn du das veispiel programm aus dem sdk verstanden und eine idee für eine engine hast, dann fang einfach an.

    vom sdk beispiel immer eine sicherungskopie machen. falls man es soweit vernädert hat, das es nicht mehr läuft, dann kann man einfach bei der alten version weitermachen.



  • Hey, endlich mal eine hilfreiche Antwort 🙂
    Wie muss ich mir das mit dem Engine programmieren vorstellen? hab irgendwie keinen Plan wie man eine Engine macht bzw. was eine Engine wirklich ist. Also ich weis schon was eine Grafikengine ist und was sie macht, kann mir aber irgendwie noch net so recht vorstellen wie man eine programmiert und einsetzt... wenn ich eine engine auf Super Nintendo Niveau hinkriegen würde wäre ich schon super happy 🙂

    Was für einen C++ Compiler soll ich am besten verwenden?

    Danke für die bisherigen Anworten! Vorallem für die letzten! Merci!



  • Hi!

    Würde mich auch mal interessieren, ob man sowas auch gut mit dem Borland Builder hinbekommt. Eigentlich ist das ja mehr was für VC++, oder?



  • meiner meinung nach sollte man bei allem was man programmiert, egal ob ein spiel oder etwas anderes, sich zuerst ein allgemeines system programmieren, mit dem man dann das spezielle system (das eigentliche programm, das man schreiben möchte) erstellt.

    ein gutes beispiel:

    wenn du ein programm schreiben möchtest, das die funktionalität eines "buttons" (ein knopf, wie in windows, auf den man klicken kann und der eine aktion auslöst, meistens "OK" oder "Abbrechen" 🙂 ) besitzt, dann sollte man nicht hingehen und das programm so schreiben, das man nur die funktionalität des "knopf-drücken-und-wieder-loslassen-und-dann-aktion" hat, und zwar nur für diesen einen button, genau an der stelle im programm, an der er benutzt wird, sondern mann sollte sich gedanken darüber machen, welches allgemeine system dieser button, mit anderen buttons, oder auch anderen steuerelementen, wie z.b. checkboxes (kästchen das man aktivieren und wieder deaktivieren kann) oder comboboxes (eine dropdown listbox, wie das hier im forum zur auswahl der themengebiete) gemeinsam hat, und dann ein allgemeines system schreiben, das für all diese steuerlemente gilt. wenn man das hat, dann schreibt man die buttons, checkboxes und comboboxes (etc.) nur als spezielle form dieses allgmeinenen systems. das hat vorallem den vorteil, das man 1. so viele steuerelemente wie man nur möchte benutzen kann und nicht für jeden button (etc.) alles wieder neu schreiben muss und es hat 2. den vorteil, das man viel schneller viel mehr unterschiedliche steuerelemente programmieren kann, weil diese das allgemeine system benutzen. das ist dem prinizp von basisklassen in der objektorientierten programmierung gleich, nur eine abstrakte stufe "höher" (auf der stufe der systeme).

    das gleiche prinzip sollte man nun auch bei spielen anwenden. man schreibnt sich suerst ein allgeiemeines system, das die komplette funktionalität das eigentlichen spiels erfüllt, und schreibt dann das eigentliche spiel nur als spezialisierung des allgemeinen system. das allgemeine system könnte man dann als engine bezeichnen; also eine softwaremaschine, die die hauptarbeit des spiel realisiert. das spiel ist dann eigentlich nur eine art "makro-verarbeitungs-und-animations-programm", das nur noch konfiguriert und designt wird.

    man könnte sagen, das wenn man ein spiel spielt, man nichts anderes tut, als sich animationen anschaut, abläufe von makros beobachtet und dazu noch selbst, mit hilf der eingabegeräte, das geschenen etwas beeinflusst.

    damit es nicht ganz zu schwierig für dich wird, solltest du erst einmal ein paar klassen schreiben, die polygone mit directx auf den bildschirm bringen. dann solltst du dir 3d-modelle besorgen, die du laden kannst, und diese dann anstelle der polygone auf den bildschirm bringen.
    damit kann man dann schon ein kleines spiel schreiben (siehe directx demos und beispiele)

    natürlich ist noch viel mehr notwendig, aber ohne 3d-modelle ist es unmöglich ein 3d-spiel zu schreiben.

    wenn dir das zu kompliziert ist, dann schreib dir eine 2d-engine und ein 2d-spiel. da brauchst du keine 3d-modelle sondern nur bitmaps (so wie in supermarioland, das waren auch nur bitmaps)

    als IDE bzw. compiler würde ich microsoft visual studio .net empfehlen, die c++ version gibt es schon ab 124 EURO. die benutze ich auch und die kann alles was man braucht. das einzige was an dieser "abgespeckten" c++ version von visual studio enterprise architekt schlecht ist, ist, das der kompiler etwas langsameren code erstellt. aber das ist nicht sehr tragisch und hat keinen wirklichen einfluss auf die qualität der programme) ausserdem gibt es ja noch den intel c++ compiler für visual studio .net, der superschnellen code erstellt (natürlich auch für P4-prozessoren mit sse2). allerdings ist der nicht ganz billig (ich glaube 399 EURO)



  • Was für einen C++ Compiler soll ich am besten verwenden?

    besorg dir am besten einen kostenlosen Compiler und eine kostenlose IDE, da du bei deinen Vorkentnissen wahrscheinlich eh sehr früh aufgeben wirst und das viele Geld wär umsonst ausgegeben

    Übersicht der kostenlosen Compiler + Linkliste



  • @KXII

    schön, wie du das konzept der objektorientierten programmierung verstanden hast!
    😛



  • @gibbets2000

    ích glaube meine überlegungen gehen noch etwas weiter. bei der objektorientierten programmierung bezieht sich das konzept nur auf die einzelobjekte. meine darstellung betrachtet aber das gesamtsystem, also eine gruppe von objekten. das hat eigentlich nichts direkt mit oo programmierung zu tun. schön wäre es wenn, es eine programmiersprche gäbe, die dieses konzept als grundlage nehemen würde und nicht nur die objekte... c++ ist meiner meinung nach eine sehr unvollkomene sprache und an vielen stellen verbesserungsfähig! alleine das bedingte includieren von headerdateien ist sowas von überflüssig...



  • Original erstellt von KXII:
    c++ ist meiner meinung nach eine sehr unvollkomene sprache und an vielen stellen verbesserungsfähig! alleine das bedingte includieren von headerdateien ist sowas von überflüssig...

    Jau, Java macht da schon einiges besser, ist nur leider saulahm, und leider auch net ganz "bugfrei".

    C# hab' ich mir noch net angesehen... aber... naja... 🙄



  • ich muss mir auch mal c# genau anschauen. vielleicht ist das ja eine "verbesserte" version von c++. wahrscheinlich ist es aber nur ein mischmasch aus visual c++ und visual basic, den man für schnelle spiele nicht gebrauchen kann.



  • Original erstellt von KXII:
    wahrscheinlich ist es aber nur ein mischmasch aus visual c++ und visual basic, den man für schnelle spiele nicht gebrauchen kann.

    Wohl eher Java-like C++, oder?!? Mit vernünftiger Klassen-Struktur / -Hierarchie (echt lobenswert).
    Aber leider wird der 2. Halbsatz trotzdem darauf zutreffen... 🙄



  • Mischmasch aus VB und C++ ist schon mal völlig falsch.
    C# ist eigentlich Java, bietet aber keine Verbesserungen. Für die Spieleentwicklung wäre es vielleicht interressant gewesen, wenn es nicht auch wie Java auf ner Art VM laufen würde.
    Von daher ist es eigentlich nichts groß anderes, allerdings hat sich Java schon mehr etabliert als C#.
    Für Spiele "muss" man leider nach wie vor C++ verwenden



  • Original erstellt von Optimizer:
    Für Spiele "muss" man leider nach wie vor C++ verwenden

    wieso leider? was gibt es an c++ auszusetzen?



  • mag ja sein, das c# eher mit java zu vergleichen ist, aber viele wissen nicht, das man auch mit visual-basic klassen erstellen kann, und im prinzip genauso wie in c++ programmieren kann. genaugenommen kann man mit visual basic sogar so ziemlich alles machen, was man auch mit visual c++ machen kann, nur viel schneller und einfacher als mit c++, nur das die programme etwas langsamer ablaufen (hat jemand von euch schon mal eine activex dll mit visual c++ und mit visual basic geschrieben? ...). ich bin kein visual basic fan, habe aber schon ein paar programme damit geschrieben und wenn es nicht auf die geschwindigkeit ankommt, dann ziehe ich visual basic allemal visual c++ vor! c++ ist eigentlich dreck, nur leider will das niemand einsehen, und deshalb gibt es bis heute keine verbesserte version!



  • Borloand's C++ Bulider hat mir sehr gut gefallen. Einfache Applikationserstellung wie in Visual Basic als Sprache C++. Ich verstehe auch nicht warum alle auf VisualC++ stehen.



  • Original erstellt von KXII:
    c++ ist eigentlich dreck, nur leider will das niemand einsehen, und deshalb gibt es bis heute keine verbesserte version!

    dann erklär doch mal genau, was daran dreck ist! 😡



  • im prinzip kann ich mich kingruedi nur anschließen:
    arbeite dich erstmal in c++ ein, das kommt dir echt nur zugute. und gib vor allem nicht voreilig viel geld aus...

    @KXII
    ähm, also was die geschwindigkeit beim programmieren mit vb angeht:
    da einer meiner lehrer ein absoluter vb-fan ist, müssen wir uns leider (die gründe für das "leider" folgen gleich) auch mit vb auseinandersetzen.
    wenn man mit klassen (und somit auch dlls) arbeitet, stößt man des öfteren auf das problem, dass vb einfach nicht checken will, dass ich die dlls schon dem projekt hinzugefügt habe, also muss ich fast jedes mal nach dem laden des projekts die ganzen verbindungen wieder hinzufügen (bzw erstmal entfernen, auf "ok" klicken, wieder auf projekte->verbindungen gehn und sie wieder einfügen). das ganze bei (im moment) 28 dlls..., da nervt das dann schonmal ungemein.
    den datenbankzugriff möchte ich garnicht erst erwähnen..., einfach schrecklich...
    dann solche umständlichen sachen, dass er bei einer OR-verknüpfung in einer if-clause grundsätzlich auch die zweite bedingung prüft, auch wenn die erste bereits "true" ergibt (was java und c++ nicht machen). das verkompliziert die ganze sache meist nur...
    solche beispiele könnte man sicher noch ein paar bringen...


Anmelden zum Antworten