 |
JLI Spieleprogrammierung
|
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: 14.07.2005, 23:04 Titel: [DirectDraw] Bitmap-Position während laufendem Prog. ändern |
|
|
Guten Tag
Ich wurschtel hier gerade ein bisschen mit DDraw rum und da wollte ich gerade, wie ich es schon öfters mit Direct3D oder ähnlichem gemacht habe, ein Bild während dem laufenden Programm verschieben...
Ist ja eigentlich auch nix besonderes
Allerdings passiert gar nichts.
Normal habe ich das immer so gemacht:
Wenn ich den aufruf mache, bevor ich die Position mit SetRect() angebe, ändert er die Position um 5 z.B. in die x-Richtung, bewegen tut sich allerdings nichts. Danach oder an irgendwelchen anderen Stellen hilft alles nichts.
Was kann ich tun? |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 14.07.2005, 23:09 Titel: |
|
|
Du kannst uns Code posten, denn wir sind Nerds und ernähren uns vom Code!  _________________ "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 |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 37 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 15.07.2005, 08:49 Titel: |
|
|
Vielleicht setzt du sie vorher aus Versehen auf 0, so dass sie immer 5 ist und sich so nicht bewegt
@Fallen: Ja gute Idee, hab auch Hunger.  _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 15.07.2005, 10:20 Titel: |
|
|
Ok, dann guten Hunger:
CPP: | LPDIRECTDRAWSURFACE7 lpddsBitmap;
RECT rectbitmap;
int bild_x1 = 350;
int bild_y1 = 265;
int wert = 5;
...
...
// Bild verschieben und laden:
bild_x1 += 100;
lpddsBitmap = DDLoadBitmap(lpDirectDraw, "Test.bmp", 200, 150);
SetRect(&rectbitmap, bild_x1, bild_y1, bild_x1+200, bild_y1+150);
...
// Und zum Schluss blitten und flippen:
lpddsBack->Blt(&rectbitmap, lpddsBitmap, NULL, DDBLT_WAIT, NULL);
while(lpddsPrimary->Flip(NULL,DDFLIP_WAIT) != DD_OK);
|
Gruß JkerryZ |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 15.07.2005, 16:48 Titel: |
|
|
Da ich erst vor zwei Tagen angefangen habe mich mit DDraw zu beschäftigen, habe ich keine ahnung ob es sich bei CPP: | while(lpddsPrimary->Flip(NULL,DDFLIP_WAIT) != DD_OK); | um einen schlechten Scherz handelt
Um erstmal einen ungefähren Überblick über DDraw zu erhalten habe ich als erstes ein Tutorial durchgearbeitet und verstanden. (Siehe anderen Thread).
Am Ende hatte ich also eine ganze Datei voll mit Code^^
Einen Teil davon hatte ich ja schon weiter oben gepostet, da das allerdings wohl nicht gereicht hat, gibts hier alles von der Tutorial-Seite zum herunterladen:
http://www.codeworx.org/dl/c007.zip
Gruß JkerryZ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 15.07.2005, 18:06 Titel: |
|
|
JkerryZ
Wegen dem:
CPP: | while(lpddsPrimary->Flip(NULL,DDFLIP_WAIT) != DD_OK); |
Ich mein, nehmen wir mal an. Flip gibt ein DDERR_LOST zurück durch das ALT+TAB, jetzt wird die whileschleife sich in einer Endlosschleife fangen bis ein Pufferüberlauf passiert und adé PC lieber if.
Den Code zieh ich mir nachher mal rein. Ansonsten... Hatte ich Dir nicht mal Code gegeben oder war das wer anders? _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 39 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 15.07.2005, 18:12 Titel: |
|
|
ich denke da hast du an der falschen stelle im code angesetzt.
CPP: | void ddLastInits ()
{
ddbltfx.dwSize = sizeof(DDBLTFX);
ddbltfx.dwFillColor = RGB(0, 0, 0);
SetRect(&fill_area, 0, 0, 640, 480);
lpddsBitmap = DDLoadBitmap(lpDirectDraw, "Test.bmp", 200, 150);
AddColorKey(lpddsBitmap, 0, 0);
} |
Diese funktion wo du "bild_x1 += 100; " eingebaut hast wird ein einziges mal aufgerufen. Nämlich beim starten (bzw Initialisieren) des programms.
Daher wird auch "bild_x1 += 100; " nur einmal ausgeführt, eben beim initialisieren des programms.
Wenn du möchtest, dass sich das Bild bewegt musst du jeden frame "bild_x1 += 100; " ausführen, und das rect des bitmaps daraus erzeugen.
Also solltest du das in dieser Funktion tun:
CPP: | void ddDraw ()
{
lpddsBack->Blt(&fill_area, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx);
SetRect(&rectbitmap, 220, 165, 420, 315);
lpddsBack->Blt(&rectbitmap, lpddsBitmap, NULL, DDBLT_WAIT, NULL);
SetRect(&rectbitmap, 100, 100, 320, 250);
lpddsBack->Blt(&rectbitmap, lpddsBitmap, NULL, DDBLT_WAIT | DDBLT_KEYSRC, NULL);
while(lpddsPrimary->Flip(NULL, DDFLIP_WAIT) != DD_OK);
}
|
Diese Funktion kümmert sich ja um das zeichnen der bilder jeden frame. Also solltest du davor deine rechnung mit bild_x1 und bild_x2 einfügen. so wird jeden frame bild_x1 um 100 erhöht und das bild jeden Frame an der neuen stelle gezeichnet.
Ich hoffe ich habe deine Frage getroffen  |
|
Nach oben |
|
 |
JkerryZ JLI Master Trainee

Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 15.07.2005, 19:44 Titel: |
|
|
xardias hat Folgendes geschrieben: | Ich hoffe ich habe deine Frage getroffen  |
Jaa, juhu, genau das wars Funktioniert wunderbar... vielen Dank!
Patrick hat Folgendes geschrieben: | Ansonsten... Hatte ich Dir nicht mal Code gegeben oder war das wer anders? |
Ja, du hattest mir Code gegeben und zwar erst gestern
Ich habe mir nur erlaubt, das Tut trotzdem anzusehen... und da ist mir aufgefallen das da was nicht ging.  |
|
Nach oben |
|
 |
|
|
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
|