| |
|
|
| 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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| Hi !
Wie breit ist denn die Maskenbitmap? Wirklich 800x500? Poste mal bitte, wie du die Bilder lädst oder die HDCs 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 werds vertraulich testen...
Gruß, Frank |
|
|
| |
|
|
|
| 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)
Wars das ?
Gruß, Frank |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|