JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=4b52e259d79acff6d8ea35a0d006ab3fMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Wie kann ich einen eigenen Mouse Zeiger laden

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 03.08.2006, 12:32    Titel: Wie kann ich einen eigenen Mouse Zeiger laden Antworten mit Zitat

Hallo,

Wie kann ich einen eigenen Mouse Zeiger laden,

muss er ein bmp sein ??

irgend wie mit

SetCursor(LoadImage(NULL,"cursor.png",IMAGE_CURSOR,0,0,0));

SetCursor(LoadCursor(NULL,"cursor.bmp"));

oder was muss ich tun ?

gruss danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 03.08.2006, 12:41    Titel: Antworten mit Zitat

Womit arbeitest du denn? Du kannst einfach den Standardzeiger auschalten und ein Sprite an die Position der Maus rendern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 03.08.2006, 12:42    Titel: Antworten mit Zitat

ja kann ich machen aber das sprite zieht sich zu langsam an die richtige stelle
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 03.08.2006, 12:44    Titel: Antworten mit Zitat

Was für eine API verwendest du? Und wie renderst du das Sprite?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 03.08.2006, 13:04    Titel: Antworten mit Zitat

ah ich hab was bei direct x gelesen:

Code:

HRESULT SetCursorProperties(
  UINT XHotSpot,
  UINT YHotSpot,
  IDirect3DSurface9 * pCursorBitmap
);

und

void SetCursorPosition(
  INT X,
  INT Y,
  DWORD Flags
);


ist fast alles klar nur was muss ich mit:

IDirect3DSurface9 * pCursorBitmap;

pCursorBitmap-> was soll ich da angeben und wo kann ich mein bild laden ??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 03.08.2006, 13:14    Titel: Antworten mit Zitat

Da gab's doch so 'ne Funktion 'D3DXCreateSurfaceFromFileEx' oder so ähnlich. Oder du lädst die Grafik per Hand und kopierst sie dir in ein Surface.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 03.08.2006, 13:52    Titel: Antworten mit Zitat

ist ja wahnsinnig schwierig !

gibt es denn niergends ein beispiel Crying or Very sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

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

MSDN hilft mal wieder. :P

Diese Funktion meinte ich:
http://msdn.microsoft.com/archive/en-us/directx9_c/directx/graphics/reference/d3dx/functions/texture/d3dxloadsurfacefromfile.asp

Davor ganz normal über das Device mittels 'CreateOffscreenPlainSurface' eine Surface erzeugen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Loigie
Junior JLI'ler



Anmeldedatum: 29.06.2004
Beiträge: 52
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 06.08.2006, 10:51    Titel: Antworten mit Zitat

Ich mach das so:
CPP:
#pragma once

class CFenster                                 //Fenster Klasse CFenster
{
public:

