JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Kapitel 21.2 "Sprites bewegen" und DirectX9 Oktobe
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Leviathan
Mini JLI'ler


Alter: 49
Anmeldedatum: 12.01.2005
Beiträge: 31
Wohnort: S9
Medaillen: Keine

BeitragVerfasst am: 12.01.2005, 07:27    Titel: Kapitel 21.2 "Sprites bewegen" und DirectX9 Oktobe Antworten mit Zitat

Hallo zusammen,

kann mir bitte jemand helfen den Quellcode vom Kapitel 21.2 zu modifizieren, so dass das Beispiel auch mit der Version DirectX Oktober funktioniert?

Da schein wohl die Methode "draw" der Sprite-Klasse 5 statt 7 Parameter zu haben.
Außerdem verursacht die Textausgabe einen Laufzeitfehler.
Hat es einer von euch zum laufen bekommen?

Vielleicht könnte der Autor des Buches ein paar Worte dazu verlieren.

Danke sehr!

mfg
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: 12.01.2005, 08:15    Titel: Antworten mit Zitat

Du hast unter C:/DXSDK/Doc die Hilfedatei. Gib da die Funktionsnamen ein, und du kriegst die Beschreibung aller Parameter, und was du beachten musst.

Warum hast du um die Zeit keine Schule?(8:27am)

Gruß
_________________
"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
Leviathan
Mini JLI'ler


Alter: 49
Anmeldedatum: 12.01.2005
Beiträge: 31
Wohnort: S9
Medaillen: Keine

BeitragVerfasst am: 12.01.2005, 08:23    Titel: Antworten mit Zitat

Ich hab auch versucht die Parameter anzupassen, bloß ich bekomme jedes Mal nur einen schwarzen Bildschirm zu sehen, ohne den Sprite...

Da sind nun 3dVektoren statt 2dVektoren zu verwenden. Ist ja wunderbar, ich habe sie augetauscht und die z-Koordinate auf 0.0f gesetzt.

Es ist aber kein Sprite zu sehen.

Außerdem: wenn ich die Textausgabe nicht auskommentiere, dann gibts noch zusätzlich zur Laufzeit einen Fehler. Da hilft nun keine Online Hilfe mehr...
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: 12.01.2005, 08:25    Titel: Antworten mit Zitat

Code:
// Erzeugen der D3D-Schrift
void CDirect3D::CreateFont(void)
{
    // Struktur für die Beschreibung der Schriftart
    // anlegen und Elemente mit 0 initialisieren
    D3DXFONT_DESC FontDesc = { 0 };

    // // das Element FaceName muss den Namen der 
    // gewünschten Schriftart enthalten
    strcpy(FontDesc.FaceName, "Arial");

    // nach erfolgreichem Aufruf zeigt lpD3DFont
    // auf ein Objekt vom Typ D3DXFont
    D3DXCreateFontIndirect(m_lpD3DDevice,
                           &FontDesc,
                           &m_lpD3DFont);
}


Code:
// Text an Position x,y ausgeben
void CDirect3D::DrawText(LPCSTR Text, int x, int y, D3DCOLOR TextColor,bool bCenter)
{
    RECT r = { x, y, 0, 0 };

    // Größe des Rechtecks berechnen
    m_lpD3DFont->DrawText(NULL, Text, -1, &r, DT_CALCRECT, TextColor);

   if(bCenter)
   {
      int width=(r.right-r.left)/2;
      int height=(r.bottom-r.top)/2;
      r.left-=width;
      r.right-=width;
      r.top-=height;
      r.bottom-=height;
   }
    // Text ausgeben
    m_lpD3DFont->DrawText(NULL, Text, -1, &r, DT_CENTER, TextColor);   
}



Hier musste ne menge schaun was du brauchst, weil issn bissl viel modifiziert
Code:
// Sprite zeichnen
void CSprite::Draw()
{
   //Kein brauchbares Animationsset gewählt
   if(m_CurrentAnimSet==-1 || !m_Visible)
      return;
   if(bProcess)
      Process();
    // testen, ob die nächste Animation angezeigt werden soll
    if(++m_AnimationDelay > m_AnimationSpeed && m_PlayAnimation)
    {
        m_AnimationDelay = 0;

        // wenn ja, nächste Grafik (Textur) verwenden
        if(++m_CurrentImage >= m_AnimSet[m_CurrentAnimSet].m_AnimationVec.size())
        {
         if(!m_LoopAnimation)
            m_PlayAnimation = false;
            m_CurrentImage = 0;
        }
    }

   m_vCenter = D3DXVECTOR3((float)m_AnimSet[m_CurrentAnimSet].m_Width/2, (float)m_AnimSet[m_CurrentAnimSet].m_Height/2,0.0f);

   // Transformationsmatrizen angeben - neu im Summer Update 2003
   D3DXMATRIXA16 matCombo, matRot, matScale, matTrans;

   D3DXMatrixRotationZ(&matRot,m_Rotation);
   D3DXMatrixScaling(&matScale, m_vScale.x, m_vScale.y, m_vScale.z);
   D3DXMatrixTranslation(&matTrans, m_vPosition.x+stepx, m_vPosition.y+stepy, m_vPosition.z);
   
   D3DXMatrixMultiply(&matCombo, &matRot, &matScale);
   D3DXMatrixMultiply(&matCombo, &matCombo, &matTrans);

   m_lpSprite->Begin(D3DXSPRITE_DONOTSAVESTATE | D3DXSPRITE_ALPHABLEND);

   m_lpSprite->SetTransform(&matCombo);

     // Sprite in der passenden Animationsstufe zeichnen
   char alpha=(char)m_Alpha;
    HRESULT hr=m_lpSprite->Draw(m_AnimSet[m_CurrentAnimSet].m_AnimationVec[m_CurrentImage],
               NULL,
                   &m_vCenter,
                   NULL,
                   D3DCOLOR_RGBA(255,255,255,alpha));

   m_lpSprite->End();   

}

