[Monkey] imagesCollide

Übersicht Andere Programmiersprachen Beginners-Corner

Neue Antwort erstellen

 

BBPro2

Betreff: imagesCollide

BeitragFr, Aug 17, 2012 1:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

gibt es eine Funktion in Monkey die dem ImagesCollide aus BB gleichkommt ?
Sprich pixelgenaue abfrage einer Kollision

wenn ja:
- ist die Funktion genauso langams wie in BB ?
- ist sie so "fehleranfällig" wie in BB ? (kann mich erinnern dass sie auf manchen Grakas
zu Exceptions führte)
- in welchem Modul finde ich sie ? (das Standard Mojo-Modul scheint sowas ja nicht mitzuliefern)

Midimaster

BeitragSa, Aug 18, 2012 2:20
Antworten mit Zitat
Benutzer-Profile anzeigen
hierzu laufen aktuell einige interessante Threads auf dem engl. Monkey-Forum. Es scheint wohl darauf hinauszulaufen, dass man eine Monkey-Funktion zum Rendern von Grafik direkt auf Images bräuchte (denkbar wäre OpenGL). Oder man müßte für jedes Target die jeweilige Canvas bzw. Grafikengine lesend ansprechen.

Die Geschichte ist nicht so leicht zu lösen, wie unter BB.

[#EDIT#]

gerade hat Mark veröffentlicht, dass es zukünftig ein Render-To-Image geben wird. Damit lassen sich Pixel manipulieren und kombinieren. Dies dürfte die Grundlage für Kollsions-Algos sein!
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

BBPro2

BeitragDi, Aug 21, 2012 10:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, tatsächlich scheint es bisher nur mit weniger schönen Workarounds möglich zu sein
solche Kollisionen zu simulieren.

Ein Beispiel wäre zu jedem Grafikobjekt eine entsprechende Datei zu führen welche
aus lauter 0en und 1en besteht, die die gleichen Maße hat wie das Bild.
1 steht hierbei für "hier ist ein Pixel" und 0 für "hier ist kein Pixel".

Mit diesen Pixelmaps ließe sich dann arbeiten.

Ist aber wirklich keine hübsche Lösung.

Midimaster

BeitragDi, Aug 21, 2012 10:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Thema ist schon gegessen: Mark hat gestern die zwei neue Funktionen in der V63 veröffentlicht. Nun kommen auch schon die ersten Code-Beispiele für Collision() im engl. Forum rein.

Du kannst das mit den Originalbildern machen, ohne eine Mask-Datei anzulegen:
Du musst nur das überschneidende Rechteck beider Objekte feststellen. Dann gehst du darin alle nicht-transparenten Farbwerte des einen Bildes durch und schaust im anderen Bild nach, ob an dieser Stelle auch was ist. wirst du fündig, ist es eine Kollision.

Theoretisch ist es auch über eine XOR Verknüpfung der überschneidenden Rechtecke beider Bilder zu machen.

Da ja solche Rechteck-Auschnitte in der neuen Funktion in ein Array Pixels[] kopiert werden, sollten beide Methoden relativ schnell sein.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

BBPro2

BeitragDi, Aug 21, 2012 11:11
Antworten mit Zitat
Benutzer-Profile anzeigen
gut das ist quasi der gleiche ansatz den ich mit den layer-dateien verfolgt hätte.
aber sehr gut zu wissen dass das nun gar nicht mehr nötig ist Smile

sollte wohl mal öfter auf der offiziellen seite vorbeischneien wie mir scheint ^^

edit:

Zitat:

'create a new image...single frame only?
Function CreateImage:Image( width,height,flags )

'read from 'backbuffer'...
Function ReadPixels:Void( pixels:Int[],x:Int,y:Int,width:Int,height:Int,arrayOffset:Int=0,arrayPitch:Int=0 )

'write to image...must be a CreateImage image.
Method Image.WritePixels( pixels:Int[],x:Int,y:Int,width:Int,height:Int,arrayOffset:Int=0,arrayPitch:Int=0 )


wenn ich mir das so ansehe scheint es ja nur die möglichkeit zu geben vom backbuffer
pixel einzulesen. nicht jedoch von einem einzelnen bild.
wie also kann ich kollisionen testen ? :/

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group