[Monkey] imagesCollide
Übersicht Andere Programmiersprachen Beginners-Corner
BBPro2Betreff: imagesCollide |
Fr, Aug 17, 2012 1:49 Antworten mit Zitat |
|
---|---|---|
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 |
Sa, Aug 18, 2012 2:20 Antworten mit Zitat |
|
---|---|---|
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 |
Di, Aug 21, 2012 10:38 Antworten mit Zitat |
|
---|---|---|
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 |
Di, Aug 21, 2012 10:58 Antworten mit Zitat |
|
---|---|---|
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 |
Di, Aug 21, 2012 11:11 Antworten mit Zitat |
|
---|---|---|
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 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 ? :/ |
||
Übersicht Andere Programmiersprachen Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group