JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Ich mal wieder Frage zum Buch Version 2.0
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
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

BeitragVerfasst am: 27.01.2004, 18:15    Titel: Ich mal wieder Frage zum Buch Version 2.0 Antworten mit Zitat

Hallo habe Problem bei diesen Code Abschnitt

Code:

    // Sprite in der passenden Animationsstufe zeichnen
    m_lpSprite->Draw(m_AnimationVec[m_CurrentImage],
                     0,
                     &m_vScale,
                     &m_vRotationCenter,
                     m_Rotation,
                     &m_vPosition);


Danke für eure Hilfe
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 27.01.2004, 18:36    Titel: Antworten mit Zitat

Moment. Ich muss mal meine Kristallkugel säubern *wisch wisch* Schade, leider sehe ich auch mit meiner Kristallkugel nicht was dein Problem ist. Sags uns doch einfach Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
underberg
JLI'ler



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 27.01.2004, 19:41    Titel: Antworten mit Zitat

Ich denke er versteht nicht was diese Funktion bewirkt... bzw. welche Parameter zu übergeben sind...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

BeitragVerfasst am: 27.01.2004, 20:50    Titel: Antworten mit Zitat

Nein das Problem ist das die Funktion keine 7 Parameter als uebergabe haben darf...

das ist warscheinlich wieder neu seit der Summer SDK.

Wollte nur gerne wie bei meine alten Thread das Update der funktion haben, mehr net danke!


Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 27.01.2004, 21:41    Titel: Antworten mit Zitat

Falls du es noch nicht weißt:
Jede Funktion von DirectX funktioniert zu jeder Zeit, sie sind abwärtskompatibel!!

Und wenn du oben deinen Codeausschnitt ansiehst, wirst du sehen, dass das auch nur 6 Parameter sind. Smile
_________________
The source of all power is in its destiny...
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: 27.01.2004, 21:52    Titel: Antworten mit Zitat

Stimmt nicht Abwärtskompatiblität kann man nur bedingt zu DirectX sagen.
Beim SummerUpdate ist das besonders schön zu sehen ebenso bei DX6 zu DX7
_________________
"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
Finnigan
Mini JLI'ler



Anmeldedatum: 16.10.2003
Beiträge: 16
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 27.01.2004, 22:04    Titel: Antworten mit Zitat

Oh ja,
Summerupdate und sprites haben mich auch wuschelig gemacht zuerst,
versuchs mal damit

Code:

   m_pSprite->Begin(D3DXSPRITE_ALPHABLEND);
   D3DXMATRIX rotmatrix, oldmatrix;
   m_pSprite->GetTransform(&oldmatrix);
   D3DXMatrixTransformation2D(&rotmatrix,NULL,1.0f,&m_vScale,&m_vRotation,Rotation,&m_vTranslation);
   m_pSprite->SetTransform(&rotmatrix);
   m_pSprite->Draw(m_vTextureVector[m_iCurrentShape],
            NULL,
            NULL,
            NULL,
            D3DCOLOR_ARGB (0xFF,0xFF,0xFF,0xFF));
   m_pSprite->SetTransform(&oldmatrix);
   m_pSprite->End();



Damit hab ich die Skalierung und Rotation wieder hinbekommen,
zuvor machte er immer ganz eigenartige Sachen damit
Confused
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

BeitragVerfasst am: 28.01.2004, 15:15    Titel: Antworten mit Zitat

Danke also er zeigt keine Fehler mehr an, hoffe auch nur das er jetzt alles macht was ich dem Compiler vorgebe!


Smile


und noch was rufe ich so aus der Sprite Klasse eine Texture auf

Code:


Sprite.AddTexture("../../Media/universe.jpg");
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Finnigan
Mini JLI'ler



Anmeldedatum: 16.10.2003
Beiträge: 16
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 28.01.2004, 20:02    Titel: Antworten mit Zitat

So in etwa,
gehen wird das schon, aber lass es doch noch über den
ressourcenmanager aus dem Buch laufen damit du die
Grafiken garantiert nur einmal laden musst.

Das wäre da wohl vermutlich das was du machen willst.
Code:

      char buffer[80];
      sprintf(buffer,"Fighter%d.png",i);
      RessourcenManager.AddTexture(buffer);
      cSprite.AddTexture(RessourcenManager.GetTexture(buffer));
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

BeitragVerfasst am: 28.01.2004, 20:17    Titel: Antworten mit Zitat

Ehmm ich wollte einfach erstmal nur eine Datei Laden mehr nicht und die hin und her bewegen!!

Beim Resource Manger komme ich später hin nachdem das geklappt hat!!



Edit:

Ich Am versweifeln Crying or Very sad !!! Jetzt nachdem ich den ResourceManager mit eingebunden habe, wo ich mal wieder wegen der Sch... SDK version was ändern musste, bindet mein Programm immernoch keine Bilder ein, selbst wenn ich den PFAD genau angebe! Habe sogar den Text von Christian Rousselle 1on1 Kopiert, und sogar mein Ordner Verschoben, nur um ein blödes Bild in mein Programm zu bringen, alles hat nichts genützt!!! Was soll ich den machen?!?!

Christian Rousslle könnten sie vll alle Kapitel Updaten!! Ich als noobie komm sonst nicht wirklich zurecht mit der SDK Summer!!!

Danke! Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

BeitragVerfasst am: 02.02.2004, 15:59    Titel: Antworten mit Zitat

Kommt irgendwann nochmal ne Antwort Question Question Question

Mad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 02.02.2004, 16:49    Titel: Antworten mit Zitat

zeig halt mal deine AddTexture() funktion...

generell mußt du mit D3DXCreateTextureFromFileEx() eine texture erstellen und die dann an Sprite->Draw() übergeben.

wenn das alles paßt, versuchs mal mit einem absoluten pfad (C:\test.jpg).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

BeitragVerfasst am: 02.02.2004, 17:47    Titel: Antworten mit Zitat

Hier ist alles H und CPP


Die H
Code:

#include <d3d9.h>
#include <d3dx9.h>
#include <vector>

#include "global.h"

using namespace std;


// Definition der Bewegungsrichtungen
enum DIRECTION { LEFT, RIGHT, UP, DOWN };

// Definition der Spriteklasse
class CSprite
{
    public:
       CSprite();
       virtual ~CSprite();

       // Erzeugung des Sprites
       void Create(LPDIRECT3DDEVICE9 lpDevice,int AnimationSpeed);
       
       // Textur hinzufügen
       void AddTexture(LPDIRECT3DTEXTURE9 lpTexture);

       // Sprite zeichnen
       void Draw(void);
       
       // absolute Position festlegen
       void SetPosition(float x,float y);

       // absolute Rotation festlegen
       void SetRotation(float rotation);
       
       // absolute Skalierung festlegen
       void SetScale(float scale);
       
       // Schrittweite festlegen
       void SetStep(float StepX,float StepY);

       // relative Bewegung um StepX,StepY Pixel
       void Move(DIRECTION dir);
       
       // relative Skalierung
       void Scale(float dScale);
       
       // relative Rotation
       void Rotate(float dRotation);

      //Bounce
      void Bounce(void);

     protected:

       // Zeiger auf das Direct3D Device
       LPDIRECT3DDEVICE9 m_lpDevice;
       
       // Zeiger auf das ID3DXSprite-Objekt
       LPD3DXSPRITE m_lpSprite;
   
       // aktuelle Position
       D3DXVECTOR2 m_vPosition;
   
       // Skalierung
       D3DXVECTOR2 m_vScale;
   
       // Rotationsmittelpunkt
       D3DXVECTOR2 m_vRotationCenter;

       // aktuelle Rotation
       float m_Rotation;
   
       // Schrittweite
       float m_StepX;
       float m_StepY;

       // Breite und Höhe
       int   m_Width;
       int   m_Height;

        // Geschwindigkeit für die Animation
       int m_AnimationSpeed;

       // diese Variable wird erhöhrt, bis m_AnimationSpeed
       // erreicht wurde und wird dann wieder auf 0 gesetzt
       // und die nächste Grafik wird angezeigt
       int m_AnimationDelay;

       // momentante Grafik (Textur) in der Animation
       int m_CurrentImage;

       // vector zur Speicherung der Texturen für die Animationen
       vector<LPDIRECT3DTEXTURE9> m_AnimationVec;
};

Die CPP
Code:

//Sprite CPP

#include "Sprite.h"

// Konstruktor - Initialisierungen
CSprite::CSprite(void)
{
    m_Rotation = 0;

    m_StepX    = 0;
    m_StepY    = 0;

    m_Width    = 0;
    m_Height   = 0;

    m_AnimationSpeed = 0;
    m_AnimationDelay = 0;
    m_CurrentImage   = 0;

    m_lpDevice = NULL;                 
    m_lpSprite = NULL;
}

// Destructor - freigeben der Objekte
CSprite::~CSprite(void)
{
    if(NULL != m_lpSprite)
    {
        m_lpSprite->Release();
        m_lpSprite = NULL;
    }

    // die Texturen dürfen hier nicht mehr frei gegeben
    // werden, da dies im ResourcenManager erfolgt
}

// Position setzen
void CSprite::SetPosition(float x,float y)
{
    m_vPosition.x = x;
    m_vPosition.y = y;
}

// Rotation setzen
void CSprite::SetRotation(float rotation)
{
    m_Rotation = rotation;
}

// Skalierungsfaktor setzen
void CSprite::SetScale(float scale)
{
    m_vScale.x = scale;
    m_vScale.y = scale;
}

// Schrittweite bestimmen
void CSprite::SetStep(float StepX,float StepY)
{
    m_StepX = StepX;
    m_StepY = StepY;
}

