Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Igorr Mini JLI'ler
Anmeldedatum: 07.01.2004 Beiträge: 24 Wohnort: Hamburg Medaillen: Keine
|
Verfasst am: 27.01.2004, 18:15 Titel: Ich mal wieder Frage zum Buch Version 2.0 |
|
|
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 |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 27.01.2004, 18:36 Titel: |
|
|
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 |
|
Nach oben |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 27.01.2004, 19:41 Titel: |
|
|
Ich denke er versteht nicht was diese Funktion bewirkt... bzw. welche Parameter zu übergeben sind... |
|
Nach oben |
|
|
Igorr Mini JLI'ler
Anmeldedatum: 07.01.2004 Beiträge: 24 Wohnort: Hamburg Medaillen: Keine
|
Verfasst am: 27.01.2004, 20:50 Titel: |
|
|
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!
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 27.01.2004, 21:41 Titel: |
|
|
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. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 27.01.2004, 21:52 Titel: |
|
|
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 |
|
|
Finnigan Mini JLI'ler
Anmeldedatum: 16.10.2003 Beiträge: 16 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 27.01.2004, 22:04 Titel: |
|
|
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
|
|
Nach oben |
|
|
Igorr Mini JLI'ler
Anmeldedatum: 07.01.2004 Beiträge: 24 Wohnort: Hamburg Medaillen: Keine
|
Verfasst am: 28.01.2004, 15:15 Titel: |
|
|
Danke also er zeigt keine Fehler mehr an, hoffe auch nur das er jetzt alles macht was ich dem Compiler vorgebe!
und noch was rufe ich so aus der Sprite Klasse eine Texture auf
Code: |
Sprite.AddTexture("../../Media/universe.jpg");
|
|
|
Nach oben |
|
|
Finnigan Mini JLI'ler
Anmeldedatum: 16.10.2003 Beiträge: 16 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 28.01.2004, 20:02 Titel: |
|
|
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 |
|
|
Igorr Mini JLI'ler
Anmeldedatum: 07.01.2004 Beiträge: 24 Wohnort: Hamburg Medaillen: Keine
|
Verfasst am: 28.01.2004, 20:17 Titel: |
|
|
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 !!! 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! |
|
Nach oben |
|
|
Igorr Mini JLI'ler
Anmeldedatum: 07.01.2004 Beiträge: 24 Wohnort: Hamburg Medaillen: Keine
|
Verfasst am: 02.02.2004, 15:59 Titel: |
|
|
Kommt irgendwann nochmal ne Antwort
|
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 02.02.2004, 16:49 Titel: |
|
|
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 |
|
|
Igorr Mini JLI'ler
Anmeldedatum: 07.01.2004 Beiträge: 24 Wohnort: Hamburg Medaillen: Keine
|
Verfasst am: 02.02.2004, 17:47 Titel: |
|
|
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 |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 02.02.2004, 18:04 Titel: |
|
|
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 |
|
|
Igorr Mini JLI'ler
Anmeldedatum: 07.01.2004 Beiträge: 24 Wohnort: Hamburg Medaillen: Keine
|
Verfasst am: 02.02.2004, 19:13 Titel: |
|
|
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 |
|
|
|