Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 18.07.2004, 17:06 Titel: Ein zweiten Sprite mit D3DXCreateTextureFromFileEx() laden? |
|
|
Moin,
da ich mein Projekt eigentlich überschaubar lassen wollte, will ich nicht X Projektdateien hinzufügen um sprites zu laden, daher meine Frage:
Kann ich einfach mir D3DXCreateTextureFromFileEx() mehrere Sprites laden und zeichnen lassen?? Wenn ja was muss ich beachten?
Hier ist mal der Code:
Code: | // Textur laden, FILE_NAME enthält den Dateinamen
D3DXCreateTextureFromFileEx(lpD3DDevice,
FILE_NAME,
150,150,
1,0,
D3DFMT_UNKNOWN,
D3DPOOL_MANAGED,
D3DX_FILTER_NONE,
D3DX_FILTER_NONE,
0xFFFF00FF,
0,0,
&lpSpriteTexture);
// Sprite kreiern
D3DXCreateSprite(lpD3DDevice,&lpSprite);
|
Oder muss ich doch sämtliche Sprite Klassen und sowas mit in das Projekt aufnehmen? Wär ja schön wenn nicht
Vielen Dank,
JkerryZ |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 18.07.2004, 17:22 Titel: |
|
|
WTF ^^
Also die Spriteklassen (bei dir lpSprite) brauchst du nur einmal ich habs bei mir statisch gemacht (dank an Christian R.) da es ansonsten zuviel Zeit zum erstellen beansprucht und massig Speicher verbraucht.
Bei den Texturen kannst du dir ja einen Ressourcenmanager basteln der alle Texturen verwaltet (im Buch wurde das gemacht oder ?)
Ansonsten solltest du uns genauer sagen was genau du machen willst. _________________ "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 |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 18.07.2004, 17:29 Titel: |
|
|
Ja, ich könnte so einen Texturenmanager basteln aber das würde den Umfang an Dateien wieder vergrößern. Und das will ich nicht.
Mit der o.g. Funktion kann ich ja ein Sprite "kreiren" und anzeigen lassen.
Und nun will ich statt einem Sprite zwei "kreiren" und anzeigen lassen. |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 18.07.2004, 17:35 Titel: |
|
|
Du musst einfach 2 Texturen laden und kannst dann:
Code: |
lpSprite->Draw(Texture1,...);
lpSprite->Draw(Texture2,...);
|
sagen. |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 18.07.2004, 17:59 Titel: |
|
|
Muss ich dann auch
Code: | // Initialisierung
LPD3DXSPRITE lpSprite2 = NULL;
LPDIRECT3DDEVICE9 lpD3DDevice2 = NULL;
LPDIRECT3DTEXTURE9 lpSpriteTexture2 = NULL; |
so das zweite Sprite Initialisieren oder muss ich das nur einmal für beide machen?
Und muss ich sowas auch für das zweite Sprite machen:
Code: | // Sprite-Position
float g_x = 450;
float g_y = 650;
// Breite und Höhe des Sprites
int SpriteWidth = 115;
int SpriteHeight = 16; | ?
Und D3DXCreateTextureFromFileEx() muss ich dann auch nochmal für das zweite Sprite aufrufen oder muss ich nur
Code: | lpSprite->Draw(Sprite1,...);
lpSprite->Draw(Sprite2,...); |
bzw. Code: | lpSprite->Draw(lpSpriteTexture,...);
lpSprite->Draw(lpSpriteTexture2,...); |
sagen?
Und das hier:
Code: | // Sprite kreiern
D3DXCreateSprite(lpD3DDevice,&lpSprite); | muss ich das auch für das zweite Sprite sagen?
Vielen Dank
JkerryZ
Zuletzt bearbeitet von JkerryZ am 19.07.2004, 10:32, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 18.07.2004, 18:02 Titel: |
|
|
Sprite!=Textur _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 18.07.2004, 18:12 Titel: |
|
|
Oh ja sorry!
Also ich meine Sprite. |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 19.07.2004, 10:47 Titel: |
|
|
Ich habe jetzt mal alles auch noch für einen zweiten Sprite deklariert
also so z.B. Code: | // Initialisierung
LPD3DXSPRITE lpSprite = NULL;
LPDIRECT3DDEVICE9 lpD3DDevice = NULL;
LPDIRECT3DTEXTURE9 lpSpriteTexture = NULL;
// Initialisierung
LPD3DXSPRITE lpSprite2 = NULL;
LPDIRECT3DDEVICE9 lpD3DDevice2 = NULL;
LPDIRECT3DTEXTURE9 lpSpriteTexture2 = NULL;
// Skalierungsfaktor des Sprites
float Scale = 1.0f;
float Scale2 = 1.0f; |
das hab ich mit allem gemacht, nur jetzt nicht extra aufgeführt, ihr wisst ja was ich meine, oder?
Jedenfalls kann ich das alles fehlerfrei kompilieren, und das Programm wird auch fehlerfrei ausgeführt, nur der zweite Sprite wird nicht nagezeigt. Der Pfad stimmt, der Dateiname auch, andere Dateien werden aber auch nicht angezeigt. Was mach ich da noch falsch?? |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 19.07.2004, 10:55 Titel: |
|
|
Ja, was soll man dazu sagen, irgendwas machst du falsch Generell geht das schon.
Christian |
|
Nach oben |
|
 |
=]Mid[=]Night[= Super JLI'ler

Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 19.07.2004, 11:12 Titel: |
|
|
hm, es wurde zwar schon mehrmals gesagt, aber:
du brauchst nur ein LPD3DXSPRITE, sowieso nur ein LPDIRECT3DDEVICE9, aber zwei LPDIRECT3DTEXTURE9.
Code: |
//Device und Sprite
LPDIRECT3DDEVICE9 lpD3DDevice = NULL;
LPD3DXSPRITE lpSprite = NULL;
// 2 Texturen
LPDIRECT3DTEXTURE9 lpTexture1 = NULL;
LPDIRECT3DTEXTURE9 lpTexture2 = NULL;
// Device wie gewohnt erzeugen
// Sprite erzeugen
D3DXCreateSprite(lpD3DDevice, &lpSprite);
// Sprites zeichnen
lpSprite->Draw(lpTexture1, ...);
lpSprite->Draw(lpTexture2, ...);
|
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 19.07.2004, 12:49 Titel: |
|
|
jo genau das fand ich auch am Buch nivcht gerade Vorbildlich, das für jedes Objekt ein neues XSprite erstellt wird.
Außerdem fad ich es nicht so toll das die Sprite Klasse ne Move Funktion hat, das gehört da nämlich eigentlich nicht rein. Lieber eine universelle Sprite Klasse die man dann in allen Programmen benutzen kann. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Odium Junior JLI'ler
Anmeldedatum: 29.12.2003 Beiträge: 78
Medaillen: Keine
|
Verfasst am: 19.07.2004, 17:06 Titel: |
|
|
wenn ich das richtig verstanden habe:Du willst mehrere Bilder mit nur einem LPDIRECT3DTEXTURE9 anzeigen lassen.Dafür lädst du einfach ne Datei in der die Bilder drinnen sind,die du dann anzeigen willst in eine Textur.Dann kannst du mit dem pSrcRect-Parameter von Sprite->Draw(...) den Bereich der Textur angeben, der gezeichnet werden soll. So hätt ichs gemacht,weiss aber net ob ich deine Frage verstanden hab'.  |
|
Nach oben |
|
 |
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 19.07.2004, 18:14 Titel: |
|
|
Jonathan_Klein hat Folgendes geschrieben: | jo genau das fand ich auch am Buch nivcht gerade Vorbildlich, das für jedes Objekt ein neues XSprite erstellt wird.
Außerdem fad ich es nicht so toll das die Sprite Klasse ne Move Funktion hat, das gehört da nämlich eigentlich nicht rein. Lieber eine universelle Sprite Klasse die man dann in allen Programmen benutzen kann. |
versteh ich nicht, sollte man das denn so machen?
also so dass die spriteklasse nicht ein sprite/eine textur/eine position/skalierung etc. hat, sondern ein sprite/alle texturen/alle positionen, ... |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 19.07.2004, 18:49 Titel: |
|
|
naja am besten erklär ich das ein bsichen besser. In eine Spriteklasse eine Movefunktion mit abprallfunktion am Bildschirmrand ist schwachwsinnig, weil das dann kein Sprite sondern ein Spielobjekt ist. So kann man die Klasse nur für dies eine Spiel nutzen.
Zur Spriteklasse: Meine Direct3D Klasse erzeugt EIN XSprite und gibt einen Zeiger fdarauf an alle Spriteobjekte weiter (ist ne exrta Klasse). Wenn ich also ein Sprite erstelle, bracuht es einen Zeiger auf die Direct3D Klasse. Die Klasse lädt dann die textur und merkt sich alle wichtigen Werte, wie Skalierung und Drehung. So kann ich sie für alle programme einsetzten und muss immer nur EIH XSprite erstellen, was viel schneller und Ressourcenschonender ist. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 19.07.2004, 22:08 Titel: |
|
|
Odium hat Folgendes geschrieben: | Du willst mehrere Bilder mit nur einem LPDIRECT3DTEXTURE9 anzeigen lassen.Dafür lädst du einfach ne Datei in der die Bilder drinnen sind,die du dann anzeigen willst in eine Textur.Dann kannst du mit dem pSrcRect-Parameter von Sprite->Draw(...) den Bereich der Textur angeben, der gezeichnet werden soll. So hätt ichs gemacht,weiss aber net ob ich deine Frage verstanden hab'.  |
Kann ich das auch machen, wenn ein Sprite zu steuern ist und einer selbstständig "rumbouncen" soll?? |
|
Nach oben |
|
 |
|