// Sprite kreiern
void CSprite::Create(LPDIRECT3DDEVICE9 lpDevice, int AnimationSpeed)
{
    m_lpDevice = lpDevice;
   
    m_AnimationSpeed = AnimationSpeed;
   
    D3DXCreateSprite(m_lpDevice, &m_lpSprite);
   
    m_vRotationCenter = D3DXVECTOR2((float)m_Width/2, (float)m_Height/2);
   
    m_vScale = D3DXVECTOR2(1.0f,1.0f);

    m_StepX = 10.0f;
    m_StepY = 10.0f;
}

// Textur für das Sprite festlegen
void CSprite::AddTexture(LPDIRECT3DTEXTURE9 lpTexture)
{
   //Beschreibung des zu Grunde liegenden Surface
   D3DSURFACE_DESC desc;

   lpTexture->GetLevelDesc(0,&desc);

   //Breite Höhe Speichern
   m_Width  = desc.Width;
   m_Height = desc.Height;

   //Zeiger auf die Texture speicher
   m_AnimationVec.push_back(lpTexture);
}

// Bewegung des Sprite
void CSprite::Move(DIRECTION dir)
{
    // Bei der Bewegung werden die Bildschirmbegrenzungen beachtet
    switch(dir)
    {
        case LEFT:
                if(m_vPosition.x > 0)
                {
                    m_vPosition.x -= m_StepX;
                }
        break;

        case RIGHT:
                if(m_vPosition.x < SCR_WIDTH - m_Width)
                {
                    m_vPosition.x += m_StepX;
                }
        break;

        case UP:
                if(m_vPosition.y > 0)
                {
                    m_vPosition.y -= m_StepY;
                }
        break;

        case DOWN:
                if(m_vPosition.y < SCR_HEIGHT - m_Height)
                {
                    m_vPosition.y += m_StepY;
                }
        break;
    }
}

// Skalierung des Sprites
void CSprite::Scale(float dScale)
{
    m_vScale.x += dScale;
    m_vScale.y += dScale;
}

// Rotation des Sprites
void CSprite::Rotate(float dRotation)
{
    m_Rotation += dRotation;
}

// Sprite zeichnen
void CSprite::Draw(void)
{
   D3DXVECTOR3 neuePosition=D3DXVECTOR3(m_vPosition.x,m_vPosition.y,0);
    // testen, ob die nächste Animation angezeigt werden soll
    if(++m_AnimationDelay > m_AnimationSpeed)
    {
        m_AnimationDelay = 0;

        // wenn ja, nächste Grafik (Textur) verwenden
        if(++m_CurrentImage >= m_AnimationVec.size())
        {
            m_CurrentImage = 0;
        }
    }

    // Sprite in der passenden Animationsstufe zeichnen
m_lpSprite->Draw(m_AnimationVec[m_CurrentImage],
                     0,
                     &m_vRotationCenter,
                     &m_vPosition,
                     0xFFFFFFFF);

}

void CSprite::Bounce(void)
{
    // x- und y-Wert um StepX und StepY erhöhen
    m_vPosition.x += m_StepX;
    m_vPosition.y += m_StepY;
   
    // wenn sich das Sprite aus dem Anzeigebereich
    // bewegt, Richtung umkehren

    if(m_vPosition.x < 0 || m_vPosition.x > SCR_WIDTH - m_Width)
    {
        m_StepX = -m_StepX;
    }
   
    if(m_vPosition.y < 0 || m_vPosition.y > SCR_HEIGHT - m_Height)
    {
        m_StepY = -m_StepY;
    }
}


SO Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 02.02.2004, 18:04    Titel: Antworten mit Zitat

also deine methode
void AddTexture(LPDIRECT3DTEXTURE9 lpTexture);
erwartet einen pointer auf eine textur.
damit dürfte soein aufruf:
Sprite.AddTexture("../../Media/universe.jpg");
...gar nicht kompilieren.

du mußt dir zuwerst mit D3DXCreateTextureFromFileEx() aus dem pfad eine LPDIRECT3DTEXTURE erzeugen und die übergibst du dann.

lies dir das kapitel 'sprites' nochmal durch, da ist eh alles genauestens erklärt...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Igorr
Mini JLI'ler



Anmeldedatum: 07.01.2004
Beiträge: 24
Wohnort: Hamburg
Medaillen: Keine

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

Problem wie es so dargestellt, ist geht es auch nicht, wegen der SDK Summer ist wieder was neu, und ich habe schon die ResourceManager h und Cpp eingebunden da ist FromFileEx drinne!

Code:

m_lpSprite->Draw(m_AnimationVec[m_CurrentImage],
                     0,
                     &m_vRotationCenter,
                     &m_vPosition,
                     0xFFFFFFFF);


hier in der Zeile ist der Fehler ganz am ende!
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
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