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 

[DirectDraw] Bitmap-Position während laufendem Prog. ändern

 
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: 14.07.2005, 23:04    Titel: [DirectDraw] Bitmap-Position während laufendem Prog. ändern Antworten mit Zitat

Guten Tag Wink

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 Wink
Allerdings passiert gar nichts.
Normal habe ich das immer so gemacht:
CPP:
pos_x += 5;


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
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: 14.07.2005, 23:09    Titel: Antworten mit Zitat

Du kannst uns Code posten, denn wir sind Nerds und ernähren uns vom Code! Very Happy
_________________
"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
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 37
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 15.07.2005, 08:49    Titel: Antworten mit Zitat

Vielleicht setzt du sie vorher aus Versehen auf 0, so dass sie immer 5 ist und sich so nicht bewegt Wink

@Fallen: Ja gute Idee, hab auch Hunger. Wink
_________________
"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
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: 15.07.2005, 10:20    Titel: Antworten mit Zitat

Ok, dann guten Hunger: Wink
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


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

BeitragVerfasst am: 15.07.2005, 10:24    Titel: Antworten mit Zitat

hm, wie sieht den die game loop aus?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 15.07.2005, 10:53    Titel: Antworten mit Zitat

CPP:
while(lpddsPrimary->Flip(NULL,DDFLIP_WAIT) != DD_OK);

Das ist doch wohl ein sehr schlechter scherz oder?
_________________
'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
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: 15.07.2005, 16:48    Titel: Antworten mit Zitat

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 Wink

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



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 15.07.2005, 18:06    Titel: Antworten mit Zitat

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


Alter: 39
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

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

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 Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
JkerryZ
JLI Master Trainee



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

BeitragVerfasst am: 15.07.2005, 19:44    Titel: Antworten mit Zitat

xardias hat Folgendes geschrieben:
Ich hoffe ich habe deine Frage getroffen Smile

Jaa, juhu, genau das wars Very Happy 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 Wink
Ich habe mir nur erlaubt, das Tut trotzdem anzusehen... und da ist mir aufgefallen das da was nicht ging. Rolling Eyes
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
Seite 1 von 1

 
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