ProSpeed.dll
Wenn sie Fragen und Anregungen zu meiner ProSpeed DLL oder zu den Profan²-Sourcecodes und Demos haben, dann sind sie hier richtig. Auch neue Vorschläge sind jederzeit willkommen. Und bitte mit richtigem Namen und Email-Adresse einschreiben. Danke.
  Suchen
 Zurück zur Übersicht
 AutorThema: SetBackAutoCollision
Rolf Koch
Datum:12.05.02 07:21 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Hallöchen
SetBackAutoCollision wäre ja eine feine Sache, wenn ich dahintersteigen würde.
Ich hab eine Maske erstellt, welche die begehbaren Flächen schwarz beinhaltet.
Nun habe ich mit
string bereich#,0="RES/L1NEG.BMP"
backgroundneg&=LoadExtImage(bereich#)

CopyExtBmp(%HDC,50,50,800,500,background&,0,0,0)
> background& hier sonst wird ja die Maske angezeigt <

diese doch im Speicher. (Das Original wird ja angezeigt)
wenn ich dann
SetBackAutoCollision (sprites&,backgroundneg&,1,0,0,GetBmpWidth(backgroundneg&),GetBmpHeight(backgroundneg&),0,0,0,0)
nehme, wird zwar wie gewünscht an Mauern u.s.w angehalten - aber nicht immer und korrekt - Figur läuft trotz WEIS aus dem Spielbereich raus.
Was könnte ich falsch machen?
Danke im Vorraus
Rolf


Frank Abbing
Datum:12.05.02 11:02 Antwortenals Email verschicken (frankabbing@12move.de) 


Hallo Rolf,

das kann ich dir so nicht beantworten, dazu müßte ich deinen Code testen.
Kann sein, das die weißen Flächen nicht breit benug sind ? Die müßen natürlich etwas breiter sein, als wie sich die Figur bewegt. Z.B. die Figur bewegt sich mit Geschwindigkeit 6, dann muß die weiße Abgrenzung mindestens 7 Pixel breit/hoch sein, ansonsten kann es bei der Kollisionsprüfung passieren, das das Sprite durch die Wand läuft...

Wenn du mir den Code + Grafiken schickst, werde ich es gerne testen.

Schönes Restwochenende,
Frank


Rolf Koch
Datum:12.05.02 13:42 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Ich versuchs mal weiter - Code evtl später.
Aber ich habe nun die Maske nach rechts und nach unten (also nur das schwarze - ist eine größere Fläche und das weise auch groß genug!)verschoben und siehe da: Nun klappt es fast einwandfrei. Komisch?
Bedeutet vorher hat sich die Maske genau mit dem Original gedeckt und nun verschiebt sich die Maske nach rechts unten und es klappt.
Rolf


Frank Abbing
Datum:12.05.02 15:10 Antwortenals Email verschicken  


Hi,

ich hoffe ja, das deine Maskenbitmap die gleiche Größe besitzt, wie dein Hintergrund, oder ? Ansonsten kann ich mir solche Verschiebungen nämlich nicht erklären.
Grade SetBackAutoCollision() habe ich mit großer Sorgfalt getestet... ;-))

Gruß, Frank


Rolf Koch
Datum:12.05.02 15:32 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Hi Frank - ich schwöre
Ja die Maske entspricht haargenau dem Original.
Die Maske habe ich ja aus dem Original erstellt. Also alles Schwarz was begehbar sein soll und alles weis, was nicht.
Habs mit bmp, gif und jpg getestet und nun sogar ein anderes Bild erstellt - genau dasselbe.
Es kommt mir vor, als wenn die Maske im Speicher irgendwie verschoben ist - denn wenn ich laufe, dann ist z.B. ein Baum an einer anderen Stelle.
Rolf


Rolf Koch
Datum:12.05.02 16:57 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Ok hab noch mehr rausgefunden:
Es klappt pixelgenau mit
CopyExtBmp(%HDC,0,0,%maxx,%maxy,background&,0,0,0)
- also wenn ich den ganzen Bildschirm kopiere
mit
CopyExtBmp(%HDC,0,800,500,background&,0,0,0)
- dort bekomme ich diesen Verschiebeffekt.
Aber so - genial - habe einen Baum per Weis genau gefüllt und die Figur hält wirklich an den Pixeln an - STARK damit haste wirklich viel viel Arbeit an Coden erspart.
Rolf


Frank Abbing
Datum:12.05.02 20:34 Antwortenals Email verschicken  


Hi !

Wie breit ist denn die Maskenbitmap? Wirklich 800x500?
Poste mal bitte, wie du die Bilder lädst oder die HDC's generierst.

Beim Kopieren ist am sichersten immer:

CopyExtBmp(%HDC,0,0,GetBmpWidth(background&),GetBmpHeight(background&),background&,0,0,0)
CopyExtBmp(%HDC2,0,0,GetBmpWidth(background&),GetBmpHeight(background&),background&,0,0,0)

Am besten schickst du mir mal dein Werk und ich werd's vertraulich testen...

Gruß, Frank


Frank Abbing
Datum:12.05.02 20:36 Antwortenals Email verschicken  


He, hab' gerade noch was entdeckt. Da fehlt ein Parameter !!!

CopyExtBmp(%HDC,0,800,500,background&,0,0,0)

-> muß aber heißen...

CopyExtBmp(%HDC,0,0,800,500,background&,0,0,0)

War's das ?

Gruß, Frank



Rolf Koch
Datum:12.05.02 22:00 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Nee Sorry, das war einfach nur ein Kopierfehler hier innerhalb dieses Forums (beim Posten) - habs einfach falsch geändert.
Aber wie gesagt mit %maxx und %Maxy klappts einwandfrei.
Rolf


Gerold Flaig
Datum:12.05.02 22:50 Antwortenals Email verschicken (geroldflaig@gmx.de) 


Hallo Frank und Rolf,

mit der SetBackAutoCollision() habe ich auch schon ein bisschen Probleme gehabt. Wenn die Maske und der Hintergrund getrennte Bitmaps sind und jeweils extra geladen werden klappt es. KOpiere ich die beiden (und die sprites ) in eine Bitmap und lade dann nur die bereiche klappt es nicht und die figur verläuft sich. Sobald die MAske eine eigene Bitmap ist (Kopie des Hintergrunds mit farbflecken) klappt es.

Gerold


Frank Abbing
Datum: 13.05.02 00:22 Antwortenals Email verschicken  


Hi,

selbstverständlich muß die Maskenbitmap eine einzelne Bitmap sein, werden noch andere Daten darin aufbewahrt, dann ändert sich natürlich auch die Größe und Länge der Bitmap, und SetBackAutoCollision() rechnet mit verkehrten Werten.
Außerdem wird für eine Maskenbitmap nur ein 2-Farben-Bild benötigt, alles andere ist Speicherverschwendung.

Darum ist es auf jedenfall vorteilhafter ein Stück Quellcode zu posten, dort ist ein Fehler immer besser zu finden als in einer Fehlerbeschreibung.

Ich weiß, manche Funktionen sind für Einsteiger nicht einfach zu handhaben, aber jeder wird sich denken können, das Funktionen wie SetBackAutoCollision() höchst komplex arbeiten und dabei trotzdem nur eine Funktion benötigen...

Nächtliche Grüße,
Frank


 Zurück zur Übersicht
 

 Ein kostenloses WebMart Forum
WebMart Homepage Tools kostenlos
Shortwin - denn Glück ist kein Zufall!