Flashhilfe.de - Flash Community

Hit-Test Berührung zweiter MovieClips [Flash 10]

 


AntwortenRegistrieren Seite1  

pat_and_nobody#1
Benutzerbild von pat_and_nobody
Beiträge: 478
Registriert: Aug 2007

08.09.2011, 21:46

Also, ich erstelle mit folgendem AS "fallende Tropfen" in recht großem Abstand. Wie könnte ich in das AS einen Hit-Test integrieren der bei Berührung eines generierten Tropfens (drop) mit dem auf MovieClip(root) befindlichen MC test_mc ein Trace ausgibt.

Habs so versucht, funktioniert aber nicht.

ActionScript:
1
2
3
4
if (MovieClip(root).test_mc.hitTestObject(drop[i]))
            {
                 trace("getroffen");
              }



ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package Classes
{
     import flash.display.MovieClip;
     import flash.events.Event;
 
     public class Rain extends MovieClip
     {
        private var offset:int = 50;
        private var dropsNumber:int;
        private var dropsVector:Vector.<MovieClip> = new Vector.<MovieClip>();
 
        public function init(drops:int, fallSpeed:int, windSpeed:int, hArea:int, vArea:int, dir:String):void
        {
           dropsNumber = drops;
 
           if (dir == "right")
           {
              offset *=  -1;
           }
 
           for (var i:int = 0; i < drops; i++)
           {
              var drop:Drop = new Drop();
 
              drop.fallSpeed = fallSpeed;
              drop.windSpeed = windSpeed;
              drop.dir = dir;
              drop.hArea = hArea;
              drop.vArea = vArea;
 
              drop.x = Math.random() * (hArea + offset);
              drop.y = Math.random() * vArea;
 
              //

              drop.scaleX = Math.round(((Math.random() * 1) + 0.3) * 40) / 40;
              drop.scaleY = drop.scaleX;
 
              //

              dropsVector.push(drop);
 
              addChild(drop);
 
           }
 
           inTheDirection();
        }
 
        private function inTheDirection():void
        {
           for (var i:int = 0; i < dropsNumber; i++)
           {
              switch (dropsVector[i].dir)
              {
                 case "left" :
 
                    dropsVector[i].addEventListener(Event.ENTER_FRAME, moveLeft);
 
                    break;
 
                 case "right" :
 
                    dropsVector[i].scaleX *=  -1;
                    dropsVector[i].addEventListener(Event.ENTER_FRAME, moveRight);
 
                    break;
 
                 default :
 
                    trace("Fehler aufgetreten");
              }
           }
        }
 
        private function moveLeft(e:Event):void
        {
           e.target.x -=  e.target.windSpeed;
           e.target.y +=  Math.random() * e.target.fallSpeed;
 
           if (e.target.y > e.target.vArea + e.target.height)
           {
              e.target.x = Math.random() * (e.target.hArea + (offset * 2));
              e.target.y =  -  e.target.height;
           }
        }
 
        private function moveRight(e:Event):void
        {
           e.target.x +=  e.target.windSpeed;
           e.target.y +=  Math.random() * e.target.fallSpeed;
 
           if (e.target.y > e.target.vArea + e.target.height)
           {
              e.target.x = Math.random() * (e.target.hArea - offset * 2) + offset * 2;//Check
            e.target.y =  -  e.target.height;
           }
        }
     }
}
Schlagwörter: Berührung, Hit-Test, Movieclip
pat_and_nobody#2
Benutzerbild von pat_and_nobody
Beiträge: 478
Registriert: Aug 2007

Themenautor/in

08.09.2011, 23:03

Habs jetzt so versucht. Leider auch ohne Erfolg. Wo und wie müsste ich diesen Hit-Test in meinen bestehenden Code einfügen?

Bin euch wirklich sehr dankbar!

ActionScript:
1
2
3
4
5
6
7
8
9
10
//HITTEST START
MovieClip(root).test_mc.addEventListener(Event.ENTER_FRAME, enter_frame);
function enter_frame(event:Event):void
{
     if (MovieClip(root).test_mc.hitTestObject(dropsVector0))
     {
        trace("berührt");
     }
}
//HITTEST ENDE
f0rml3ss#3
Benutzerbild von f0rml3ss
Beiträge: 447
Registriert: Mar 2008

10.09.2011, 20:19

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var l:int = dropsVector.length;

stage.test_mc.addEventListener(Event.ENTER_FRAME, ef);

function ef(e:Event=null):void{
    for(var i:int = 0;i<l;i++){
       checking(i);
    }
}


function checking(index:int):void{
    var drop:Drop = dropsVector[index];
    if(drop.hitTestObject(stage.test_mc)){
      trace("Nr. "+index+" ist aufgetroffen");
    }
}


Du kannst auch den Script in den "test_mc" packen, nur dann musst du den Instanznamen mit this ersetzen.
Adobe AS3.0 Stichwortverzeichnis
Geändert von f0rml3ss am 10.09.11 um 20:21 Uhr

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Javascript new line [Flash CS5] 23.11.2020 - user01234
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2022 Sebastian Wichmann - Flashhilfe.de