JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Gebäude erstellen
Gehe zu Seite Zurück  1, 2, 3, 4, 5  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 21.12.2005, 13:25    Titel: Antworten mit Zitat

So liest es sich gleich viel besser. Wink Also, kann sein dass der fehler hier steckt, ich weiß ja net wofür du die noch brauchst:
Vane hat Folgendes geschrieben:
CPP:
       //Check if windowed
    if (bWindowedMode)
    {
        D3DDISPLAYMODE d3ddm;
        RECT rWindow;

        //Get display mode
        d3d->GetAdapterDisplayMode (D3DADAPTER_DEFAULT, &d3ddm);

        //Get window bounds
        GetClientRect (hWnd, &rWindow);

        //Setup screen dimensions
        resWidth = rWindow.right - rWindow.left;
        resHeight = rWindow.bottom - rWindow.top;

        //Setup backbuffer
        d3dPresent.Windowed = true;
        d3dPresent.BackBufferFormat = d3ddm.Format;
        d3dPresent.BackBufferWidth = rWindow.right - rWindow.left;
        d3dPresent.BackBufferHeight = rWindow.bottom - rWindow.top;
    }
    else
    {       
        d3dPresent.Windowed = false;
        d3dPresent.BackBufferWidth = resWidth;
        d3dPresent.BackBufferHeight = resHeight;
        d3dPresent.BackBufferFormat = resFormat;
    }



Ich nehme an, dass vorher in resWidth un resHeight die vollbildkoordinaten stecken, schließe ich aus den beiden unteren makierten zeilen. wenns windowed is, speicherst du in resWidth un resHeight die neue Fensterposition. Die brauchst du dann wahrscheilich später in einem anderen Teil des Programms nochma. Das Problem is, dass du der Funktion Init() nur Kopien der originalen von resWidth und resHeight übergibst(die du dann bei den obersten makierten zeilen veränderst) Arrow hat also keinerlei Auswirkungen auf die Originale.
Kann sein, dass ich damit falsch liege, weil ich net weiß was du sonst noch damit machst. Mich wundert nur, warum du sonst die neue Fensterposition in denen speichesrt, wenn das sowieso keine Auswirkungen hat...

Lösung: Ändere die Funktion einfach mal so:
CPP:
int InitD3D (int& resWidth, int& resHeight, D3DFORMAT resFormat, HWND hWnd, BOOL bWindowedMode)


Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Vane
Junior JLI'ler



Anmeldedatum: 03.11.2005
Beiträge: 70

Medaillen: Keine

BeitragVerfasst am: 21.12.2005, 14:49    Titel: Antworten mit Zitat

Also ich initsialisiere Die init datei so:

CPP:
InitD3D (0, 0, D3DFMT_A8R8G8B8, hWnd, false);


das heißt resWidth und resHeigth ist mit einer 0 initsialisiert und während der initialisierung von direct3D, werden sie gefüllt, daran kann es glaube ich nicht liegen oder liege ich da falsch?

ich verwende die beiden variablen noch hier:

CPP:
InitRendering (resWidth, resHeight);
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 21.12.2005, 14:58    Titel: Antworten mit Zitat

Vane hat Folgendes geschrieben:
Also ich initsialisiere Die init datei so:

CPP:
InitD3D (0, 0, D3DFMT_A8R8G8B8, hWnd, false);


das heißt resWidth und resHeigth ist mit einer 0 initsialisiert und während der initialisierung von direct3D, werden sie gefüllt, daran kann es glaube ich nicht liegen oder liege ich da falsch?

ich verwende die beiden variablen noch hier:

CPP:
InitRendering (resWidth, resHeight);

axo, ok, dann isses so: wenn du 0 und 0 als resWidth und resHeight übergibst, dann übergibst du hier auch
CPP:
else
    {       
        d3dPresent.Windowed = false;
        d3dPresent.BackBufferWidth = resWidth;
        d3dPresent.BackBufferHeight = resHeight;
        d3dPresent.BackBufferFormat = resFormat;
    }
0 und 0. Also denkt der, dass bei Vollbild der Bildschirm 0 x 0 Pixel groß is Wink

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Vane
Junior JLI'ler



Anmeldedatum: 03.11.2005
Beiträge: 70

Medaillen: Keine

BeitragVerfasst am: 21.12.2005, 15:01    Titel: Antworten mit Zitat

Aber vorher fülle ich die doch:

CPP:
resWidth = rWindow.right - rWindow.left;
resHeight = rWindow.bottom - rWindow.top;
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 21.12.2005, 15:02    Titel: Antworten mit Zitat

Vane hat Folgendes geschrieben:
Aber vorher fülle ich die doch:

CPP:
resWidth = rWindow.right - rWindow.left;
resHeight = rWindow.bottom - rWindow.top;

nur wenns windowed is, is doch in der if(), das andere is in der else Wink du musst da grundsätzlich bei vollbild die volle Auflösung übergeben

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Vane
Junior JLI'ler



Anmeldedatum: 03.11.2005
Beiträge: 70

Medaillen: Keine

BeitragVerfasst am: 21.12.2005, 15:05    Titel: Antworten mit Zitat

Und wie übergebe ich die volle auflösung?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 21.12.2005, 15:08    Titel: Antworten mit Zitat

vllt so? Wink :
CPP:
InitD3D (1024, 768, D3DFMT_A8R8G8B8, hWnd, false);

kommt drauf an, was du bei Vollbild für ne Auflösung haben willst. Allerdings musste dann auch bei Vollbild "false übergeben:


Zuletzt bearbeitet von DirectXer am 21.12.2005, 15:12, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Vane
Junior JLI'ler



Anmeldedatum: 03.11.2005
Beiträge: 70

Medaillen: Keine

BeitragVerfasst am: 20.03.2006, 09:08    Titel: Antworten mit Zitat

Hallo
ich dachte mir einfach mal das ich meine neue frage hier rein stelle, da es sogesehen auch um Gebäude geht....

Also, ich habe mir überlegt, wenn man ein Rollenspiel programmieren möchte, programmiert man einige begehbare Häuser.
Doch nun zur frage, wie programmiere ich solche begehbaren häuser, wenn mein haus nur aus tiles besteht könnte ich doch ein tile definieren, im code überprüfen ob die figur drauf ist und dann das Gebäude innere laden, das ist doch möglich oder nicht?

Aber was ist wenn ich meine Gebäude als Sprites geladen habe, wie würde ich das realisieren können?

Da quält mich noch eine frage....
Wenn man ein Strategie Spiel programmieren würde, nun eine rinderfarm baut und ein schlachter. Der schlachter holt sich nun ein rind von der rinderfarm aber nur wenn sie mit einer straße verbunden sind, wie könnte man sowas realisieren, das er nur beliefert wird wenn eine Straßen verbindung vorhanden ist?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 20.03.2006, 09:17    Titel: Antworten mit Zitat

Zur ersten Frage:

Dazu benötigst du mehrere Ebenen an Tiles. Dann solltest du in der untersten Ebene den Boden der Umgebung (rasen, wege etc) und das gebäude innere modellieren. eine Ebene dadrüber legst du dann praktisch das "Dach" des hauses, so dass man das hausinnere nicht mehr sieht. Dann kannst du eine Überprüfung machen ob die Figur unter dem dach steht und das dach dann ausblenden.
Alternativ kann man auch ein Türen Tile definieren und wenn der Spieler da drauf kommt den spieler in eine neue karte laden.
Auch wenn das Gebäude ein sprite ist funktioniert das genauso. Du musst überprüfen ob der Spieler mit dem sprite in berührung kommt. (also eine Rechteck<->Rechteck kollision).

zur zweiten frage:
Das ist schon ein sehr schwieriges thema für den anfang. Das hört sich nach einer einfachen Aufgabe an ist es aber nicht so ganz.
Am einfachsten wäre es noch wenn du ausgehend von der Rinderfarm praktisch virtuell alle straßen entlangläufst und schaust ob du irgendwann am schlachthaus ankommst. Am besten per rekursion.
Also ca so:
Du fängst beim eingang der rinderfarm an. schaust ob in einem der benachbarten tiles ne straße ist. und in jedem tile in dem eine straße ist prüfst du wieder ob in einem der nachbarn eine straße ist usw usw.
Damit du nicht irgendwann im kreis "läufst" musst du die koordinaten speichern auf denen du schon warst beim überprüfen.
wenn dann irgendwann ein tile das schlachthaus als nachbar hat weißt du dass es eine verbindung gibt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 20.03.2006, 10:21    Titel: Antworten mit Zitat

Wie ist das- willst du jetzt ein RPG oder ein Strategiespiel machen?
Ich empfehle dir auf jeden Fall erst mal die Engine mit API, sowie Interface aufzusetzen: programmier dir Klassen für Surfaces->Sprites und Schrift, oder wenns dich nicht stört, nimm die von D3DX, oder meine, die sind in einem ähnlichen Thread irgendwo hier, ich such dann mal...
Edit: Hier

Wenn du das hast, solltest du vielleicht als nächstes die Landschaft machen, am besten aus Tiles, was sehr einfach zu realisieren ist.
Da gibts auch mehrere Möglichkeiten: feste Mapgröße mit x, y, z: wird vorher festgelegt, du kannst ein festes Array nehmen, ist vor allem für Strategiespiele günstig. Cooler jedoch ist die Möglichkeit die Tiles dynamisch zu machen so dass du wie einen Baukasten hast statt einem Steckbrett Wink

