Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-12-2011, 09:47   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2011
Beiträge: 5
Frage zu Spiel mit AS

Hallo zusammen,
da ich totaler Flashneuling in,habe ich eine Frage zu meinem kleinen Breakout-Spiel. Und zwar springt mein Spiel in Frame 3,wenn das Spiel verloren ist,wo eine GameOver Meldung kommt. In Frame 2 liegt der AS Spielcode und in Frame 4 soll dann die Gewonnen-Meldung ausgegeben werden.

So viel zur Theorie. Das klappt eigentlich alles, bis auf das Springen in Frame 4, wenn alle Ziegel getroffen wurden. Wie könnte ich das realisieren? Its es auch möglich ein zweites Level zu bauen ohne den kompletten Code nochmal zu kopieren?

Danke für eure Hilfe!

Der Code aus Frame 2:

PHP-Code:
var holder:MovieClip = new MovieClip();
    
this.addChild(holder);

//Balken erstellen
var balken:Sprite = new Sprite();
balken.graphics.beginFill(0x666666);
balken.graphics.drawRect(0,0,550,15);
balken.graphics.endFill();
//Startposition des Balken angeben
balken.10;
balken.stage.stageHeight 20;
//Balken erscheint auf Bühne
holder.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.ballStartX;
ball.ballStartY;

//Ball erscheint auf Bühne
holder.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 
block: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=0i<reiheni++) {
        for(
j=0j<spaltenj++) {
           var 
ziegel:Sprite = new Sprite();
           var 
ziegelMatrix:Matrix = new Matrix();
           
ziegelMatrix.createGradientBox(ziegelBreiteziegelHöheMath.PI/2);
           
ziegel.graphics.beginGradientFill(GradientType.LINEAR,[ 0x9900660xFF0099 ],[1,1],[0,255],ziegelMatrix);
           
ziegel.graphics.drawRect(0,0,ziegelBreite,ziegelHöhe);
           
ziegel.graphics.endFill();
           
ziegel.startX + (j*(ziegelBreite+abstand));
           
ziegel.startY + (i*(ziegelHöhe+abstand));
           
holder.addChild(ziegel);
           
block.push(ziegel);
        }
     }
}
ziegelErstellen();

//Balken wird mit Mausbewegung gesteuert
function bewegeBalken(e:MouseEvent):void {
     
balken.e.stageX balken.width;
}
function 
updateBall(e:Event):void {
     
//Test ob Ball Balken berührt 
   
if(balken.hitTestObject(ball)) {
        var 
bumperCenterPoint:Number balken.+ (balken.width/2);
        
deltaX = (ball.bumperCenterPoint)/2;
        
deltaY *= -1;
     }
     var 
i:uint;
     var 
totalBricks:uint block.length;
     for(
i=0i<totalBricksi++) {
        var 
ziegel:Sprite block[i];
        
//Test ob BallZiegel berührt
      
if(ziegel.hitTestObject(ball)) {
           
//Ziegel entfernen
         
block.splice(i,1);
           
holder.removeChild(ziegel);   
           
deltaY *= -1;
           break;
        }
     }
  
     if(
ball.<= ballRadius/2deltaY *= -1;
     else if(
ball.>= stage.stageHeight ballRadius/2) {
        
gotoAndStop(3);
        while (
holder.numChildren>0holder.removeChildAt(0);
        
stage.removeEventListener(Event.ENTER_FRAME,updateBall);
        
stage.addEventListener(MouseEvent.CLICK,starteBall);
     }
     if(
ball.<= ballRadius/2deltaX *= -1;
     else if(
ball.>= stage.stageWidth ballRadius/2deltaX *= -1;
     
     
ball.+= deltaX;
     
ball.+= deltaY;
     
     function 
gewonnen(e:Event):void {

       if(
block ==[] ) {
       
gotoAndStop(4);
   }
   }

Flashyy ist offline   Mit Zitat antworten
Alt 12-12-2011, 11:32   #2 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.867
PHP-Code:
function gewonnen(e:Event):void 
{
    if(
block == []) {
        
gotoAndStop(4);
    }

diese Bedingung kann nicht hinhauen, zwei Objekte sind nie gleich, egal ob sie die selben Eigenschaften haben, es sind immer zwei unterschiedliche Objekte.
so:
PHP-Code:
function gewonnen(e:Event):void 
{
    if(
block.length == 0) {
        
gotoAndStop(4);
    }

Zitat:
Its es auch möglich ein zweites Level zu bauen ohne den kompletten Code nochmal zu kopieren?
wenn du den Code dafür kopieren müsstest, wär er nicht zu gebrauchen.

grundsätzlich ist es möglich, das Problem dass ich hier bei deinem code sehe: du erzeugst eine ganze Menge an Objekten, fügst die zur Bühne hinzu, und du setzt einige Event-Listener.
Aber du räumst nirgendwo auf! edit: doch, nachdem du auf Frame 3 springst.
würdest du jetzt wieder auf Frame 2 springen (oder den Code irgendwohin kopieren, und dorthin springen)
würde er neue Objekte über die alten erzeugen, und die Event-Listener würden auch doppelt ausgeführt werden.

also bau dir eine Funktion, die aufräumt, und führ die aus, bevor du auf ein anderes Frame springst.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist gerade online   Mit Zitat antworten
Alt 12-12-2011, 12:10   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2011
Beiträge: 5
Danke für deinen Tipp. Aber mit block.length == 0 habe ich es auch schon versucht und es funktioniert nicht Wenn der letzte Ziegel getroffen wurde,springt er nicht au Frame 4 sondern der Ball hüpft einfach weiter,solange bis man ihn von der Bühne fallen lässt und GameOver angesprungen wird.
Flashyy ist offline   Mit Zitat antworten
Alt 12-12-2011, 13:06   #4 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.867
hatte deinen Code nur überflogen
gewonnen wird nirgends aufgerufen. Und bitte keine Funktionen verschachteln, das bereitet idr. mehr Probleme als es löst.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist gerade online   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
spiel programmieren

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
frage zum spiel grinsebacke1 ActionScript 2 7 25-09-2008 05:36
Frage zu Mini-Spiel Skilo Flash MX 2004 5 04-11-2004 17:16
Renn-Spiel Frage ! ! ! crip PHP und MySQL 1 04-11-2003 16:06
Frage zu 'nem Spiel-Actionscript. Gigia ActionScript 1 2 01-04-2003 18:45
frage-antwort spiel n75 Flash 4 und Flash 5 8 11-03-2002 17:51


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:08 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele