Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 20-10-2004, 10:46   #1 (permalink)
*hello new world
 
Benutzerbild von nalin
 
Registriert seit: Jan 2004
Ort: sauerland
Beiträge: 1.788
gegenstand nach kollision verschieben

hallo zusammen,
würde gerne einen gegenstand (rechteck) nach einer kollision mit einem auto
um ein paar pixel "verschieben".
dieser gegenstand kann von allen seiten aus getroffen werden-darin liegt auch mein problem.

wie muss ich den hittest anlegen das der gegenstand wenn er z.b von "oben" getroffen wird nach "unten" und
wenn er von "links" getroffen nach "rechts" verschoben wird usw.

wie gehe ich das am besten an?

hab in der suche zum thema hittest, kollision und collision detection etc.
nichts passendes gefunden.

hoffe ihr könnt mir weiterhelfen!

gruß
nalin

Geändert von nalin (20-10-2004 um 11:10 Uhr)
nalin ist offline   Mit Zitat antworten
Alt 20-10-2004, 11:19   #2 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
Hi,

das wird eine rel. komplizierte Geschichte. Mit den Standard-hittest wirds nich gehen.
Du musst alle Ecken deiner Objekte abfragen, welche sich überlappen.

mfG
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 20-10-2004, 16:13   #3 (permalink)
*hello new world
 
Benutzerbild von nalin
 
Registriert seit: Jan 2004
Ort: sauerland
Beiträge: 1.788
weiterhin auf ansatz suche!

hat jemand das problem auch schon mal gehabt und kann mir einen ansatz zeigen oder einen tipp geben wo nach ich suchen könnte!

würde mich sehr freuen!

gruß
nalin
nalin ist offline   Mit Zitat antworten
Alt 21-10-2004, 09:15   #4 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
Hi,

noch ne andre Idee, ist vielleicht einfacher:
Stell doch einfach die Bewegungsrichtung fest.
Dazu schreibst Du mc._x vor jeder Änderung in die Variable last_x.
Wenn Hittest true wird, vergleichst Du last_x mit mc._x und weist dann ob sich mc zuletzt nach rechts oder nach links bewegt hat.
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 22-10-2004, 01:39   #5 (permalink)
*hello new world
 
Benutzerbild von nalin
 
Registriert seit: Jan 2004
Ort: sauerland
Beiträge: 1.788
verbesserungsvorschläge zur übergangsvariante

@billi I: versteh nicht ganz wie du das meinst!


dies ist meine übergangsvariante:
PHP-Code:
onClipEvent (enterFrame) {
    if (
_root.mc_spieler1.hinten.hitTest(_root.track.ecar)) {
        
_x -= 8;
    }
if (
_root.mc_spieler1.vorne.hitTest(_root.track.ecar)) {
        
_x += 8;
}
if (
_root.mc_spieler1.oben.hitTest(_root.track.ecar)) {
        
_y += 8;
}
if (
_root.mc_spieler1.unten.hitTest(_root.track.ecar)) {
        
_y -= 8;

}} 
wäre super wenn jemand eine bessere variante auf lager hätte.

gruß
nalin
nalin ist offline   Mit Zitat antworten
Alt 22-10-2004, 12:38   #6 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
Also, damit Du's verstehst, habe ich mal meinen Vorschlag 2 ansatzweise umgesetzt.
Ich gehe davon aus, das mc_spieler1 an der Maus hängt oder mit Tasten gesteuert wird.
Andernfalls ist die Bewegungsrichtung sowieso bekannt.
Sicher noch Verbesserungswürdig. Aber damit Du siehst was ich meine.
Angehängte Dateien
Dateityp: zip Stoss.zip (4,8 KB, 19x aufgerufen)
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 22-10-2004, 12:43   #7 (permalink)
*hello new world
 
Benutzerbild von nalin
 
Registriert seit: Jan 2004
Ort: sauerland
Beiträge: 1.788
unerwartetes dateiformat!
kannst du mir das bitte als flash mx version abspeichern.

gruß
nalin
nalin ist offline   Mit Zitat antworten
Alt 22-10-2004, 17:55   #8 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
jo
Angehängte Dateien
Dateityp: zip Stoss.zip (4,1 KB, 28x aufgerufen)
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 22-10-2004, 18:27   #9 (permalink)
*hello new world
 
Benutzerbild von nalin
 
Registriert seit: Jan 2004
Ort: sauerland
Beiträge: 1.788
hab gerade noch die maus- durch tastatursteuerung umgeschrieben und es funktioniert super!

eine kurze frage noch:

warum ist der registrier punkt bei den kästchen oben links und der kreis (formmarke?!heißt das so?) mittig in dem kästchen? welchen zweck erfüllt das?

gruß
nalin
nalin ist offline   Mit Zitat antworten
Alt 22-10-2004, 20:48   #10 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
Wenn Du die Position abfragst kriegst Du die Koordinate der linken, oberen Ecke.
Der Kreis ist so eine Art Schwerpunkt. Beim Drehen ist es der Drehpunkt.
Du kannst beide auch verschieben.
Mehr fällt mir dazu nicht ein.