So nach der Landschaft kannst du dich um die interessanten Dinge kümmern: Spieler, Kollision, Gegner mit KI, Items, Partikel, ...

Also du siehst: ne Menge Arbeit. Mach also lieber erstmal nen Vertscroller Wink

Gruß
Homeless_Punkdrummer
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Vane
Junior JLI'ler



Anmeldedatum: 03.11.2005
Beiträge: 70

Medaillen: Keine

BeitragVerfasst am: 20.03.2006, 13:07    Titel: Antworten mit Zitat

Zitat:
Wie ist das- willst du jetzt ein RPG oder ein Strategiespiel machen?
Ich empfehle dir auf jeden Fall erst mal die Engine mit API, sowie Interface aufzusetzen: programmier dir Klassen für Surfaces->Sprites und Schrift, oder wenns dich nicht stört, nimm die von D3DX, oder meine, die sind in einem ähnlichen Thread irgendwo hier, ich such dann mal...


Ich habe bereits eine tilemap erstellt , weiß auch wie man sprites rein lädt und wie man mehrere ebenen bei tiles realisiert....
Also am liebsten würde ich ein Rollenspiel machen, da reicht aber wohl meine erfahrung nicht und deswegen wollte ich erst ein Strategie Spiel programmieren aber so richtig entschieden habe ich mich noch nicht, die map ist aber bereits vorhanden.

Zu meinen Fragen: Ich habe sie deswegen gestellt da sie mich am meißten interessiert haben wie sowas realisiert werden kann.
Auf die erste frage war ja mein Vorschlag passend.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 20.03.2006, 13:19    Titel: Antworten mit Zitat

Wegfindealgorhithmen sind an sich ein recht komplexes Thema. Für einfache Tiles nutzt man begrenzte Rekursion - Das Ergebnis mit dem kleinsten Wert ist der kürzeste Weg. Wenn die beiden Gebäude allerdings zu weit ausseinander stehen, gibt es keine Lösung. Entweder tut der Schlachter dann gar nichts oder er zeigt eine Statusmeldung an (z.B. ein Fragezeichen über dem Dach des Gebäudes)
Witzig / Lustig wäre auch eine Warentransportvorrichtung wie in Siedler 2 - allerdings ist diese gleich wieder schwieriger zu implementieren...
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 20.03.2006, 14:22    Titel: Antworten mit Zitat

Sowohl Rollenspiele als aucch Strategiespiele können sehr komplex sein.
An deiner Stelle würde ich ersteinmal versuchen, das ganze sehr zu vereinfachen. Als Aufbaustrategiespile kann es ja schon reichen zu wissen, das man X Bauernhöfe und Y Schlachterreien hat. In jeder Runge (also zum Beispiel jede Frame) produziert der Bauernhof x Rinder und die Schlachterrei zieht y rinder ab um daraus z Fleisch zu machen, jedenfalls wenn genug rinder da sind.
Man kann den spieler ja die Gebäude auf der Karte verteilen lassen, auch ohne deren Positionen in die Berechnungen einfließen zu lassen, was die ganze Sache enorm vereinfachen würde.
Wenn du dann Bewohner einbaust die verschiedene Bedürfnisse haben, und die Gebäude Betriebskosten oder so haben kannst du daraus auch shcon eine interessante Simulation machen.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Vane
Junior JLI'ler



Anmeldedatum: 03.11.2005
Beiträge: 70

Medaillen: Keine

BeitragVerfasst am: 20.03.2006, 17:52    Titel: Antworten mit Zitat

So habe ich mir mein Spiel auch gedacht....
Werde wohl damit auch anfangen.
Danke für die antworten und hilfe.

Da quält mich aber noch eine frage. Ich wollte nun ein Rundenbasiertes Strategiespiel programmieren, da es einfacher ist bei dem Rohstoff abbau z.B.: Pro Runde 3 Tonnen Erz.
Wie würde ich das den in einem normalen Strategiespiel realisieren, Jonathan hat ja frames erwähnt wie würde das funktionieren?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 20.03.2006, 18:51    Titel: Antworten mit Zitat

Naja, man kann zwar Frame-basiert die zunahme der Resource berechnen, allerdings ist das nicht so gut, da Leute mit mehr Frames ja mehr Rohstoffe kriegen würden.
Sinnvoller wäre es, zu sagen, 1 Arbeiter an einer Goldmine bringt pro Sekunde 1 Einheit Gold (nur mal als Beispiel), und dann jede Sekunde alle aktiven Goldgräber durchgehen, und die 1 Einheit Gold dazurechnen.
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3, 4, 5  Weiter
Seite 4 von 5

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum