Abfrage der Pixelfarbe an einer bestimmten Position

Amixus

Grünschnabel
Hey hey
ich arbeite zur Zeit an einem kleinen Flash Spiel und gerate nun leider an meine beschränkten Actionscript Fähigkeiten.

Also folgendes Problem...
ich würde gerne an einer bestimmten Position in einem MovieClip oder wahlweise ein Bild in Form einer JPG, die Pixelfarbe abfrage. Dies soll mir als Kollisionsabfrage für meinen Spieler und die kleinen Monster dienen.

Habe bisschen herum gelesen und gemerkt das man das so ohne weiteres nicht machen kann, man muss irgendwie das Bild als BitmapData haben um getPixel(x:int, y:int) zu verwenden.

Nur irgendwie leuchtet es mir nicht ein, wie ich ein Bild sei es in Form einer JPG oder als MovieClip in eine BitmapData Variable geladen bekomme.

Es wäre echt klasse wenn mir da Jemand von euch helfen könnte.
 
Ich bin in Sachen Flash und AS auch sehr beschränkt, aber ich denke, Du solltest Dir die Kollisionsabfrage von Flash zunutze machen und "durchsichtige" Objekte davor setzen, die für die eigentliche Abfrage angesprochen werden. Über Umwandeln und getpixel geht soviel Zeit ins Land, dass Dir beim einmal Durchspielen Dein Ur-Enkel den Sarg öffnen wird, damit Du Dich endlich reinlegst :D

mfg chmee
 
Die durchsichtigen Objekte waren eine Option die ich schnell ausgeschlossen habe, da ich für rundliche Level sehr viele boxen erstellen müsste und die abfrage jeder dieser boxen meinen Quelltext zumüllt.

Die Idee hinter der Farbabfrage ist ja die, dass es die Arbeit an den Levels erleichtert ohne jedes mal im Quelltext herumfurwerken zu müssen.

Ist so was überhaupt möglich? Also geschwindigkeits-technisch meine ich.
 
Ich kann mir das nicht wirklich vorstellen - eine Kollisionsabfrage anhand der Farbe eines Pixels einer (ja doch statischen) JPG?
 
Du könntest Dir einen Level-Editor schreiben, mit dem Du die Objekte ausserhalb des eigentlichen Spiels auf die Grafik positionierst. Das Spiel lädt dann Beides, die Hintergrundgrafik und die Objektliste.

mfg chmee
 
Man müsste nur an 4 Punkten des Spielers/Enemy's abfragen ob sich unter einem oder mehreren Punkten die Farbe Schwarz befindet. Das Layer selbst brauch nicht sichtbar zu sein! Darüber könnte sich eine Map Textur befinden.

Klicke mich

Edit:
Das hört sich nicht dumm an mit dem Editor.
Ich könnte die Boarders in einer XML Datei vielleicht speichern und so aus meinem Quelltext auslagern. Das Laden der einzelnen Maps könnte dadurch ebenfalls recht einfach umgesetzt werden.
 
Zuletzt bearbeitet:
Moin,
Ich kann mir das nicht wirklich vorstellen - eine Kollisionsabfrage anhand der Farbe eines Pixels einer (ja doch statischen) JPG?

wheres the problem? :)

Mit bitmapdata + getpixel bist du schon auf dem richtigen weg. Ziehe die farbwerte aus der Bitmap und prüfe dann mit einer Funktion (siehe unten) um was es sich dabei für eine farbe handelt. Wenn es die gesuchte Farbe ist dann hast du ja x,y koordianten und kannst deine Kollisionsabfrage darum machen

PHP:
function checkColor(_value):void {
	var r:uint = _value >> 16;
	var g:uint = _value >> 8 & 255;
	var b:uint = _value & 255;

	if (r > 250) {
		trace("ROT");
	}
	if (g > 250) {
		trace("GRÜN");
	}
	if (b > 250) {
		trace("BLAU");
	}
}
checkColor(0x00FF00); //GRÜN
checkColor(0x0000FF); //BLAU
checkColor(0xFF0000); //ROT
 
Nur wie bekomme ich das Bild in die BitmapData Variable geladen ;)
Die Abfrage selbst ist ja schnell geschrieben.

PHP:
var Farbe:int; //Global
var move:int; //Global
var animation:int; //Global

for(var i:int = -8; i==8; i+8)
{
       Farbe=boarders.getPixel(Player.x+i,Player.y+i);
       if(Farbe==Wert) //Wert ist ein Platzhalter für einen Farbwert
      {
             move=0;
             animation=1;
      }
}

Edit:
Einen MovieClip kann ich nicht einfach so in eine Bitmap kopieren.
Ansonsten würde ich das ja in der art hier machen ^^
PHP:
var MC_Boarders:MovieClip;
var boarders:BitmapData = MC_Boarders;
 
Zuletzt bearbeitet:
Nur wie bekomme ich das Bild in die BitmapData Variable geladen ;]

Naja, das ist eigentlich nur eine Zeile Code. ;)

PHP:
var bmd:BitmapData = new MyPic(0,0); //MyPic liegt in der library

var val:Number = bmd.getPixel(100, 100)
checkColor(val);
var bm:Bitmap = new Bitmap(bmd)
addChild(bm)

function checkColor(_value):void {
	var r:uint = _value >> 16;
	var g:uint = _value >> 8 & 255;
	var b:uint = _value & 255;

	if (r > 250) {
		trace("ROT");
	}
	if (g > 250) {
		trace("GRÜN");
	}
	if (b > 250) {
		trace("BLAU");
	}
}
 
Der will nicht so recht...
1120: Access of undefined property boarder_map.
PHP:
var Border:BitmapData = new boarder_map(300,600); //boarder_map liegt in der Libary
 

Neue Beiträge

Zurück