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

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

1

11.04.2003, 11:23

Mein erster Post : Dinput initialisieren?

Hi erstmal,

ich hab ein Grundgerüst d.H ein 3d device in dx9 erstellt und will nun Dinput initialisieren. Mein Proggie ist folgendermaßen aufgebaut:


RA-Main.cpp/h
win-Main.cpp/h
Controllls.cpp/h

in der Ra-MAin.h ist die HAuptklasse RA initialisiert.In der sind haslt die Aufrufe für Die Api drin.

In der Win main.h hab ich nun ne structur für alle globale variablen wie hwnd hinst aso. Mein problem ist nun das ich net weis wie ich die globals in die iNit meines dinput Objects packen soll.Für das Fenster hab ich in Win-Main schon die Globalensammlung win_ .Aber wenn ich dann bei dinput aich win_ benutze gibts Fehler alla :Globals win_ ist schon im Object Win-Main gespeichert. in der controlls.h habe ich die Klasse für dinput mit den ganzen Parametern dafür aber wenn ich die in win-main include gibts hauifenweidse komische Fehler wie & syntaxfehler.
Ich in noch relativ neu in der Spieleprogrammierung und hab wohl nen Anfäöngerfehler gemacht.Es ist auch schwer zu beschreiben.Hoffe ich hab mich trotzdem verständlich ausgedrückt.
HUCH s3d


HAb leider no webspace um files hochzu laden .Ich glaub so ist es wirklich schwer zu Kapieren was ich meien ???
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

11.04.2003, 13:06

Hi!

Ja, ich kann's mir so ungefähr denken, was Du falsch machst!
Du darfst diese Variable nur einmal deklarieren. Alle anderen Dateien greifen dann mit dem "extern"-Schlüsselwort darauf zu.
So:

Global.h:

Quellcode

1
2
3
4
5
6
7
8
9
10
// Struktur für globale Variablen
struct GlobalVars
{
    HWND Window;
    HINSTANCE Instance;
    LPDIRECTINPUT8 DInput;
    LPDIRECTINPUTDEVICE8 Keyboard;
    LPDIRECTINPUTDEVICE8 Mouse;
    LPDIRECTINPUTDEVICE8 Joystick;
};


Main.cpp:

Quellcode

1
2
3
4
#include "Global.h"

// Hier wird die Variable deklariert
GlobalVars MyGlobalVars;


Alle anderen CPP-Dateien:

Quellcode

1
2
3
4
5
#include "Global.h"

// Die Variable "MyGlobalVars" darf nicht nochmal deklariert werden!
// Wir verschaffen uns mit "extern" Zugriff darauf!
extern GlobalVars MyGlobalVars;

So geht das!

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

3

11.04.2003, 13:35

Hey cool also kann man die structuren auch mit extern eingliedern.Danke.


cu
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

4

11.04.2003, 14:06

neuer fehler

HI

Gut das geht jetzt aber :

Muss ich eigentlich in jede Header die anderen Headers includen?
z.B ich brauche Die dinput sachen in win-main aber wenn ich jetzt die header include dann gibts errors wie :


CONTROLLS.OBJ : error LNK2005: "class RAControlls RAControlls" (?RAControlls@@3V0@A) bereits in Ra-MAIN.obj definiert
WIN-MAIN.OBJ : error LNK2005: "class RAControlls RAControlls" (?RAControlls@@3V0@A) bereits in Ra-MAIN.obj definiert


was nu?

Außerdem erhalt ich den fehler:unresolved externel Symbol DINPUTCREATE8

welche headers und libd braucht man denn?
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

11.04.2003, 14:22

In einem Header werden nur Strukturen und Klassen definiert.
Implementiert werden sie in den CPP-Dateien. Und auch nur dort werden Variablen von diesem Typ erzeugt. In den Headern zwar auch, aber mit einem "extern" davor. Also hast Du wohl in Deinem Header direkt eine Variable angelegt.

Wegen DirectInput: Schau in der Dokumentation nach, da steht alles.
Achja: "Controls" schreibt man mit einem "l", nicht mit zweien ;)

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

6

11.04.2003, 14:35

Hab ich schon gemerkt aber "hatte noch keine Zeit"(keine Lust) ;)
es zu ändern.

Hmm also muss ich die Header in der cpp datei includen.Komisch in son par tutos war das anders naja ich guck ma a bissel.
Hmm
ich hab dinput.h und lib und dxguid included.
Wo sthets denn im sdk?
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

7

11.04.2003, 15:04

Und was wenn ich in einer header Datei die infos aus einer anderen brauche?

Die Globals aus der wIN-maIN BRAUCH ICH AUCH IN DER kLASSE RA die inder RA-MAin.h dekliniert ist.
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

11.04.2003, 15:19

"DirectInput8Create" heißt die Funktion. Nicht "DINPUTCREATE8".
Die Libs heißen "DInput8.lib" und "DXGUID.lib". Der Header heißt "DInput.h".
Wenn ein Header Infos aus einem anderen braucht, dann bindet er ihn eben ein. Ganz normal mit #include.

Achja, und bitte bemühe Dich ein bisschen, Deine Beiträge ordentlich zu schreiben!

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

9

11.04.2003, 15:20

k sorry für die Umstände THX 4ALL
Jetzt hab ich auch den großen Fehler gefunden.
Ich hab bei der initialisierung der Control Class mit
}RAControl;
beendet .
Und das wurde dann double defined.Ok war ne schwere Geburt noch mal Danke.
;D
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

Shark_3D

Treue Seele

  • »Shark_3D« ist der Autor dieses Themas

Beiträge: 311

Wohnort: Hannover

Beruf: Schüler

  • Private Nachricht senden

10

11.04.2003, 16:26

Mist.
Brauch noch ma kurz Hilfe.(Sorry bin halt noch ziemlich unerfahren :crying: )

ich hab jetzt in der Hauptschleife folgendes ergenzt:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   // ask if windowed or fullscreen mode?
   if (MessageBox(win_.hWnd, "Start in windowed mode?", 
                  "ZFX Tutorial", MB_YESNO|MB_ICONINFORMATION)
                  == IDNO)
      win_.bWindowed = false;
   else 
      win_.bWindowed = true;
 
[b] hr = MyDI.InitDI();
   if (FAILED(hr )) {
      
         g_.bDone = true;
   }[/b]


// try to start the engine
   if ( FAILED( MyApp.Init(win_) )) {
      MessageBox(g_.hWnd, "Initializing Application_C failed.", 
                 "ZFX Tutorial Report", MB_OK | MB_ICONERROR);
      fprintf(win_.pLog, "error: no compatible graphics adapter \n");
      fflush(win_.pLog);
      win_.bDone = true;
      }



Aber nach der Fullscreen-Abfrage klappt nichts mehr.Die Anwendungen wird beendet und Windows Xp will nen "Fehler-Bericht" weg schicken.

Hat wer ne ahnung wieso?
"Immer die doppelte Menge"
(Kaufmannsregel Nr.355 von der Lehrkassette 3)

Werbeanzeige