|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Mr.Matze Mini JLI'ler
Alter: 32 Anmeldedatum: 05.07.2006 Beiträge: 27 Wohnort: Neustadt a. d. Weinstraße Medaillen: Keine
|
Verfasst am: 10.11.2006, 17:09 Titel: Struckturen Problem |
|
|
Hi!
Ich hab ein Problem mit einer Strucktur und das sieht so aus:
Ich habe ein kleine einfach Strucktur
CPP: | #ifndef _SMouse_Data_
#define _SMouse_Data_
struct SMouse_Data
{
int x_pos, y_pos;
};
#endif
|
Das mit dem ifned hab ich gemacht da ich 2mal die Strucktur mit include in verschiedenen Dateien einbiende und der Fehler mit der Neudekleration nicht kommt.
Ich übergebe den Zeiger auf die Strucktur meiner InputManager-Klasse, die dort Werte verändert. Die Werte benutze ich im Mainprogramm um einen Text an einer Stelle anzuzeigen. Seltsamerweiße kann ich die Werte im Main-Programm nicht ändern.
CPP: | #include "test\SMouse_Data.cpp"
#include "Inputmanager.h"
SMouse_Data Mouse_Data;
/*
Wenn ich hier z.B. schreibe
Mouse_Data.x_pos = 100;
kommen folgende Fehler
F:\Eigene Programme\C++\GameShell\Gameshell.cpp(24) : error C2143: Syntaxfehler : Fehlendes ';' vor '.'
F:\Eigene Programme\C++\GameShell\Gameshell.cpp(24) : error C2501: 'Mouse_Data' : Fehlende Speicherklasse oder Typbezeichner
F:\Eigene Programme\C++\GameShell\Gameshell.cpp(24) : error C2371: 'Mouse_Data' : Neudefinition; unterschiedliche Basistypen
F:\Eigene Programme\C++\GameShell\Gameshell.cpp(22) : Siehe Deklaration von 'Mouse_Data'
F:\Eigene Programme\C++\GameShell\Gameshell.cpp(24) : error C2143: Syntaxfehler : Fehlendes ';' vor '.'
*/
CDirectX Direct3D;
CInputManager InputManager(&Mouse_Data);
|
Wenn ich die Maus bewege ändert sich die Position auch nicht. Ich glaub nicht,d ass ich die Maus falsch initialisiert habe:
CPP: | CInputManager::CInputManager(SMouse_Data* Mouse_Data)
{
m_D3DInputDevice = NULL;
m_Keyboard = NULL;
m_Mouse = NULL;
m_Joystick = NULL;
m_SMouse = Mouse_Data;
}
BOOL CInputManager::Init(HWND hWnd,HINSTANCE hInst)
{
/*
---------------------------------------------------------------------------
Frei konfirgurierbar
---------------------------------------------------------------------------
FILE* pfile;
if((pfile = fopen("SpielsteuerungsConfig.txt","r")) != NULL)
{
fscanf(pfile,"%d", &AKTION_JOYSTICKBUTTON_NR[0]);
fscanf(pfile,"%s", strBuffer );
fscanf(pfile,"%d", &AKTION_JOYSTICKBUTTON_NR[1]);
fscanf(pfile,"%s", strBuffer );
fscanf(pfile,"%d", &AKTION_JOYSTICKBUTTON_NR[2]);
fscanf(pfile,"%s", strBuffer );
fscanf(pfile,"%d", &AKTION_TASTE[0]);
fscanf(pfile,"%s", strBuffer );
fscanf(pfile,"%d", &AKTION_TASTE[1]);
fscanf(pfile,"%s", strBuffer );
fscanf(pfile,"%d", &AKTION_TASTE[2]);
fscanf(pfile,"%s", strBuffer );
fclose(pfile);
}
------------------------------------------------------------------------------------
*/
// DirectInput-Objekt erzeugen
if(FAILED(DirectInput8Create( hInst, DIRECTINPUT_VERSION,
IID_IDirectInput8, (VOID**)&m_D3DInputDevice, NULL ) ))
return FALSE;
// Keyboard, Maus und Joystick initialisieren
if(InitMouse(hWnd) == S_FALSE)
return FALSE;
/*
if((InitKeyboard(hWnd) == S_FALSE)
return FALSE;
if(InitJoystick(hWnd) == S_FALSE)
{
Joystick_Enabled = FALSE;
}
*/
return TRUE;
}
HRESULT CInputManager::InitMouse(HWND hWnd)
{
// Maus-Objekt erzeugen
m_D3DInputDevice->CreateDevice( GUID_SysMouse, &m_Mouse, NULL ) ;
// Message Box anzeigen, wenn keine Maus initialisiert werden
// konnte
if(NULL == m_Mouse)
{
MessageBox(hWnd, "Es wurde keine Maus gefunden",
"", MB_ICONERROR | MB_OK);
return S_FALSE;
}
// Datenformat festlegen
m_Mouse->SetDataFormat(&c_dfDIMouse) ;
// festlegen, wie DirectInput Zugriff auf das Gerät erhält
m_Mouse->SetCooperativeLevel(hWnd,DISCL_FOREGROUND | DISCL_EXCLUSIVE);
// akquirieren des Gerätes
m_Mouse->Acquire();
return S_OK;
}
void CInputManager::GetMouseInput(void)
{
DWORD NumElements = 1;
DIDEVICEOBJECTDATA data;
ZeroMemory(&data,sizeof(data));
if(FAILED(m_Mouse->GetDeviceData(sizeof(data),&data,&NumElements,0)))
{
// die Mouse wurde zwischenzeitlich
// von einer andere Anwendung genutzt
// Kontrolle wiederholen
m_Mouse->Acquire();
}
int Movement = data.dwData;
// bestimmen, in welche Richtung die Mouse bewegt wurde
// und ob eine Mouse-Taste gedrückt wurde
switch(data.dwOfs)
{
case DIMOFS_X:
if(Movement < 0)
{
m_SMouse->x_pos -= 2;
}
else if(Movement > 0)
{
m_SMouse->x_pos += 2;
}
break;
case DIMOFS_Y:
if(Movement < 0)
{
m_SMouse->y_pos -= 2;
}
else if(Movement > 0)
{
m_SMouse->y_pos += 2;
}
break;
case DIMOFS_BUTTON0:
PostQuitMessage(0);
break;
}
}
|
In der Main mit der Textanzeige sieht das so aus:
CPP: | InputManager.GetMouseInput();
Direct3D.BeginScene();
Direct3D.SetFont("Comic Sans MS");
Direct3D.DrawText("Hi Matze",Mouse_Data.x_pos,Mouse_Data.y_pos,D3DCOLOR_XRGB(0xFF,0,0));
Direct3D.SetFont("Arial");
Direct3D.DrawText("Hi Computer",150,150,D3DCOLOR_XRGB(0xFF,0,0));
Direct3D.EndScene();
|
Ich hoffe ihr könnt mir helfen, denn ich weiß nicht weiter.
Grüße
Matze _________________ Bitte besucht meine Webiste:
www.m-soft.de.tp
www.der-sternschnuppen-gruss.de.tp |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 10.11.2006, 17:15 Titel: |
|
|
Mr.Matze hat Folgendes geschrieben: | #include "test\SMouse_Data.cpp" |
...versuch mal, den Code in eine .h-Datei zu machen. CPPs sind für Code gedacht, nicht für Headerinhalte, die du hinterher per include einbindest.
Übrigens, Struktur schreibt man ohne c _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Mr.Matze Mini JLI'ler
Alter: 32 Anmeldedatum: 05.07.2006 Beiträge: 27 Wohnort: Neustadt a. d. Weinstraße Medaillen: Keine
|
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 10.11.2006, 17:42 Titel: |
|
|
Was noch sein könnte (und was mich wundert, dass der Compiler da nicht schon meckert):
Für Pfade entweder / oder \\. Ein einfacher Backslash bildet mit dem folgenden Zeichen ein Steuerzeichen. Also dürfte er SMouse_Data.cpp im Ordner "test" kaum erreichen können _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Mr.Matze Mini JLI'ler
Alter: 32 Anmeldedatum: 05.07.2006 Beiträge: 27 Wohnort: Neustadt a. d. Weinstraße Medaillen: Keine
|
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 10.11.2006, 18:11 Titel: |
|
|
Ah, moment...
Schreibst du das "Mouse_Data.x_pos = 100;" direkt unter die Erstellung deines SMouse_Data-Objekts?
Sowas musst du "in den Code rein" schreiben. Das darf nicht irgendwo frei herumschweben. Entweder du schreibst das in eine InitProgramme()-Funktion (o.ä.) oder - am elegantesten - du setzt den Wert für x_pos im Konstruktor der Struktur fest. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Mr.Matze Mini JLI'ler
Alter: 32 Anmeldedatum: 05.07.2006 Beiträge: 27 Wohnort: Neustadt a. d. Weinstraße Medaillen: Keine
|
Verfasst am: 10.11.2006, 18:31 Titel: |
|
|
Stimmt du hast Recht, das hat geklappt, aber die Position ändert sich immer noch net, wenn ich die Maus bewege.
Danke schonmal
Grüße
Matze _________________ Bitte besucht meine Webiste:
www.m-soft.de.tp
www.der-sternschnuppen-gruss.de.tp |
|
Nach oben |
|
|
|
|
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
|