JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

bilder nicht extern ?
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
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 04.08.2002, 13:06    Titel: bilder nicht extern ? Antworten mit Zitat

hi,
mich nervt andauernt die bmp files und die ordner struktur u.s.w. immer mit der .exe zu kopieren. Gibt es nicht eine möglichkeit das die Bilder mit in der exe drin sind ?

cu
_________________
"Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."

"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."

"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 04.08.2002, 14:52    Titel: Antworten mit Zitat

Natürlich... Benutze einfach die Imageressource. Die Bilder mußt du dann einfach aus der Ressource laden, nicht von der Datei. Beim Kompilieren werden dann die Bilder mit in der Exe gelinkt...

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 04.08.2002, 15:13    Titel: Antworten mit Zitat

sorry aber ich bin nicht son gosu wie du in C++, kannst du mir das vieleicht genauer erklären , so das es mich weiter bringt Smile?
_________________
"Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."

"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."

"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 04.08.2002, 22:24    Titel: Antworten mit Zitat

<Fluchen>
ARGH - Ich habe eine halbe Stunde an einem Text geschrieben, den ich dann mit einem falschen Klick im Browser in's Datennirvana schickte...
</Fluchen>

Also nochmal von vorne:

Importiere die Bilder in deinem Projekt als Ressource. Zur Besseren Verständigung gehe ich davon aus, daß deine Hauptdatei WinMain.cpp heist, der dazugehörige Header WinMain.h, die Spriteklasse sich in Sprite.cpp/Sprite.h befindet und dein Projekt bisher noch keine Ressourcen verwendet.

Kopiere in der Sprite.h / Sprite.cpp die Funktion CreateSurfaceFromBitmap() und benenne Sie in CreateSurfaceFromRessource() um. (Die Funktion befindet sich im Buch JLI-Spieleprogrammierung... auf den Seiten 325/326. Verändere die Codezeilen 18/19 (Buchzeilennummerierung) Folgendermaßen ab:
Code:

hBM = (HBITMAP)LoadImage(0, File, IMAGE_BITMAP, dWidth,
                         dHeight, 0);

Die Funktion LoadImage kann nämlich auch Ressourcen laden, indem man dieses LR_LOADFROMFILE nicht mit angibt. Es bleibt dir überlassen, dem Parameter LPSTR File in LPSTR Ressource umzubenennen.
Nun zum Erstellen der entsprechenen Ressource:
Klicke auf Einfügen, Ressource, Importieren. Wähle als Dateityp *.* und wähle danach das (Hoffentlich schon fertige) Bitmap aus. Bestätige alles mit Importieren und wiederhole den Vorgang für weitere Bilder. (Die Warnmeldung beim Importieren, daß die Bilder mit mehr als 256 Farben nicht bearbeitet werden können, kannst du getrost vergessen, da du die Bilder eh mit Gimp, PSP oder einem ähnlichem Programm erstellst / erstellt hast. (Hoffe ich zumindest, klauen ist nicht gerade die feine Englische Art)) Du kannst und solltest die Standardbezeichnungen IDB_BITMAP1, IDB_BITMAP2, ... in sinvolle Bezeichner umbenennen. Diese Namen mußt du der Funktion übergeben, damit sie die Ressourcen lädt. Speichere das Ressourcenscript unter dem Namen WinMain.rc ab. VC++ 6 Erstellt neben der WinMain.rc noch eine passende Headerdatei ressourece.h.
Includiere die ressource.h nach Winmain.h und Sprite.h. Füge die Dateien ressource.h, WinMain.rc sowie die Bilder dem Projekt hinzu. Wenn du das Projekt nun erneut erstellst, wird die Exe-Datei um einiges größer sein, als vorher, immerhin befinden sich jetzt mehrere Bilder in Ihr.
Diese Vorgehensweise ist allerdings nicht uneingeschränkt zu empfehlen, da die Exe-Datei komplett in den Speicher geladen werden muß, damit sie ausgeführt werden kann. Weiterhin müssen die Bilder selbst nochmal in Form der Surface im Speicher hängen (also doppelt) sofern sie in den Physikalischen Speicher geladen werden, wenn der Videospeicher bereits voll ist. Während des Ladevorgangs in der Routine CreateSurfaceFromRessource befindet sich ein Bild also bis zu 3x im Hauptspeicher... Ein Bild, 1024x768 Pixel, 32Bit ist 2,25 MB groß, 3x im Speicher sind dadurch also schonmal 6,75 MB für ein Bild, wenn auch nur kurzzeitig. Außerdem ist mir nicht bekannt, wie groß die maximale Dateigröße ist, die Windows ohne mucken ausführt oder die VC++ 6 erstellt.

Soweit zur Erklärung.

Als Hausaufgabe erstellst du die Ressource nicht in der Exe-Datei, sondern benutzt dafür eine Win32 Dynamic Link Library und fügst sie dem Projekt hinzu. Als Hinweis: die DLL benötigt keinen Code, da sie nur als Träger der Ressourcen verwendet wird.

Bis Bald, AFE-GmdG

PS.: Übersetze doch mal den Begriff Gosu!
PPS.: Ich habe den beschriebenen Weg selbst noch nicht programmiert, aber ich gehe davon aus, das ich nichts vergessen hab und das der Code so funktioniert.

@Christian: Brauchst du vielleicht noch programmiertechnische Hilfe für dein nächstes Buch?[/b]
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



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

BeitragVerfasst am: 05.08.2002, 07:08    Titel: Gut Antworten mit Zitat

Ja das ist schon Mal etwas nützlich...

...aber weiß oder kennt jemadn ein Buch in dem beschrieben wird, wie man nicht nur Bitmaps (bmp) sondern auch gif oder jpg Dateien laden kann? Oder alle in ein File (Art Zip,rar oder tmd) rein packen und dann aus dem File die Dateien gleich in den Speicher laden?


Cu TheMillenium
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael
JLI'ler



Anmeldedatum: 20.07.2002
Beiträge: 173
Wohnort: Münster / NRW
Medaillen: Keine

BeitragVerfasst am: 05.08.2002, 11:39    Titel: Antworten mit Zitat

Bilder intern wollte ich auch schon immer mal haben aber irgendwie klappt das bei mir gar nicht. die funktion loadimage liefert immer null zurück also sie kann das bild nicht laden obwohl ichs gemacht habe wie du gesagt hast.

du der dll: wie soll ich das machen? ich hab ein win32-dll-projekt erstellt und jetzt einfach unter projekt -> dem projekt hinzufügen die bitmaps ausgewählt, er macht mir dann beim compilieren aber keine dll-datei. oder wenn ich ein ressourcesskript mit den bildern erstelle, diese .rc-datei (und die .h-datei) zum projekt hinzufüge erhalte ich den linkerfehler, dass ihm die DllMain fehlt. was muss ich anders machen?
_________________
Es geht auch ohne Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Christian Rousselle
Site Admin


Alter: 47
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 05.08.2002, 12:03    Titel: Antworten mit Zitat

@TheMillenium

Mit dem Projekt zum Laden von JPG,PNG,BMP, usw. sollte das alles sehr leicht möglich sein. Du mußt die Bilder nur in ein File kopieren und den Offset von Anfang speichern, dann kannst du mit der Library alles aus einem File laden.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 05.08.2002, 19:56    Titel: Antworten mit Zitat

@Michael:
Erstelle einfach eine Funktion DllMain() und programmiere einfach nur einen Rückgabewert.
Code:

BOOL WINAPI DllMain(
  HINSTANCE hinstDLL,  // handle to DLL module
  DWORD fdwReason,     // reason for calling function
  LPVOID lpvReserved   // reserved
) {
return TRUE;
}


Vergesse auch nicht, Ressource.h zu includieren!

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael
JLI'ler



Anmeldedatum: 20.07.2002
Beiträge: 173
Wohnort: Münster / NRW
Medaillen: Keine

BeitragVerfasst am: 06.08.2002, 08:41    Titel: Antworten mit Zitat

Danke erstmal soweit. Scheint funktioniert zu haben. Jetzt gibt es nur noch ein Problem beim Laden. Folgender Codeausschnitt soll das machen, ich weiß nur nicht ganz, wie ich jetzt einen Pointer auf das Bitmap oder so kriegen soll:

Code:

BOOL LoadDll()
{
HMODULE hMod = LoadLibrary("DLL.dll");
if(0 == hMod) return FALSE;

// "#101" ist ein String, der die Resource mit der Nummer 101  lädt!
   HRSRC hRes = FindResource(hMod, "#101", RT_BITMAP);
if(0 == hRes) return FALSE;

HGLOBAL hGlobalRes = LoadResource(hMod, hRes);
if(0 == hGlobalRes) return FALSE;

return TRUE;
}


Was soll ich jetzt mit dem HGLOBAL-Handle machen? Irgendwie brauche ich ja ein HBITMAP-Handle oder sowas, um das ganze in eine Surface laden zu können! Ich wäre dir für eine Hilfe sehr dankbar!
_________________
Es geht auch ohne Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 27.08.2002, 19:00    Titel: Antworten mit Zitat

ich hab alles gemacht, aber funz net wirklich ...
meine exe is größer aber er zeigt die bilder nicht an

wie muss ich die bilder zur Function übergeben ?

Code:

lpDDSurface = CreateSurfaceFromBitmap(LemmingL,1*35,1*30);


so gehts schonmal net
_________________
"Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."

"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."

"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael
JLI'ler



Anmeldedatum: 20.07.2002
Beiträge: 173
Wohnort: Münster / NRW
Medaillen: Keine

BeitragVerfasst am: 28.08.2002, 08:51    Titel: Antworten mit Zitat

Du musst (wahrscheinlich) die Datei resource.h (oder so) includen und dann mit den dort definierten Bezeichnern arbeiten, also IDB_BITMAP1 usw. Ich denke, du musst da so eine funktion wie LoadBitmap() verwenden. Einfach der Funktion das HINSTANCE des Progs und den Bezeichner des Bitmaps übergeben. Also, natürlich mit MAKEINTRESOURCE(IDB_BITMAP1). Dann solltest du ein Handle auf das Bitmap kriegen und kannst es laden! Ich hoffe das funzt, habe es selber noch nicht getestet!
_________________
Es geht auch ohne Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 28.08.2002, 12:17    Titel: Antworten mit Zitat

die resource.h isi ncludiert , in der stehn auch die IDB_BITMAP dinger und ich mach

Code:
lpDDSurface = CreateSurfaceFromBitmap(MAKEINTRESOURCE(IDB_BITMAP1),1*35,1*30);


aber es funz net :/
_________________
"Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."

"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."

"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael
JLI'ler



Anmeldedatum: 20.07.2002
Beiträge: 173
Wohnort: Münster / NRW
Medaillen: Keine

BeitragVerfasst am: 28.08.2002, 14:11    Titel: Antworten mit Zitat

So geht das auch nicht! Du musst in der CreateSurfaceFromFile() die Zeile HBITMAP hBitmap = LoadImage(...); *oder so ähnlich* durch folgende ersetzen:
Code:

HBITMAP hBitmap = LoadBitmap(GetModuleHandle(), MAKEINTRESOURCE(IDB_BITMAP1));

Bei GetModuleHandle() handelt es sich eine Funktion, die das HINSTANCE der aktuellen Anwendung (also dein Prog) zurückgeben sollte (ich habs nicht getestet). Wenn das nicht gehen sollte, einfach mal das HINSTANCE aus der WinMain übergeben!
_________________
Es geht auch ohne Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 28.08.2002, 14:59    Titel: Antworten mit Zitat

das hab ich doch , aber wie muss ich die function aufrufen?
_________________
"Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."

"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."

"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael
JLI'ler



Anmeldedatum: 20.07.2002
Beiträge: 173
Wohnort: Münster / NRW
Medaillen: Keine

BeitragVerfasst am: 29.08.2002, 08:41    Titel: Antworten mit Zitat

Du meinst, wie du deine CreateSurfaceFromBitmap() aufrufen sollst?
Sag das doch gleich Idea Exclamation Very Happy
Also ich würde das so machen: Ich würde in einer Headerdatei jeden dieser Konstanten IDB_BITMAP1 usw. einen String zuordnen, also zb.:
Code:

#define HINTERGRUNDBILD IDB_BITMAP1

oder so ähnlich, das kannst du im Programm dann besser handeln.
Jetzt musst du die CreateSurface... - Methode nur noch so verändern, dass sie als "Datei-NAmen" eben dieses HINTERGRUNDBILD oder wie du es genannt hast, aufnimmt, anstatt des Dateinamens halt. Welchen Datentyp du da brauchst, ich glaube es müsste ein int sein. Du solltest die Funktion dann also so aussehen lassen:
Code:

LPDIRECTDRAWSURFACE7 CreateSurfaceFromBitmap(int Bild, int Hoehe, int Breite);

Damit sollte es dann gehen!
_________________
Es geht auch ohne Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
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