| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Jan 2004
Beiträge: 13
| wo ist der denkfehler? (hitTest)
Hallo, programmiere gerade ein kleines Spielchen. Ein Raumschiff fliegt durch die Gegend und feuert Laser ab, die durch attachMovie erzeugt werden und mit der Variable LCounter hochgezählt werden. _root.attachMovie("laser", "Laser"+this.LCounter, Ebene); Das gleiche mache ich mit den Jägern (die das Raumschiff jagen) _root.attachMovie("jäger", "Jäger"+this.jCounter, Ebene); Jetzt ist das Programm noch ziemlich am Anfang und letztendlich will ich nur, das ein Kollisionstest zwischen den abgefeuerten Lasern und allen vorhandenen Jägern durchgeführt wird. Dafür habe ich eine Klasse Kollisionsmanager gemacht, die on enterFrame ständig folgendes macht: for (z=1; z<ObjektErzeuger.jCounter; z++) { for (l=1; l<mc_raumschiff.LCounter; l++) { if (["Jäger"+z].hitTest(["Laser"+l])) { trace("treffer"); } } } Das ist jetzt noch sehr einfach. Und soll nachher auch verfeinert werden. Mir geht es jetzt erstmal darum, das die Kollision überhaupt erkannt wird. Das wird sie aber nicht. Ich habe auch schon jeweils ein _root["Jäger"+z] bzw. auch _root["Laser"+l] davorgesetzt. Aber ich glaube ich mache einen generellen Denkfehler. Kann man Instanzen von Objekten überhaupt auf die Art und Weise miteinander abfragen? Danke für eure Antworten |
| | |
| | #2 (permalink) |
| mentally ill Registriert seit: Aug 2004
Beiträge: 172
| PHP-Code:
__________________ there is no place like 127.0.0.1 -------------------------------------------------- [STUFF] E-Mail Liste für Newsletter o.ä. [STUFF] MySQLConnector Klasse |
| | |
| | #4 (permalink) |
| mentally ill Registriert seit: Aug 2004
Beiträge: 172
|
laut der flashhilfe ist die syntax für hittest PHP-Code: PHP-Code:
__________________ there is no place like 127.0.0.1 -------------------------------------------------- [STUFF] E-Mail Liste für Newsletter o.ä. [STUFF] MySQLConnector Klasse |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Feb 2003 Ort: Hannover
Beiträge: 24
|
Ich benutze in einem solchen Fall immer eval. Code: var mc1:MovieClip;
var mc2:MovieClip;
for (......){
mc1=eval("jaeger"+counter);
for(....)}
mc2=eval("opfer"+counter);
if (mc1.hitTest(mc2)){}}} Wenn du die Kollisionsabfrage in eine eigene Funktion legst, die du mit setInterval aufrufst, hast du die Zeit besser im Griff.
__________________ Genieße den Tag. |
| | |
| | #6 (permalink) |
| Neuer User Registriert seit: Jan 2004
Beiträge: 13
|
auch dir danke lise, habe das so gemacht. funktioniert leider trotzdem nicht. hab mir mal die variablen tracen lassen. das prob liegt glaub darin, das die immer alle auf _level0 liegen. das tun sie ja aber gar nicht. die liegen auf aufsteigenden leveln. ist das das prob? gibt es trotzdem eine möglichkeit ein kollisionsabfrage zu machen ohne mich um die level zu scheren? |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Feb 2003 Ort: Hannover
Beiträge: 24
|
Ich schick dir mal ein fla und eine Klasse. Du kannst die Quadrate anfassen. Wenn sie sich berühren erkennen sie es. Gruss Die fla: Code:
//hitTest für viele Objekte
//viele mit vielen
//Achtung: Aktualisierung des Anzeigetextes ist evtl. problematisch wegen der
//ständigen Abfragen
var meinBroadcaster:Object = new Object();
AsBroadcaster.initialize(meinBroadcaster);
var mc:MovieClip;
var z:Number = 5;
var QuadratArray:Array = new Array();
for (var i = 0; i<z; i++) {
var quadrat = new Quadrat(i, 60);
QuadratArray.push(quadrat);
quadrat.positionieren(100, 20+i*80);
meinBroadcaster.addListener(quadrat);
}
setInterval(allePruefen, 100);
function allePruefen() {
//Kollisionsobjekt wird als Parameter an die Methode übergeben
for (var i = 0; i<z; i++) {
mc = QuadratArray[i].leinwand;
meinBroadcaster.broadcastMessage("kollisionPruefen", mc);
}
} Code:
class Quadrat extends MovieClip {
private var startX:Number = 0;
private var startY:Number = 0;
private var breite:Number = 200;
private var tiefe:Number = 1;
private var hoehe:Number = 200;
private var leinwand:MovieClip;
private var rotationId:Number = 0;
private var bewegungId:Number = 0;
function Quadrat(tiefe:Number, breite:Number) {
this.tiefe = tiefe;
this.breite = breite;
this.leinwand = _root.createEmptyMovieClip("quadrat"+tiefe, tiefe);
this.leinwand.onPress = ziehen;
this.leinwand.onRelease = loslassen;
this.zeichnen();
}
public function zeichnen():Void {
//trace("ich zeichne");
var breite:Number = this.breite;
//bezugspunkt zum drehen in die mitte setzen
var x:Number = this.startX-(breite/2);
var y:Number = this.startY-(breite/2);
with (this.leinwand) {
lineStyle(5, 0x00cc33, 50);
beginFill(0x00cc33, 30);
moveTo(x, y);
lineTo(x+breite, y);
lineTo(x+breite, y+breite);
lineTo(x, y+breite);
lineTo(x, y);
endFill();
}
}
public function positionieren(x:Number, y:Number):Void {
with (this.leinwand) {
_x = x;
_y = y;
updateAfterEvent();
}
}
//
public function ziehen(Void):Void {
//trace("gedrückt");
this.startDrag();
}
public function loslassen(Void):Void {
//trace("loslassen");
stopDrag();
}
public function kollisionPruefen(mc:MovieClip):Void {
//trace("hier ist kollisionPruefen"+mc);
//jedes Objekt trifft sich selbst
//deshalb abfragen
if(mc!=this.leinwand)
{
if (mc.hitTest(this.leinwand)) {
_root.TF_info.text = "Nr "+this.tiefe+" trifft "+mc;
}
}
}
}
__________________ Genieße den Tag. |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |