Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249579 (11015)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Bewegliche Objekte
Jürgen Richter
| Datum:05.07.01 19:16 (jrs-brain@gmx.de) |
Ich haben mit Profan 5.0 einige Erfolge gehabt. Z. B. habe ich das Spiel "Jeopardy" geschrieben. (falls Interesse besteht versende ich das Spiel) Jetzt hatte ich vor so etwas wie Moorhuhn zu schreiben. Da dies mir mit Profan nicht gelang bin ich "untreu" geworden und habe mich an C++ versucht. (Sogar mit Lehrgang an eine VHS). Nun kehre ich als reuiger Sünder zurück und frage, ob man mit Profan bewegliche Objekte per Maus bewegen kann, ohne dass es flimmert. Die Idee aus C++ sehe folgendermaßen aus: Declare Ende%, Taste%, x%, y% let x% = 100 let y% = 100 cls mloadbmp "???.bmp" 'irgend eine Bitmap 640x480 mcopybmp 0,0-640,480 < 0,0,;0 whilenot (scankey,27) mcopybmp 0,0 - 640,480 if @equ(%mousepressed,1) let x% = %MouseX let y% = %MouseY endif Ellipse @sub(x%,20),@sub(y%,20)\ - @add(x%,20)m@add(y%,20) endwhile Wer sich auch immer meldet, vielen Dank!
Rolf Koch
| Datum:05.07.01 19:30 (webmaster@rokosoft.de) |
Hi auch hier der Hinweis auf mein Spieldemo (also nur der Anfang als Democode) http://home.t-online.de/home/rokosoft/Sas.zip Vielleicht ist das was Du suchst. Rolf
Frank Abbing
| Datum:05.07.01 22:13 (frankabbing@12move.de) |
Hallo, nochmals mein Hinweis: Flackerfreie Animationen sind ohne Doublebuffering nicht vernünftig machbar! Stelle deine Grafiken auf einer unsichtbaren Bitmap komplett zusammen und kopiere dann erst in einem Rutsch auf den Hauptschirm, sonst wirds nichts... Gute Nachrichten für alle Profanbesitzer ab Version 5.0. Demnächst wird meine ProSpeedDLL bis zu 16 zusätzliche Speicherbitmaps zur Verfügung stellen, die generiert werden können oder von Festplatte geladen werden. Transparentes Kopieren von Bitmaps oder Teilen daraus wird ebenfalls möglich sein, somit können ganz simpel animierte transparente Sprites programmiert werden. Und das alles ab Profan 5.0 (4.5 kann ja leider keine 32 Bit Dll's laden, oder?). Bis dahin, Frank Homepage
Rolf Koch
| Datum:05.07.01 22:21 (webmaster@rokosoft.de) |
Das hört sich wirklich saustark an Frank (mit den Bitmaps). Wird wohl ne umfangreiche Dll werden oder? Rolf
Frank Abbing
| Datum:06.07.01 00:06 (frankabbing@12move.de) |
Hallo, 7168 Bytes bisher bei 23 Funktionen. Und die Bitmap-Funktionen sind schon ziemlich fertig. Dank Assembler eine echte Knirps-Dll... Speicherbitmaps sind in Profan noch Mangelware, finde ich, besonders für Spieleprogrammierer, und an die wendet sich die Dll ja hauptsächlich. Und ein ansprechendes Beispielprogramm muß ja auch noch gemacht werden, puuuhhh... Bis dahin, Frank
Rolf Koch
| Datum:06.07.01 00:28 (webmaster@rokosoft.de) |
Ja dann, viel Glück da bin ich sogar gespannt drauf, was da mit Bitmpas u.s.w zu machen ist. Und: Ich freue mich drauf - weiter so Frank!
Frank Abbing
| Datum:06.07.01 00:40 (frankabbing@12move.de) |
Danke. Neue Funktionen, die hinzukommen sind: StartWatch () Startet eine Stoppuhr, deren Stand mit ReadWatch() gelesen werden kann. Diese Uhr ist besonders ideal für Messungen während der Programmierung einer Anwendung (wie schnell arbeitet diese Routine ?) Die Stoppuhr braucht am Programmende nicht wieder freigegeben werden ! Ergebnisse: Long - 0 - ReadWatch () Ermittelt die Anzahl der Millisekunden, die seit dem letzten Aufruf von StartWatch() vergangen sind. Die Stoppuhr braucht am Programmende nicht wieder freigegeben werden ! Ergebnisse: Long - Anzahl der Millisekunden, die seit dem letzten Aufruf von StartWatch() vergangen sind. Beispiel: StartWatch() ... ... ' hier steht Profancode ... msek&=Read Watch() print msek&+" Millisekunden sind jetzt vergangen." - LoadExtBmp (S,H) Lädt ein Bild in den Arbeitsspeicher zur späteren Benutzung. Ist S = 0, dann wird eine leere Bitmap erzeugt. S : String mit Namen einer .BMP Grafikdatei oder 0 H : Long - Profan Variable %HDC Ergebnisse: Long - Handle eines Memory Device Context (im Speicher gehaltene Grafikdaten-Struktur, HDC). Bei Fehler 0. Beispiele: 1) string bereich#,0="Picture1.bmp" ExternHDC&=LoadExtBmp(bereich#,%HDC) ;Lädt das Bild "Picture1.bmp" in den Speicher 2) ExternHDC&=LoadExtBmp(0,%HDC) ;Erzeugt eine leere Bitmap im Speicher Die geladene Grafik oder Bitmap wird so lange im Speicher gehalten, bis sie durch FreeExtBmp() wieder entladen wird. Das sollte spätestens am Programmende erfolgen, um die Resourcen wieder frei zu geben. Momentan können bis zu 16 externe Bitmaps gleichzeitig im Speicher gehalten werden, wem das noch zu wenig ist, der melde sich bitte bei mir. Diese Funktion sollte erst dann aufgerufen werden, wenn Profan schon ein Fenster geöffnet hat. - FreeExtBmp (H) Entlädt ein Bild aus den Arbeitsspeicher und gibt die Resourcen wieder frei. H : Long - Rückgabewert einer mit LoadExtBmp() erzeugten Grafikdaten-Struktur (HDC) Ergebnisse: Long - Eins oder grösser, bei Fehler 0. Beispiel: FreeExtBmp(ExternHDC&) Spätestens am Programmende sollte diese Funktion für jede externe Grafikdaten-Struktur erfolgen, um die Resourcen wieder frei zu geben. - CopyExtBmp (Z,X1,Y1,B,H,Q,X2,X3,K) Kopiert Teile eines Bildes oder das ganze Bild auf den Bildschirm oder in ein anderes Bild. Z : Long - Handle der Zielbitmap, z.B. das Profan Hauptfenster X1: Long - linke Koordinate der Zielbitmap Y1: Long - obere Koordinate der Zielbitmap B : Long - Breite des Rechtecks, das kopiert werden soll H : Long - Höhe des Rechtecks, das kopiert werden soll Q : Long - Handel der Quellbitmap X2: Long - linke Koordinate der Quellbitmap Y2: Long - obere Koordinate der Quellbitmap K : Long - Kopiermodus Ergebnisse: Long - TRUE, bei Fehler FALSE. Der Bildschirmausschnitt der Quellbitmap beginnend bei X1,Y1 der eine Breite von B Pixel und eine Höhe von H Pixel hat, wird an die Position X2,Y2 in die Zielbitmap kopiert. Der letzte Parameter bestimmt den Kopiermodus. Als Handel für die Quell- und Zielbitmap kann das Profanfenster (%HDC) angegeben werden oder ein von LoadExtBmp() erhaltener Wert. Es kann auch der HDC der Profan-internen Speicherbitmap angegeben werden, so wird er ermittelt: Startpaint -1 SpeicherHDC&=%HDC EndPaint Werte für den Kopiermodus sind: -1 = Transparent (transparente Farbe = Pixel oben rechts des Quellrechtecks) 0 = Normal kopieren 1 = Quelle und Ziel mit AND verknüpfen 2 = Quelle und Ziel mit OR verknüpfen 3 = Quelle und Ziel mit XOR verknüpfen 4 = Ziel invertieren (Quelle wird nicht berücksichtigt) 5 - 12 = weitere Verknüpfungstechniken 13 = Schwarz (default) löschen 14 = Weiß (default) löschen Wird als Kopiermodus die -1 gewählt, dann wird die Farbe des oberen rechten Pixels des zu kopierenden Rechtecks der Quellbitmap als transparente Farbe gewählt, im Gegensatz zum originalen Profan-Transparentmodus wo das transparente Pixel unten links gewählt wird. Rechts oben hat aber den Vorteil, das das eigentliche Rechteck (Sprite) nicht noch um ein zusätzliches Pixel nach links hin erweitert werden muß, was die Positionierung von Sprites unnötig erschwert. Lediglich nach rechts hin wird das Sprite um einen (unbenutzten) Pixel breiter. Beispiel: string bereich#,0="Pic1.bmp" ExHDC&=LoadExtBmp(bereich#,%HDC) ;Bild in externe Bitmap laden Breite% = %WinRight-%WinLeft Hoehe% = %WinBottom-%WinTop CopyExtBmp(%hdc,0,0,Breite%,Hoehe%,ExHDC&,0,0,0) ;Das externe Bild in den kompletten Hauptschirm ;kopieren. FreeExtBmp(a1&) ;Externes Bild freigeben
Gerold Flaig
| Datum:06.07.01 08:30 (GeroldFlaig@gmx.de) |
Hallo Frank, ich finde deine dll auch ganz klasse. Ich hätte da noch einen Vorschlag. ich kenne aus einem früheren Basic folgende Befehle: DefSprite und MoveSprite. Könnte man in die SpeedDll noch den MoveSprite mit aufnehmen? Also z.B. MoveSprite BmpAusschnitt,Zielparameter.. Gruss Gerold
Frank Abbing
| Datum: 06.07.01 11:43 (frankabbing@12move.de) |
Hallo, die Idee spukt auch schon in meinem Kopf herum, Sprites in einem eigenen Threat unabhängig vom Profanprogramm zu verschieben, und auch deren Kollision abfragen... Aber eins nach dem anderen! Bis dahin, Frank

| Zurück zur Übersicht