Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-08-2009, 19:07   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2006
Beiträge: 24
Kollision bei rotierenden Objekten?

Hi Leute,

ich habe ein kleines Problem. Ich versuche, es so kurz wie möglich zu erklären:

- es gibt viele MovieClips (alle gleich, Duplikate), die sich auf der Bühne zufällig bewegen
- jeder MovieClip rotiert um seinen Nullpunkt
- sobald sich die MovieClips überlagern (per hitTest), sollen sie sich in die entgegengesetzten Richtungen abstoßen

Zeichnung:


Problem:
Das Abstoßen funktioniert nicht wirklich, so dass sich die MovieClips trotzdem sehr oft überlagern.

ActionScript:
PHP-Code:
rotierenderClip.xSpeed 30;
rotierenderClip.ySpeed 20;
rotierenderClip.collsion 0;

rotierenderClip.onEnterFrame = function() {
    
this._x += this.xSpeed;
    
this._y += this.ySpeed;
    
this._rotation += 1;

    if (!
this.collsion) {
        if (
_root.andererClip.hitTest(this.hitbox)) {
            
this.xSpeed = -this.xSpeed;
            
this.ySpeed = -this.ySpeed;
            
this.collsion 1;
            
setTimeout(clearCollision2000this);
        }
    }
}
    
function 
clearCollision(clip) {
    
clip.collsion 0;

Wie man sieht, führe ich im hitTest einen Timeout durch. Das kommt daher, da die rotierenden MovieClips sonst bei jedem onEnterFrame-Event ihre Richtung umkehren würden — die Clips bewegen sich ganz schnell hin und her und kommen nicht mehr vom Fleck. Der Timeout setzt die Kollisionsvariable zurück, so dass zumindest kein Stottern entsteht.

Dennoch überlagern sich die MovieClips fast immer. Wo liegt mein Fehler?

Ich hoffe, ihr könnt mir helfen!


Vielen Dank im Voraus
phareon
phareon ist offline   Mit Zitat antworten
Alt 12-08-2009, 11:44   #2 (permalink)
Neuer User
 
Benutzerbild von Lise
 
Registriert seit: Feb 2003
Ort: Hannover
Beiträge: 24
Mit hitTest fragt man die Kollision von Rechtecken ab, deren Kanten parallel zum Rand liegen. Wenn du deine Movieclips drehts, wird trotzdem das (meist größere) umgebende Rechteck abgefragt.
Statt dessen musst du die Kollision von Bitmaps abfragen.
__________________
Genieße den Tag.
Lise ist offline   Mit Zitat antworten
Alt 12-08-2009, 13:50   #3 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
such mal nach:
Physikengine

ansonsten:
wenn deine quadrate alle gleich gross sind (aber nur dann!) langt es, wenn du prüfst, ob eine ecke ein rechteck berührt. was natürlich noch nicht besagt, in welche richtung sich die objekte dann abstossen müssen.
beachte dabei auch, das hitTest mehrere möglichkeiten bietet.
hitTest(x,y,true);
und beachte, das hitTest globale koordinaten erwartet.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 12-08-2009, 19:03   #4 (permalink)
Neuer User
 
Registriert seit: Nov 2006
Beiträge: 24
Danke schon mal für die Antworten!

Zitat:
Mit hitTest fragt man die Kollision von Rechtecken ab, deren Kanten parallel zum Rand liegen. Wenn du deine Movieclips drehts, wird trotzdem das (meist größere) umgebende Rechteck abgefragt.
Statt dessen musst du die Kollision von Bitmaps abfragen.
Zitat:
hitTest(x,y,true);
und beachte, das hitTest globale koordinaten erwartet.
Das ist mir bewusst. Ich habe das ShapeFlag schon oft benutzt und auch Perimeter-Clips innerhalb eines Clips für mehrere Kollisionspunkte genutzt. Das ist auch nicht das Problem. Das grobe Rechteck, dass durch die Rotation entsteht, kann ruhig bleiben — das lässt sich später noch anpassen.
Es geht eher um die Formel für das gegenseitige Abstoßen. Ich weiß nicht, warum sich die MovieClips dennoch überlagern, obwohl im hitText() definitive Anweisungen vorliegen. Das darf eigentlich nicht passieren.

Eine komplette Physikengine will ich jetzt auch nicht unbedingt einbetten. Es ist aber wohl komplexer als ich dachte. Ohne Rotation ist es kein Problem, aber durch die Drehung müsste ich bei einem hitTest-Ereignis den Winkel ermitteln, in den sich die Objekte abstoßen. Da wird es dann schon sehr heikel :/
phareon ist offline   Mit Zitat antworten
Alt 13-08-2009, 17:50   #5 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
http://de.wikipedia.org/wiki/Kollisi...sche_Geometrie)

und z.b.
http://www.lennerz.de/diplom_info.pdf

aber so 'mal ganz schnell' nee, das wohl leider nicht ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele