JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Ein zweiten Sprite mit D3DXCreateTextureFromFileEx() laden?
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 18.07.2004, 17:06    Titel: Ein zweiten Sprite mit D3DXCreateTextureFromFileEx() laden? Antworten mit Zitat

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 Smile

Vielen Dank,
JkerryZ
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 18.07.2004, 17:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 18.07.2004, 17:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.07.2004, 17:35    Titel: Antworten mit Zitat

Du musst einfach 2 Texturen laden und kannst dann:


Code:

lpSprite->Draw(Texture1,...);
lpSprite->Draw(Texture2,...);


sagen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 18.07.2004, 17:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 18.07.2004, 18:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 18.07.2004, 18:12    Titel: Antworten mit Zitat

Zitat:
Sprite!=Textur
Oh ja sorry!
Also ich meine Sprite.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 19.07.2004, 10:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 19.07.2004, 10:55    Titel: Antworten mit Zitat

Ja, was soll man dazu sagen, irgendwas machst du falsch Wink Generell geht das schon.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 19.07.2004, 11:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 19.07.2004, 12:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Odium
Junior JLI'ler



Anmeldedatum: 29.12.2003
Beiträge: 78

Medaillen: Keine

BeitragVerfasst am: 19.07.2004, 17:06    Titel: Antworten mit Zitat

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'. Surprised
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 19.07.2004, 18:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 19.07.2004, 18:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 19.07.2004, 22:08    Titel: Antworten mit Zitat

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'. Surprised

Kann ich das auch machen, wenn ein Sprite zu steuern ist und einer selbstständig "rumbouncen" soll??
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 -> Entwicklung 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