Sprite unter MS 2005 EE nicht angezeigt (2D)



  • Hi!
    Ich hab ein neues Projekt mit Express erstellt aber die Sprites werden nicht angezeigt obwohl es damals (auf meinem alten rechner mit MSVS 6.0) funktioniert hat...

    Laden

    CSprite sp;
    	sp.Create(Direct3D.GetDevice(),"particle.BMP",255,0,255);
    	sp.SetPosition(40,40,1);
    

    Zeichnen

    RECT r;
    r.left=0;
    r.right=ImgInfo.Width;               
    r.top=0;
    r.bottom=ImgInfo.Height;
    sp.Draw(&r,127);
    

    Die Methoden der Klasse CSprite:

    void CSprite::Create(LPDIRECT3DDEVICE9 lpDevice, LPCSTR lpFileName, BYTE red, BYTE green, BYTE blue)
    {
        m_lpDevice  = lpDevice;
    
        // Sprite anlegen
        D3DXCreateSprite(m_lpDevice,&m_lpSprite);
    
        // Inforationen über die Textur holen
        D3DXIMAGE_INFO ImgInfo;
        D3DXGetImageInfoFromFile(lpFileName,&ImgInfo);
    
        // Textur anlegen
        D3DXCreateTextureFromFileEx(m_lpDevice,
                                    lpFileName,
                                    ImgInfo.Width,
                                    ImgInfo.Height,
                                    1,0,
                                    D3DFMT_UNKNOWN,
                                    D3DPOOL_MANAGED,
                                    D3DX_FILTER_NONE,
                                    D3DX_FILTER_NONE,
                                    RGB(red,green,blue),0,0,
                                    &m_lpTexture);
    
        // Breite und Höhe speichern
        m_Width  = ImgInfo.Width;
        m_Height = ImgInfo.Height;
    
       // m_vRotationCenter = D3DXVECTOR2((float)m_Width/2,(float)m_Height/2);
        m_vRotationCenter = D3DXVECTOR3((float)1,(float)1,1);
    	m_Rotation=D3DXVECTOR3(0,0,0);
    
        // Skalierung und Schrittweite setzen
        m_vScale = D3DXVECTOR3(1.0f,1.0f,1);
    	m_vPosition.x=0;
    	m_vPosition.y=0;
    	m_vPosition.z=0;
    
        // Schrittweite des Sprites bei Bewegung
        m_StepX  = 10.0f;
        m_StepY  = 10.0f;
    }
    
    void CSprite::Draw(const RECT *source, BYTE visibility)
    {
    
    	if(!source)
        m_lpSprite->Draw(m_lpTexture,
                         source,
                      //   &m_vScale,
                         &m_vRotationCenter,
                     //    m_Rotation,
                         &m_vPosition,
                         D3DCOLOR_ARGB(visibility, 255, 255, 255) );
    
    	else{
    
    	RECT altSource={0,0,m_Width,m_Height};
    
        m_lpSprite->Draw(m_lpTexture,
                         &altSource,
                     //    &m_vScale,
                         &m_vRotationCenter,
                    //     m_Rotation,
                         &m_vPosition,
                         D3DCOLOR_ARGB(visibility, 255, 255, 255) );
    
    	}
    }
    

    ALLERDINGS musste ich einiges an der Klasse verändern.
    Anscheinend muss die Draw Methode einen Positionsvektor mit x,y UND z übergeben bekommen...obwohl es eine 2D Anwendung ist...
    Zumindest hat es bisher so geklappt...
    Ich nehme an dass ich entweder keine korrekte Kameraposition habe oder etwas anderes nicht stimmt, das bei der alten DX Version anders funktioniert hat!
    Die Pfade der Bilder die geladen werden, hab ich mit nem Filepointer überprüft und es sie werden trotzdem nicht angezeigt!
    Hab auch schon einige mögliche Positionen für das Sprite (SetPosition) ausprobiert, und x,y,z verändert aber das Ergebnis war das gleiche!
    Die Draw Methode hat sich insgesamt bei den Parametern geändert, deshalb könnte da auch der Fehler sein aber ich komm ned dahinter
    Seht ihr da den Fehler?



  • Jemand ne Idee?


Anmelden zum Antworten