_________________
"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
HomeLess_PunkDrummer
JLI Master Trainee


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

BeitragVerfasst am: 12.01.2005, 08:27    Titel: Antworten mit Zitat

Was für Textausgabe? von der Direct3D-Klasse? Dann könnte doch der Fehler ganz woanders sein. Was für ein Laufzeitfehler is das?

EDIT: fallen war ma wieder schneller>< Wink
_________________
"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
Leviathan
Mini JLI'ler


Alter: 49
Anmeldedatum: 12.01.2005
Beiträge: 31
Wohnort: S9
Medaillen: Keine

BeitragVerfasst am: 12.01.2005, 09:07    Titel: Antworten mit Zitat

HomeLess_PunkDrummer hat Folgendes geschrieben:
Was für Textausgabe? von der Direct3D-Klasse? Dann könnte doch der Fehler ganz woanders sein. Was für ein Laufzeitfehler is das?


Die Textausgabe steht in dem Originalbeispiel direkt hinter dem Draw des Sprites.
Den Quellcode habe ich leider im Moment nicht zur Hand.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Leviathan
Mini JLI'ler


Alter: 49
Anmeldedatum: 12.01.2005
Beiträge: 31
Wohnort: S9
Medaillen: Keine

BeitragVerfasst am: 12.01.2005, 11:52    Titel: Antworten mit Zitat

@ FallenAngel84
Danke! Wahrscheinlich liegt es an dem "Begin" und "End" beim Sprite selbst.
Ich werde es heute abend ausprobieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Leviathan
Mini JLI'ler


Alter: 49
Anmeldedatum: 12.01.2005
Beiträge: 31
Wohnort: S9
Medaillen: Keine

BeitragVerfasst am: 12.01.2005, 21:26    Titel: Antworten mit Zitat

Hallo nochmals,

es funktioniert jetzt wunderbar mit dem Sprite.

Wenn mir jetzt noch einer sagen könnte warum die Anweisung:
Code:

Direct3D.DrawText("Bewegung mit Hilfe der Nachrichtenfunktionen - Bewegung ist nicht flüssig",100,100,0xFFFFFFFF);


einen Laufzeitfehler verursacht...
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: 12.01.2005, 21:53    Titel: Antworten mit Zitat

Kannst ja mal nen Haltepunkt auf die Funktion setzen dann Debuggen und mit F10/F11 schaun wo genau er sich verabschiedet. Ich nehme mal an das es etwas mit dem Text bzw. der Länge des Textes zu tun hat.

Ich hab das Problem aber nicht das ich auf std::string umgestiegen bin Smile
_________________
"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
Leviathan
Mini JLI'ler


Alter: 49
Anmeldedatum: 12.01.2005
Beiträge: 31
Wohnort: S9
Medaillen: Keine

BeitragVerfasst am: 13.01.2005, 11:42    Titel: Antworten mit Zitat

@ FallenAngel84
Hast Du auch die DirectX Version vom Oktober installiert?

Bei mir geht nämlich der Aufruf der drawText Methode in allen Beispielen schief...
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: 13.01.2005, 14:21    Titel: Antworten mit Zitat

Hab nur die SummerSDK

welche Visual Studoi Version hast du ? Hab geört das bei Version6 das October SDK nicht geht.
_________________
"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
Leviathan
Mini JLI'ler


Alter: 49
Anmeldedatum: 12.01.2005
Beiträge: 31
Wohnort: S9
Medaillen: Keine

BeitragVerfasst am: 13.01.2005, 14:36    Titel: Antworten mit Zitat

Hi!

Es funktioniert auch mit VS C++, bloß Du mußt dir außer dem SDK auch noch "Extras" von der Microsoft Seite runterladen.
Dort ist ne lib (dxd9 glaube ich, ist aber genau beim Download von DirectX Oktober oder Dezember auf der Seite beschrieben), die Du per Hand in Dein Studio verzeichnis reinkopierst.
Die ist extra für VS kompiliert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 13.01.2005, 14:48    Titel: Antworten mit Zitat

Leviathan hat Folgendes geschrieben:
Hallo nochmals,

es funktioniert jetzt wunderbar mit dem Sprite.

Wenn mir jetzt noch einer sagen könnte warum die Anweisung:
Code:

Direct3D.DrawText("Bewegung mit Hilfe der Nachrichtenfunktionen - Bewegung ist nicht flüssig",100,100,0xFFFFFFFF);


einen Laufzeitfehler verursacht...

Um welches Objekt handelt e sich bei Direct3D?
Ein Direct3D Device kann es nicht sein, weil es dort keine Funktion namens DrawText gibt.

Kommt der Laufzeitfehler während des Ausführens? Oder kannst du das Programm nicht vollständig kompilieren?

Hast du schonmal hier [Update Kapitel 19 - DrawText] geguckt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

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

KI hat Folgendes geschrieben:
Ein Direct3D Device kann es nicht sein, weil es dort keine Funktion namens DrawText gibt.


Mich hätte ja eher der Punktoperator stutzig gemacht Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


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

BeitragVerfasst am: 13.01.2005, 15:06    Titel: Antworten mit Zitat

isn objekt von der Direct3D Klasse ausm Buch, benutz ich selbst noch. *pranz*
jaaa verdammt, ich weiß das wisst ihr selbst... Rolling Eyes Wink
_________________
"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
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
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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