{lang: 'de'}
Flashhilfe.de - Flash Community

Array ganz entfernen [Flash 11]

 


AntwortenRegistrieren Seite1  

FlashNewie#1
Benutzerbild von FlashNewie
Beiträge: 10
Registriert: Dec 2011

09.12.2011, 23:50

Hallo zusammen,

ich versuche mich hier gerade an einer Mini-Version des Spiels Breakout.

Leider habe ich folgendes Problem: wenn der Ball verloren geht, also die Bühne in Richtung Y verlässt, soll auf Frame 3 gesprungen werden,wo dann Game Over erscheint. Es werden mir dann aber immer noch meine Ziegel,der Ball und der Balken angezeigt, ich möchte aber natürlich,dass sie verschwinden. Ich habe es schon mit removeChild versucht,aber so verschwinden nur der Ball und der Balken aber nicht die Ziegel. Ein weiteres Problem ist,dass ich auf Frame 3 wieder die Möglichkeit zum Neustart anbieten möchte. Wie kann ich das realisieren?

Hier mein Versuch:

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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
//Balken erstellen
var balken:Sprite = new Sprite();
balken.graphics.beginFill(0x666666);
balken.graphics.drawRect(0,0,90,15);
balken.graphics.endFill();
//Startposition des Balken angeben
balken.x = 10;
balken.y = stage.stageHeight - 20;
//Balken erscheint auf Bühne
addChild(balken);


var deltaX:Number = 5;
var deltaY:Number = 5;
var isBallActive:Boolean = false;
//Variablen für Startposition des Balls deklarieren
var ballStartX:uint = 100;
var ballStartY:uint = 200;
var ballRadius:uint = 6;
//Ball erstellen
var ball:Sprite = new Sprite();
ball.graphics.beginFill(0x999999);
ball.graphics.drawCircle(0,0,ballRadius);
ball.graphics.endFill();
//Startposition für Ball angeben
ball.x = ballStartX;
ball.y = ballStartY;
//Ball erscheint auf Bühne
addChild(ball);


//Mauszeiger auf Bühne nicht anzeigen
Mouse.hide();
stage.frameRate = 31;
//bei Mausklick wird Funktion starteBall aufgerufen
stage.addEventListener(MouseEvent.CLICK,starteBall);
//bei Mausbewegung wird Funktion bewegeBalken aufgerufen
stage.addEventListener(MouseEvent.MOUSE_MOVE,bewegeBalken);


var ziegel2:Array = [];
function starteBall(e:MouseEvent):void {
     stage.addEventListener(Event.ENTER_FRAME,updateBall);
     stage.removeEventListener(MouseEvent.CLICK,starteBall);
}
//Ziegel erstellen
function ziegelErstellen():void {
     var reihen:uint = 5;
     var spalten:uint = 8;
     var ziegelBreite:uint = 30;
     var ziegelHöhe:uint = 10;
     var startX:Number = (stage.stageWidth - spalten*(ziegelBreite+abstand))/2;
     var startY:Number = 10;
     var abstand:uint = 3;
     
     var i:uint;
     var j:uint;
     for(i=0; i<reihen; i++) {
        for(j=0; j<spalten; j++) {
           var ziegel:Sprite = new Sprite();
           var ziegelMatrix:Matrix = new Matrix();
           ziegelMatrix.createGradientBox(ziegelBreite, ziegelHöhe, Math.PI/2);
           ziegel.graphics.beginGradientFill(GradientType.LINEAR,[ 0x990066, 0xFF0099 ],[1,1],[0,255],ziegelMatrix);
           ziegel.graphics.drawRect(0,0,ziegelBreite,ziegelHöhe);
           ziegel.graphics.endFill();
           ziegel.x = startX + (j*(ziegelBreite+abstand));
           ziegel.y = startY + (i*(ziegelHöhe+abstand));
           addChild(ziegel);
           ziegel2.push(ziegel);
        }
     }
}
ziegelErstellen();
//Balken wird mit Mausbewegung gesteuert
function bewegeBalken(e:MouseEvent):void {
     balken.x = e.stageX - balken.width;
}
function updateBall(e:Event):void {
     //Test ob Ball Balken berührt
   if(balken.hitTestObject(ball)) {
        var bumperCenterPoint:Number = balken.x + (balken.width/2);
        deltaX = (ball.x - bumperCenterPoint)/2;
        deltaY *= -1;
     }
     var i:uint;
     var totalBricks:uint = ziegel2.length;
     for(i=0; i<totalBricks; i++) {
        var ziegel:Sprite = ziegel2[i];
        //Test ob BallZiegel berührt
      if(ziegel.hitTestObject(ball)) {
           //Ziegel entfernen
         ziegel2.splice(i,1);
           removeChild(ziegel);   
           deltaY *= -1;
           break;
        }
     }
     
     if(ball.x <= ballRadius/2) deltaX *= -1;
     else if(ball.x >= stage.stageWidth - ballRadius/2) deltaX *= -1;
     
     ball.x += deltaX;
     ball.y += deltaY;
     
     
     
     if(ball.y <= ballRadius/2) deltaY *= -1;
     else if(ball.y >= stage.stageHeight - ballRadius/2) {
        gotoAndStop(3);
        ziegel2.splice(i,0);
        stage.removeEventListener(Event.ENTER_FRAME,updateBall);
        stage.removeEventListener(Event.ENTER_FRAME,starteBall);
     }
}

Schlagwörter: Array entleeren, matrix
Geändert von FlashNewie am 09.12.11 um 23:58 Uhr
vindel#2
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

10.12.2011, 10:45