   HWND CreateFenster(HINSTANCE hInstance,WNDPROC WinProc,UINT ScrWidth,UINT ScrHeight,BOOL Fullscreen,LPCTSTR WindowName,
                  LPCTSTR Icon,LPCTSTR Cursor)
   {
      hIcon   = NULL;
      hCursor = NULL;
      hIcon =(HICON)LoadImage(NULL,Icon,IMAGE_ICON, 32, 32,LR_LOADFROMFILE);
      if(hIcon==NULL)
      {
         MessageBox(NULL,"Icon konnte nicht eingelesen Werden!","",MB_OK);
      }
      hCursor =(HICON)LoadImage(NULL,Cursor,IMAGE_ICON, 32, 32,LR_LOADFROMFILE);
      if(hCursor==NULL)
      {
         MessageBox(NULL,"Cursor konnte nicht eingelesen Werden!","",MB_OK);
      }

      WNDCLASSEX      winclass;                     //Struktur zum Speichern der eigenschaften des Fensters

      winclass.cbSize            = sizeof(WNDCLASSEX);               //Größe der Struktur
      winclass.lpfnWndProc      = WinProc;                        //Zeiger auf die Callback Funktion
      winclass.cbClsExtra         = 0;
      winclass.cbWndExtra         = 0;
      winclass.hInstance         = hInstance;                     //Instanz des Programms
      winclass.hIcon            = hIcon;                        //Logo das geladen werden soll
      winclass.hCursor         = (HCURSOR)hCursor;                  //Mauszeiger der geladen werden soll
      winclass.hbrBackground      = (HBRUSH)GetStockObject(BLACK_BRUSH);   //Hintergrund Farbe des Fensters
      winclass.lpszMenuName      = NULL;                           //Name des Menüs(es wird keins verwendet)
      winclass.lpszClassName      = "CFenster";                     //(Klasse)Name des Fensters
      winclass.hIconSm         = NULL;                           //Icon das geladen werden soll

      UINT Style;
      if(!Fullscreen)
      {
         winclass.style         = CS_HREDRAW | CS_VREDRAW;            //Still des Fensters
         Style               = WS_OVERLAPPEDWINDOW | WS_POPUP | WS_VISIBLE;
      }
      else
      {
         winclass.style         = 0,                           //Still des Fensters
         Style               = WS_POPUP | WS_VISIBLE;            
      }

      if (!RegisterClassEx(&winclass))               //Fenster bei Windows registrieren lassen
      {
         return(NULL);
      }
      
      return CreateWindowEx(                        //Eigentliches Fenster erstellen
                     0,                        //
                     "CFenster",                  //Name der Fensterklasse
                     WindowName,      //Zeile die in der Titelzeile angezeigt wird
                     Style,                     //Still(z.B. Sichtbar)
                     0,0,                     //Position an dem das Fenster erstellt wird(oben links)
                     ScrWidth,                  //Breite des Fensters
                     ScrHeight,                  //Hohe des Fensters
                     NULL,                     //Handel des Übergeortneten Fenster(gibt keins)
                     NULL,                     
                     hInstance,
                     NULL);                     //Instanz des Programms
   };

   ~CFenster()
   {
      DestroyIcon(hIcon);
      DestroyIcon(hCursor);
   };

private:
   HICON hIcon;
   HICON hCursor;
};


[Edit by Mod]Ich hab mal aus "code" "cpp" gemacht, liest sich einfach besser[/Edit]
Das Bild des Cursor wird als ico File angegeben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 04.09.2006, 16:31    Titel: Antworten mit Zitat

Was stimmt hie nicht ?

Code:

   
   hr = m_lpD3DDevice->SetCursorProperties (0,0, lpSurface);
   if (FAILED (hr))
   {
      return false;
   }

   m_lpD3DDevice->ShowCursor(true);


bei:

hr = m_lpD3DDevice->SetCursorProperties (0,0, lpSurface);

mag er nicht mehr Crying or Very sad

kann mir da jemand helfen Very Happy


Zuletzt bearbeitet von peterbub am 05.09.2006, 08:13, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 04.09.2006, 16:45    Titel: Antworten mit Zitat

Ich vermute das die Datei cursor.png nicht dem 8888 ARGB surface Format entspricht. Oder etwas hiermit nicht übereinstimmt:
Zitat:

[in] Pointer to an IDirect3DSurface9 interface. This parameter must point to an 8888 ARGB surface (format D3DFMT_A8R8G8B8). The contents of this surface will be copied and potentially format-converted into an internal buffer from which the cursor is displayed. The dimensions of this surface must be less than the dimensions of the display mode, and must be a power of two in each direction, although not necessarily the same power of two. The alpha channel must be either 0.0 or 1.0.


Ausserdem fragt man sich weshalb du zuerst auf lpSurface eine neues Surface erstellst und danach ein Surface lädst?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 04.09.2006, 17:04    Titel: Antworten mit Zitat

weil ich sonst einen absturz bekomme Smile

ne das war es leider auch nicht
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Loigie
Junior JLI'ler



Anmeldedatum: 29.06.2004
Beiträge: 52
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 04.09.2006, 17:37    Titel: Antworten mit Zitat

Übergib doch mal die Rückgabewerte der DirectX Funktionen DXGetErrorDescription9();
vielleich gibt die ja eine genauere Fehlerbeschreibung. So ist es auf jeden fall
schwer etwas über die Ursache eines Fehler zu sagen.
Die Funktion CreateOffscreenPlainSurface() solltest du eigentlich weg lassen können, da D3DXLoadSurfaceFromFile() ein Surface von alleine anlegt.
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 -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
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