mfG
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 22-10-2004, 20:55   #11 (permalink)
*hello new world
 
Benutzerbild von nalin
 
Registriert seit: Jan 2004
Ort: sauerland
Beiträge: 1.788
ok!
dank dir für deine hilfe!

schönes wochenende,
nalin
nalin ist offline   Mit Zitat antworten
Alt 22-10-2004, 22:01   #12 (permalink)
Neuer User
 
Benutzerbild von andilab
 
Registriert seit: Jun 2001
Ort: münster
Beiträge: 162
beispiele

hallo

damit du weißt, wohin ein Auto z.B. abprallen soll, musst du wissen von wo das Auto angeschubst worden ist.
Schau dir mal die Datei
C:/Programme/Macromedia/Flash%20MX/Samples/html/360_degrees.htm
bzw. die FLA dazu
C:\Programme\Macromedia\Flash MX\Samples\FLA\360_degrees.fla
an, das ist ein Bespiel, wie man anhand der x/y werte von zwei Objekten deren Entfernung zueinander und in welchem Winkel die zueinander stehen berechnen kann...
Wenn man dann weiß aus welchem Winkel der Gegner oder was kommt, dann kann man den Spieler entsprechend in die andere Richtung verschieben
z.b. so:
PHP-Code:
spieler.bewegeInRichtung(angle,speed) {
 
this._y += Math.sin(angle*(Math.PI/180))*speed;
 
this._x += Math.cos(angle*(Math.PI/180))*speed;

So richtig kenn ich mich beim Spielebauen auch nicht aus, das nur als Ansatz..

tschös,
andi
andilab ist offline   Mit Zitat antworten
Alt 22-10-2004, 22:15   #13 (permalink)
*hello new world
 
Benutzerbild von nalin
 
Registriert seit: Jan 2004
Ort: sauerland
Beiträge: 1.788
danke für den tipp!
mit billi i's hilfe hab ich das bis jetzt so gelöst-funktioniert auch recht gut:

im ersten frame:
PHP-Code:
last_x mc_auto._x;
last_y mc_auto._y
auf das objekt was verschoben werden soll kommt das:
PHP-Code:
onClipEvent (enterFrame) {
    if (
_root.mc_auto.hitTest(_root.track)) {
        if (
_root.last_x>_root.mc_auto._x) {
            
_x -= 8;
        } else {
            
_x += 8;
        }
    if (
_root.mc_auto.hitTest(_root.track)) {
        if (
_root.last_y>_root.mc_auto._y) {
            
_y -= 8;
        } else {
            
_y += 8;
        
    }
}

    }
    

gruß
nalin
...der sich auch weiterhin über verbesserungsvorschläge freut!

Geändert von nalin (22-10-2004 um 22:16 Uhr)
nalin ist offline   Mit Zitat antworten
Alt 02-12-2004, 21:10   #14 (permalink)
User
 
Benutzerbild von Minchen
 
Registriert seit: Jul 2002
Ort: Augsburg
Beiträge: 47
einfacher hitTest in verschiedene Richtungen

Super Tip !!!

Auf die Idee wär ich nie gekommen

1000 x schneller als mein HitTest mit den Eigenschaften: _minY,_max_Y,minX,_maxX,

Hab das ganze mit meiner Tastatur Steuerung gekoppelt.

Tastatur Steuerung:
PHP-Code:
function steuerung()
{
// Steuerung rechts
    
if (Key.isDown(Key.RIGHT))
    {    
    
_global.schaun "rechts";
    
_root.cont._x -= _global.xspeed;
        }
// Steuerung links    
        
if (Key.isDown(Key.LEFT))
    {    
        
_global.schaun "links";
        
_root.cont._x += _global.xspeed;
        }
// Steuerung hoch    
    
if (Key.isDown(Key.UP))
    {    
                
_global.schaun "rauf";
        
_root.cont._y += _global.yspeed;
        }
// Steuerung runter    
    
if (Key.isDown(Key.DOWN))
    {    
        
_global.schaun "runter";
        
_root.cont._y -= _global.yspeed;
        }

Und jetzt der hitTest mit allen vorhandenen mc's
wird bei mir für das Spielfeld (bestehend aus einem Array) benötigt

PHP-Code:
function groundtest()
{
    for (
a=0;a<_global.block;a++)
    {
        
block cont["block"+a];
        if (
_root.menmc.hitTest(block)) 
        {    
            if(
_global["block"+a] >= 100)
            {
                if (
_global.schaun == "links"
                {
_root.cont._x -= 10;} 
                if (
_global.schaun == "rechts")
                {
_root.cont._x += 10;} 
                if (
_global.schaun == "rauf")
                {
_root.cont._y -= 10;} 
                if (
_global.schaun == "runter")
                {
_root.cont._y += 10;} 
            }
        }
    }

Bin trotzdem über jeden Tip für die Performance sehr dankbar.

Gruß

Minchen
__________________
-------------------------------------------
es geht auch anders. aber so geht es auch!!
-------------------------------------------
Minchen 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 14:11 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele