Antworten auf deine Fragen:
Neues Thema erstellen

'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

noob69

Noch nicht viel geschrieben

Guten Morgen PSDler,

ich habe ein Frage zwecks logischem Aufbau...

Ich schreibe gerade ein kleines Quiz-Spiel, welches sich die Fragen via PHP-Skript nach dem Zufallsprinzip aus einer OracleDatenbank holt.
Nun würde ich gerne die bereits gestellten Fragen in einem Array sammeln
um auszusschließen, dass die gleiche Frage zweimal in einem Spieledurchgang gestellt wird.
Ich weiß jetzt aber nicht genau wie ich da jetzt rangehen soll.

Ich denke mal ich muss die Abfrage mit einer verschachtelten if-else Bediengung auswerten, in etwa so...

PHP:
if (frage aus datenbank geholt) {
    mit arrayinhalt abgleichen
       if(frage schon im array) {
            neue frage aus der datenbank holen
              }else{
                 stelle frage && füge sie arrayinhalt zu
                 }
              }
Rein von der Logik, kann mich das zum Erfolg bringen?
Hat jemand sowas schon ein mal gemacht und vielelicht eine bessere Lösung oder einen Tip was ich beachten sollte?
Wie vergleiche ich in AS3 die neue Frage mit den Fragen im Array?
 
Zuletzt bearbeitet:

A

ADcosmos

Guest

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

Hi,

also ich würde gleich am Anfang alle Fragen aus der Datenbank holen. Die Quizfragen dann in ein Array packen und ein zweites Array mit den Indexen erstellen.

Code:
var questArray:Array= new Array(); //hier kommen alle Fragen aus der DB 
var questIndexArray:Array= new Array();

//Nachdem alle quest in questArray gespeichert sind, NICHT vorher sollte das kommen:

for (var i:int=0; i<questArray.length; i++){
  questIndexArray.push(i);
}

//Das Folgende, wenn Du eine neue Frage stellen möchtest
var rand:int= Math.floor(Math.random()*questIndexArray.length);//ZufallsIndex aus questIndexArray
var quest=questArray[questIndexArray[rand]];//Ich weiß nicht, wie Du die Fragen speicherst, deswegen hier als unbestimmte Variable, es würde sich lohnen eine eigene Klasse zu erstellen
questIndexArray.splice(rand, 1); //loescht ein Item aus questIndexArray, so dass die Frage nicht doppelt gestellt wird

//Wenn keine Fragen mehr da sein sollen, erstelle das IndexArray neu
if (questIndexArray.length==0){
     for (var i:int=0; i<questArray.length; i++){
          questIndexArray.push(i);
     }
}

MFG ADcosmos
 

noob69

Noch nicht viel geschrieben

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

Du bist ja mal flott!! *DaumenHoch*
Das mit zwei Arrays zu lösen, daran habe ich gar nicht gedacht...ich werds mal mit deinem Code versuchen. Geb dann später Rückmeldung obs funktioniert.

Danke für deine Hilfe
 

noob69

Noch nicht viel geschrieben

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

habs jetzt doch ein bischen anders gelöst.... aber du hast mich überhaupt erst auf die idee gebracht

ich les alle fragen in ein array ein.... mische sie... und immer wenn ich eine frage gestellt habe, werfe ich sie aus dem array......

PHP:
//////////////////////////////////////////////////////////////////////////
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("http://www3.XXXX.de/index.php"));// Pfad zur Php Datei
loader.addEventListener(Event.COMPLETE, handleComplete);// Eventhandler zum auffangen der Antwort

/////////////////////////////////////////////////////////////////////////
function handleComplete(event:Event):void {
    var xml:XML=XML(event.target.data);
    var originalArray:Array = new Array();                        //array wird definiert

    for(var i=0; i<xml.id.length(); i++)                        //'i' sollte immer >1 als fragen in der datenbank
    {
        originalArray[i]=new Array(7);                            //array ist mehrdimensional und hat pro index 
                                                                //7 'unterindexe' die jeweils einen wert haben
        originalArray[i]["frage"]=xml.child(i).frage;
        originalArray[i]["antwort"]=xml.child(i).antwort;
        originalArray[i]["antwort_bem"]=xml.child(i).antwort_bem;
        originalArray[i]["falsch2"]=xml.child(i).falsch2;
        originalArray[i]["falsch2_bem"]=xml.child(i).falsch2_bem;
        originalArray[i]["falsch3"]=xml.child(i).falsch3;
        originalArray[i]["falsch3_bem"]=xml.child(i).falsch3_bem;
    };
    var shuffledArray:Array=originalArray.sort(shuffle);        //shuffle definiert

    function shuffle(originalArray,shuffledArray):int {
        var sortNum:int=shuffledArray.push(originalArray.splice(Math.floor(Math.random()*originalArray.length),2));
        return sortNum;
    }
    //trace(shuffledArray[0]["frage"]);
    //trace(shuffledArray[1]["frage"]);

    //a_txt.text=(shuffledArray[0]["frage"]);

    if (originalArray.length==shuffledArray.length)                //der erste index aus dem shuffledArray wird immmer weggenommen sobald er gestellt worden ist
    {
        shuffledArray.splice(0,1);
    };
    //trace(shuffledArray[0]["frage"]);
    //trace(shuffledArray[1]["frage"]);

    //b_txt.text=(shuffledArray[0]["frage"]);
}
mir fällt nur keine bessere bediengung für die letzte if schleife ein......
 
Zuletzt bearbeitet:
A

ADcosmos

Guest

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

Hi,

ich find ja interessant, dass bei mir deine shuffle-Fntion nicht funktioniert.
ZU deiner Frage: Ordne erst einmal deinen Code. Funktion (shuffle) in anderen Funktionen (handleComplete) zu verschachteln, macht man nicht. Zudem ist deine letzte if-Abfrage doch total an der falschen Stelle. Die sollte doch in einer eigenen Funktion sein und würde IN ETWA so lauten (vorausgesetzt, Du machst die zwei Arrays global).

Code:
if (shuffledArray.length>0){
        shuffledArray.splice(0,1);
 }
else{
   //Array neu erstellen, da keine Frage mehr vorhanden bzw. Ergebnis anzeigen
}

MFG ADcosmos
 

noob69

Noch nicht viel geschrieben

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

Hallo leute,

so heute habe ich endlich mal zeit gefunden hier dran weiter zu arbeiten...bzw diesen code hier bei einem anderen aufgabenrealsierung leicht modifiziert mitzubenutzen

nun funktioniert hier das alles auch ganz gut (auch wenn ichs mir hier und da wohl ein bischen komplizierter als nötig mache)

PHP:
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("http://xxxx"));// Pfad zur Php Datei
loader.addEventListener(Event.COMPLETE, handleComplete);// Eventhandler zum auffangen der Antwort
    /////////////////////////////////////////////////////////////////////////
function handleComplete(event:Event):void {

    var xml:XML=XML(event.target.data);
    var originalArray:Array = new Array();                        //array wird definiert

    
        for(var i=0; i<xml.id.length(); i++)                        //'i' sollte immer >1 als fragen in der datenbank 
        {
            originalArray[i]=new Array(7);                             //array ist mehrdimensional und hat pro index 
                                                                    //7 'unterindexe' die jeweils einen wert haben
            originalArray[i]["frage"]=xml.child(i).frage;
            originalArray[i]["antwort"]=xml.child(i).antwort;
            originalArray[i]["antwort_bem"]=xml.child(i).antwort_bem;
            originalArray[i]["falsch1"]=xml.child(i).falsch1;
            originalArray[i]["falsch1_bem"]=xml.child(i).falsch1_bem;
            originalArray[i]["falsch2"]=xml.child(i).falsch2;
            originalArray[i]["falsch2_bem"]=xml.child(i).falsch2_bem;
        }
        var shuffledArray:Array=originalArray.sort(shuffle);        //shuffle definiert
    
        function shuffle(originalArray,shuffledArray):int
        {
            var sortNum:int=shuffledArray.push(originalArray.splice(Math.floor(Math.random()*originalArray.length),2));
            return sortNum;
        }

    function FrageWeg()                                        //gestellte frage rauswerfen, neue stellen
    {
        if (originalArray.length==shuffledArray.length)        //der erste index wird immmer weggenommen sobald er gestellt worden ist
        {                                                    
            shuffledArray.splice(0,1);
            CaseVerteiler();
        }
    }
    /*_____________________ZufallsArray In Container_______________________*/
    /////////////////////////////////////////////////////////////////////////
    CaseVerteiler(); //funktionsaufruf antworten_sortierer
    /////////////////////////////////////////////////////////////////////////
    function CaseVerteiler(event)
    {
    Frage_Container.Frage_txt.text=(shuffledArray[0]["frage"]); //frage immer im gleichen MC
        
        //Bedienungen
        var num=Math.round(Math.random()*5);
        switch (num)
        {
        default:
        Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["antwort"]);
        Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch1"]);
        Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch2"]);
        trace("Fall_default");    
        Antwort3_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);    //die eventlistener für den mausclick werden definiert
        Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);    //die eventlistener für den mausclick werden definiert
        Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);    //die eventlistener für den mausclick werden definiert
        break;    
        
        case 1:
        Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["antwort"]);
        Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch1"]);
        Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch2"]);
        trace("Fall_1");
        Antwort1_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
        Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
        Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
        break;
            
        case 2:
        Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["antwort"]);
        Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch1"]);
        Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch2"]);
        trace("Fall_2");
        Antwort1_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
        Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
        Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
        break;
            
        case 3:
        Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["antwort"]);
        Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch1"]);
        Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch2"]);
        trace("Fall_3");
        Antwort2_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
        Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
        Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
        break;
            
        case 4:
        Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["antwort"]);
        Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch1"]);
        Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch2"]);
        trace("Fall_4");
        Antwort2_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
        Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
        Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
        break;
            
        case 5:        
        Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["antwort"]);
        Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch1"]);
        Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch2"]);
        trace("Fall_5");    
        Antwort3_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
        Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
        Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
        break;
        }        
    /////////////////////////////////////////////////////////////////////////

    function RichtigeAntwort(event:MouseEvent):void
    {    
    Aufklaerer_Container.visible=true;
    Aufklaerer_Container.Aufklaerer_txt.text=("Richtig! "+shuffledArray[0]["antwort_bem"]);
    PunkteZaehler_MC.PunkteZaehler_txt.text=(Punkte++ +" Punkte");  //Punktezähler +1
    }
    
    function FalscheAntwort1(event:MouseEvent):void
    {
    Aufklaerer_Container.visible=true;
    Aufklaerer_Container.Aufklaerer_txt.text=("Falsch! "+shuffledArray[0]["falsch1_bem"]);    
    }
    
    function FalscheAntwort2(event:MouseEvent):void
    {
    Aufklaerer_Container.visible=true;
    Aufklaerer_Container.Aufklaerer_txt.text=("Falsch! "+shuffledArray[0]["falsch2_bem"]);
    }
            
    }
    /////////////////////////////////////////////////////////////////////////
    /*_________________________ZufallsArray Gelöst_________________________*/
    /////////////////////////////////////////////////////////////////////////
    Aufklaerer_Container.addEventListener(MouseEvent.CLICK, KlickIrgendwo);     //versteckt den AufklärerContainer
    /////////////////////////////////////////////////////////////////////////
    function KlickIrgendwo(event:MouseEvent):void
    {
    Aufklaerer_Container.visible=false;
    FrageWeg();
    }    
}//von 'handleComplete' abschließende Klammer


nur wenn ich mir die fragen stellen lasse, bleibt er immer bei der gleichen fragen bzw bei der gleichen frage-id hängen und wirft dann folgende fehlermeldung aus

TypeError: Error #1010: Ein Begriff ist nicht definiert und hat keine Eigenschaften.
at MethodInfo-9()
at MethodInfo-5()
at MethodInfo-10()


erst bei frage nummer 7, als ich die dann aus der datenbank geschmissen habe, hängt er nun bei der frage nummer 8 (also wieder bei der 7ten frage)

kann mir jemand ein tip geben, wie ich den fehler deuten und eingrenzen kann?
bin immer noch anfänger

hab dies schon statt so
PHP:
        for(var i=0; i<xml.id.length(); i++)                        //'i' sollte immer >1 als fragen in der datenbank
so probiert
PHP:
        for(var i=0; i<15; i++)                        //'i' sollte immer >1 als fragen in der datenbank
sind momentan nämlich 15 fragen in der datenbank

und die 7 hier [script]originalArray=new Array(7);[/script] auch schon durch zig sachen ersetzt ....(sollte eiglt sowieso keine rolle spielen udn tuts auch nicht)

nun weiß ich echt nicht mehr weiter :(
 
A

ADcosmos

Guest

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

Hi,

1. Du greifst in der Methode "MethodInfo-9()" auf eine Eigenschaft zu, die nicht existiert. Mich wundert es nur, wo diese Methode "MethodInfo-9()" bei Dir ist.

2. Ich hab das - glaube ich - schon mal erwähnt, Funktionen sollten innerhalb anderer Funktionen NICHT stehen. Du hast in der Funktion handleComplete sieben Methoden. Vielleicht kommen daher auch die Methodennamen "MethodInfo-9()", "MethodInfo-5()" und "MethodInfo-10()".

MFG ADcosmos
 

noob69

Noch nicht viel geschrieben

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

stimmt recht hast du, das hattest du gesagt. ich wollte mich dieses projekt noch so dadurch mogeln, das rächt sich jetzt :lol: ich räum dann mal auf, sollte das problem danach noch immer bestehen poste ich es.

danke für die eindringliche anregung ^^
 

noob69

Noch nicht viel geschrieben

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

so nun herrscht ein bischen mehr ordnung... keine verschachtelten funktionen mehr

PHP:
    var loader:URLLoader = new URLLoader();
    loader.load(new URLRequest("http://www3.kindernetz.de/test/florian/controller.php"));// Pfad zur Php Datei
    loader.addEventListener(Event.COMPLETE, handleComplete);// Eventhandler zum auffangen der Antwort
    /////////////////////////////////////////////////////////////////////////
    function handleComplete(event:Event):void
    {
    trace("handleComplete1");    
    var xml:XML=XML(event.target.data);
    
        for(var i=0; i<xml.id.length(); i++)                        //'i' sollte immer >1 als fragen in der datenbank
        {
            trace("handleComplete2");
            originalArray[i]=new Array(7);                            //array ist mehrdimensional und hat pro index 
                                                                    //7 'unterindexe' die jeweils einen wert haben
            originalArray[i]["frage"]=xml.child(i).frage;
            originalArray[i]["antwort"]=xml.child(i).antwort;
            originalArray[i]["antwort_bem"]=xml.child(i).antwort_bem;
            originalArray[i]["falsch1"]=xml.child(i).falsch1;
            originalArray[i]["falsch1_bem"]=xml.child(i).falsch1_bem;
            originalArray[i]["falsch2"]=xml.child(i).falsch2;
            originalArray[i]["falsch2_bem"]=xml.child(i).falsch2_bem;
        }
        trace("handleComplete3");
        shuffle(originalArray,shuffledArray);
    }
        
    function shuffle(originalArray,shuffledArray):int
    {
        trace("shuffle");
        var sortNum:int=shuffledArray.push(originalArray.splice(Math.floor(Math.random()*originalArray.length),2));
        return sortNum;
    }
    /*_____________________ZufallsArray In Container_______________________*/
    /////////////////////////////////////////////////////////////////////////
    function CaseVerteiler()
    {
    trace("CaseVerteiler1");    
    Frage_Container.Frage_txt.text=(shuffledArray[0]["frage"]); //frage immer im gleichen MC
        if(shuffledArray.length<1)
        {
            trace("jetzt ist rum");
        }
        else
        {
        //Bedienungen
        var num=Math.round(Math.random()*5);
            
            switch (num)
            {
            default:
            Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["antwort"]);
            Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch1"]);
            Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch2"]);
            trace("Fall_default");    
            Antwort3_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);    //die eventlistener für den mausclick werden definiert
            Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);    //die eventlistener für den mausclick werden definiert
            Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);    //die eventlistener für den mausclick werden definiert
            break;    
            
            case 1:
            Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["antwort"]);
            Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch1"]);
            Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch2"]);
            trace("Fall_1");
            Antwort1_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
            Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
            Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
            break;
                
            case 2:
            Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["antwort"]);
            Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch1"]);
            Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch2"]);
            trace("Fall_2");
            Antwort1_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
            Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
            Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
            break;
                
            case 3:
            Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["antwort"]);
            Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch1"]);
            Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch2"]);
            trace("Fall_3");
            Antwort2_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
            Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
            Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
            break;
                
            case 4:
            Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["antwort"]);
            Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch1"]);
            Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch2"]);
            trace("Fall_4");
            Antwort2_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
            Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
            Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
            break;    
            
            case 5:        
            Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["antwort"]);
            Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch1"]);
            Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch2"]);
            trace("Fall_5");    
            Antwort3_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
            Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
            Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
            break;
            }        
        }
    }
    /////////////////////////////////////////////////////////////////////////
    function RichtigeAntwort(event:MouseEvent):void
    {    
    Aufklaerer_Container.visible=true;
    Aufklaerer_Container.Aufklaerer_txt.text=("Richtig! "+shuffledArray[0]["antwort_bem"]);
    PunkteZaehler_MC.PunkteZaehler_txt.text=(Punkte++ +" Punkte");  //Punktezähler +1
    }
    
    function FalscheAntwort1(event:MouseEvent):void
    {
    Aufklaerer_Container.visible=true;
    Aufklaerer_Container.Aufklaerer_txt.text=("Falsch! "+shuffledArray[0]["falsch1_bem"]);    
    }
    
    function FalscheAntwort2(event:MouseEvent):void
    {
    Aufklaerer_Container.visible=true;
    Aufklaerer_Container.Aufklaerer_txt.text=("Falsch! "+shuffledArray[0]["falsch2_bem"]);
    }
    /*_________________________ZufallsArray Gelöst_________________________*/
    /////////////////////////////////////////////////////////////////////////
    Aufklaerer_Container.addEventListener(MouseEvent.CLICK, KlickIrgendwo);     //versteckt den AufklärerContainer
    /////////////////////////////////////////////////////////////////////////
    function KlickIrgendwo(event:MouseEvent):void
    {
    Aufklaerer_Container.visible=false;
    trace("KlickeIrgendwo");
        if (originalArray.length==shuffledArray.length)        //der erste index wird immmer weggenommen sobald er gestellt worden ist
        {                                                    
            shuffledArray.splice(0,1);
            CaseVerteiler();
        }
    }
und ja statt method-info nummer XY steht nun immerhin schon wieder eine etwas konkretere fehlermeldung da

TypeError: Error #2007: Parameter text darf nicht 'null' sein.
at flash.text::TextField/set text()
at TrainingscampV2_fla::MainTimeline/CaseVerteiler()
at TrainingscampV2_fla::MainTimeline/KlickIrgendwo()


bringt mich leider trotzdem nicht weiter, weil ich nicht weiß was ihn dort aus dem konzept bringt... ich vermute das mein array zu ende ist....wenn ich dann trotzdem nochmal weiterklicke, kommt folgende fehlermeldung..

TypeError: Error #1010: Ein Begriff ist nicht definiert und hat keine Eigenschaften.
at TrainingscampV2_fla::MainTimeline/CaseVerteiler()
at TrainingscampV2_fla::MainTimeline/KlickIrgendwo()

...
und die wiederholt sich dann mit jeder funktion die sie durchläuft

TypeError: Error #1010: Ein Begriff ist nicht definiert und hat keine Eigenschaften.
at TrainingscampV2_fla::MainTimeline/RichtigeAntwort()
TypeError: Error #1010: Ein Begriff ist nicht definiert und hat keine Eigenschaften.
at TrainingscampV2_fla::MainTimeline/FalscheAntwort1()
TypeError: Error #1010: Ein Begriff ist nicht definiert und hat keine Eigenschaften.
at TrainingscampV2_fla::MainTimeline/FalscheAntwort2()


und dann wieder von vorne...

komisch ist nur, dass es manchmal 10 fragen und manchmal nur 1 frage braucht bis er 'rauslfliegt'. die frage ist immer die gleiche bzw an gleicher stelle in der datenbank (ich hatte die frage auch schon gelöscht, aber dann flog er bei der frage danach raus, also wieder bei frage eine nach der frage mit id '6'....
 
Zuletzt bearbeitet:
A

ADcosmos

Guest

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

Hi,

1. Müsste es wirklich daran liegen, dass dein Array leer ist. (Nach einer bestimmten Zeit)

2. Deswegen würde ich die Zeile
Code:
Frage_Container.Frage_txt.text=(shuffledArray[0]["frage"]);
verschieben und zwar in den folgende else-Zweig (also direkt nach Deinem Kommentar "//Bedienungen")

Dann sollte der Fehler nicht auftreten, vorausgesetzt Dein shuffleArray ist richtig (sprich es hat keine "Lücken")

MFG ADcosmos
 

noob69

Noch nicht viel geschrieben

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

gutes morgen liebes forum....

endlich mal wieder zeit ein bischen hier weiter zu arbeiten, leider häng ich schon wieder an einer stelle

hier mal der code aufs wesentliche gekürzt


PHP:
var originalArray:Array = new Array();                        //array wird definiert    
var shuffledArray:Array=originalArray.sort(shuffle);        //shuffle definiert

...................

var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("http://www.xxxx.xx"));// Pfad zur Php Datei
loader.addEventListener(Event.COMPLETE, handleComplete);// Eventhandler zum auffangen der Antwort
/////////////////////////////////////////////////////////////////////////
function shuffle(arr:Array):void
{
    var len:int = arr.length;
    for(var i:int = len; i--; ){
        var j:int = Math.random() * len;
        var h:* = arr[j];
        arr[j]= arr[i];
        arr[i]= h;
    }
}
function handleComplete(event:Event):void
{
trace("handleComplete1");    
var xml:XML=XML(event.target.data);

    for(var i=0; i<xml.id.length(); i++)                        //'i' sollte immer >1 als fragen in der datenbank
    {
        originalArray[i]=new Array(7);                            //array ist mehrdimensional und hat pro index 
                                                                //7 'unterindexe' die jeweils einen wert haben
        originalArray[i]["frage"]=xml.child(i).frage;
        originalArray[i]["antwort"]=xml.child(i).antwort;
        originalArray[i]["antwort_bem"]=xml.child(i).antwort_bem;
        originalArray[i]["falsch1"]=xml.child(i).falsch1;
        originalArray[i]["falsch1_bem"]=xml.child(i).falsch1_bem;
        originalArray[i]["falsch2"]=xml.child(i).falsch2;
        originalArray[i]["falsch2_bem"]=xml.child(i).falsch2_bem;
    }
    trace("handleComplete3");
    trace("1: "+shuffledArray.length);    
    //shuffle(originalArray,shuffledArray);
    for (var a:Object in  originalArray){
        trace(a + originalArray[a]["frage"] + " : " +  originalArray[a]["antwort"]+ originalArray[a]["falsch1"]+  originalArray[a]["falsch2"]);
    }
    
    shuffle(originalArray);
    shuffledArray = originalArray.concat(); 
    for (var b:Object in  shuffledArray){
        trace(b + shuffledArray[b]["frage"] + " : " +  shuffledArray[b]["antwort"]+ shuffledArray[b]["falsch1"]+  shuffledArray[b]["falsch2"]);
    }
}
/////////////////////////////////////////////////////////////////////////
/*_____________________ZufallsArray In Container_______________________*/
/////////////////////////////////////////////////////////////////////////
function CaseVerteiler()
{
    trace("CaseVerteiler1");        
    trace("2: "+shuffledArray.length);    
        if(shuffledArray.length<1)
        {
            trace("jetzt ist rum_Array leer");
            EndeAntwortFrageFensterAusblenden();
            myTimer.start();
        }    
        else if(Punkte==11)
        {
            trace("jetzt ist rum_ 10 Punkte");
            EndeAntwortFrageFensterAusblenden();
            myTimer.start();
        }
        else
        {
            trace("CaseVerteiler2");        
            var num=Math.round(Math.random()*5);        //Bedienungen
            trace("CaseVerteiler3");        
            Frage_Container.Frage_txt.text=(shuffledArray[0]["frage"]); //frage immer im gleichen MC
            trace("CaseVerteiler4");        
            trace("3: "+shuffledArray.length);        
                switch (num)
                {            
                                    
                case 1:
                    Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["antwort"]);
                    Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch1"]);
                    Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch2"]);
                    trace("Fall_1");
                    trace("Richtig: "+shuffledArray[0]["antwort"]);                
                    trace("Falsch1: "+shuffledArray[0]["falsch1"]);
                    trace("Falsch2: "+shuffledArray[0]["falsch2"]);            
                    Antwort1_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
                    Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
                    Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
                    break;
                    
                case 2:
                    Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["antwort"]);
                    Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch1"]);
                    Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch2"]);
                    trace("Fall_2");
                    trace("Richtig: "+shuffledArray[0]["antwort"]);                    
                    trace("Falsch1: "+shuffledArray[0]["falsch1"]);
                    trace("Falsch2: "+shuffledArray[0]["falsch2"]);            
                    Antwort2_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
                    Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
                    Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
                    break;
                    
                case 3:
                    Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["antwort"]);
                    Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch1"]);
                    Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch2"]);
                    trace("Fall_3");
                    trace("Richtig: "+shuffledArray[0]["antwort"]);                
                    trace("Falsch1: "+shuffledArray[0]["falsch1"]);
                    trace("Falsch2: "+shuffledArray[0]["falsch2"]);                        
                    Antwort1_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
                    Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
                    Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
                    break;

                case 4:
                    Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["antwort"]);
                    Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch1"]);
                    Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch2"]);
                    trace("Fall_4");
                    trace("Richtig: "+shuffledArray[0]["antwort"]);                
                    trace("Falsch1: "+shuffledArray[0]["falsch1"]);
                    trace("Falsch2: "+shuffledArray[0]["falsch2"]);                    
                    Antwort3_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
                    Antwort2_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
                    Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
                    break;
                case 5:        
                    Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["antwort"]);
                    Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["falsch1"]);
                    Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch2"]);
                    trace("Fall_5");
                    trace("Richtig: "+shuffledArray[0]["antwort"]);                    
                    trace("Falsch1: "+shuffledArray[0]["falsch1"]);
                    trace("Falsch2: "+shuffledArray[0]["falsch2"]);                
                    Antwort2_Container.addEventListener(MouseEvent.CLICK, RichtigeAntwort);
                    Antwort3_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort1);
                    Antwort1_Container.addEventListener(MouseEvent.CLICK, FalscheAntwort2);
                    break;    
                    
                default:
                    Antwort3_Container.Antwort3_txt.text=(shuffledArray[0]["antwort"]);
                    Antwort1_Container.Antwort1_txt.text=(shuffledArray[0]["falsch1"]);
                    Antwort2_Container.Antwort2_txt.text=(shuffledArray[0]["falsch2"]);
                    trace("Fall_default");
                    trace("Richtig: "+shuffledArray[0]["antwort"]);                
                    trace("Falsch1: "+shuffledArray[0]["falsch1"]);
                    trace("Falsch2: "+shuffledArray[0]["falsch2"]);                    
                     Antwort3_Container.addEventListener(MouseEvent.CLICK,  RichtigeAntwort);    //die eventlistener für den mausclick werden  definiert
                     Antwort1_Container.addEventListener(MouseEvent.CLICK,  FalscheAntwort1);    //die eventlistener für den mausclick werden  definiert
                     Antwort2_Container.addEventListener(MouseEvent.CLICK,  FalscheAntwort2);    //die eventlistener für den mausclick werden  definiert
                    break;    
            }        
        }
    }    

.......

function RichtigeAntwort(event:MouseEvent):void
{
    AntwortFensterAusblenden();
    Aufklaerer_Container.Aufklaerer_txt.text=("Richtig! "+shuffledArray[0]["antwort_bem"]);
    PunkteZaehler_MC.PunkteZaehler_txt.text=(Punkte++ +" Punkte");  //Punktezähler +1
    trace(Punkte+1 +" Punkte");
    //(event.target).removeEventListener(MouseEvent.CLICK, FalscheAntwort1);    
    //(event.target).removeEventListener(MouseEvent.CLICK, FalscheAntwort2);
    Aufklaerer_Container.addEventListener(MouseEvent.CLICK, KlickIrgendwo);
}
    
function FalscheAntwort1(event:MouseEvent):void
{
    AntwortFensterAusblenden();
    Aufklaerer_Container.Aufklaerer_txt.text=("Leider nicht ganz richtig! "+shuffledArray[0]["falsch1_bem"]);    
    //(event.target).removeEventListener(MouseEvent.CLICK, RichtigeAntwort);    
    //(event.target).removeEventListener(MouseEvent.CLICK, FalscheAntwort2);
    Aufklaerer_Container.addEventListener(MouseEvent.CLICK, KlickIrgendwo);
}
function FalscheAntwort2(event:MouseEvent):void
{
    AntwortFensterAusblenden();
    Aufklaerer_Container.Aufklaerer_txt.text=("Stimmt leider nicht! "+shuffledArray[0]["falsch2_bem"]);    
    //(event.target).removeEventListener(MouseEvent.CLICK, FalscheAntwort1);
    //(event.target).removeEventListener(MouseEvent.CLICK, RichtigeAntwort);
    Aufklaerer_Container.addEventListener(MouseEvent.CLICK, KlickIrgendwo);
}

........

//Aufklaerer_Container.addEventListener(MouseEvent.CLICK, KlickIrgendwo);     //versteckt den AufklärerContainer

function KlickIrgendwo(event:MouseEvent):void
{
    .....
    (shuffledArray.splice(0,1));
    trace("5: "+shuffledArray.length);    
    CaseVerteiler();
}
ich hab mein array schon mit verschiedenen methoden gemischt, (push&pop, concat, selbst definierte shuffle funktion, etc) doch nach ca 6-8 fragen, kommt er bei ein, zwei fragen mit der antwort durcheinander, unabhängig davon, welchen fall er zur fragen-verteilung (in die dynamischen textfelder) angewendet hat.
dies passiert allerdings wirklich nur ein, zwei mal, dann befüllt er wieder die richtigen textfelder.

da ich mittlw bediengungen aufgestellt habe, was er denn nun bei einem leeren array machen soll, kann es nicht mehr daran liegen. zumal ich die array länge 'mittrace' und es immer noch genung fragen im array hätte (und er ja auch nach den ein, zwei falsch zu geordneten wieder richtig 'weiterverteilt').

auch der debugger zeigt mir kein gesondertes verhalten auf, zig andere dinge zb das entfernen der event listener nach jedem aufruf, so dass sie stehts neu gesetzt werden, helfen auch nicht weiter...

was noch sehr komisch ist, lasse ich mir die antworten tracen
PHP:
trace("Richtig: "+shuffledArray[0]["antwort"]);
trace("Falsch1: "+shuffledArray[0]["falsch1"]);
trace("Falsch2: "+shuffledArray[0]["falsch2"]);
ordnet er sie hier immer richtig, d.h. lediglich beim befüllen macht er probleme....

ich bin mit meinen anfänger-skillz wirklich am ende, vllt könnt ihr(um nich direkt adcosmos zu schreiben :D ) mir helfen!

EDIT: nach ein bischen spielerei habe ich gemerkt, das wenn er nur den default case hat, er die textfelder immer richtig befüllt... ??!!
 
Zuletzt bearbeitet:
A

ADcosmos

Guest

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

Hi,

1. Es scheint deine num-Variable hat nicht den korrekten Wert (1, 2, 3, 4, 5)

Dementsprechend versuch einmal anstatt
Code:
var num=Math.round(Math.random()*5);
das zu schreiben:
Code:
var num[COLOR="Red"]:uint[/COLOR]=Math.round(Math.random()*5);

2. Hat nichts mit dem Src-Code zu tun: Was ist eigentlich antwort_bem, falsch2_bem, falsch3_bem? Beziehungsweise, was enthalten diese Objekte (Das es Text ist, ist mir klar, aber: Ist der Text immer verschieden, oder für jede Antwort gleich)


MFG ADcosmos [bitte die ersten zwei Buchstaben groß schreiben ;) ]
 

noob69

Noch nicht viel geschrieben

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

hallo ADcosmos,

also erstmal, danke dass du immer noch nicht genug hast

an der num-Variable liegt es leider nicht....

bei den antwort_bem, falsch1_bem und falsch2_bem handelt es sich um bemerkungen bzw erklärungen warum die frage falsch oder richtig war. das sieht dann zb so aus

HTML:
<id frid="22">
    <frage>In welchem Fall wirst du aus dem Chat rausgeschmissen? Du wirst aus dem Chat geschmissen, wenn…</frage>
    <antwort>…du die anderen im Chat beleidigst oder beschimpfst.</antwort>   <antwort_bem>Wenn ein Kind andauernd andere beleidigt und beschimpft, muss es den Chat verlassen. Wenn dich jemand beleidigt, ignoriere das einfach. Der/die Chat-ModeratorIn wird sich darum kümmern.</antwort_bem>
    <falsch1>…du höflich und freundlich bist.</falsch1>
    <falsch1_bem>In den Chat-Regeln steht, dass du höflich und freundlich sein sollt, deshalb wirst du ganz bestimmt nicht aus dem Chat geschmissen! :-) Wenn du andere aber beleidigst oder beschimpfst, musst du den Chat verlassen.</falsch1_bem>
    <falsch2>…wenn du länger als 10 Minuten nichts schreibst.</falsch2>
    <falsch2_bem>Schreibst du eine Weile mal nichts im Chat, dann macht das nichts. Du bleibst trotzdem eingeloggt :-) Beleidigst oder beschimpfst du andere aber, dann kann es sein, dass du den Chat verlassen musst.</falsch2_bem>
</id>

der text ist also immer verschieden.
nachdem die frage gestellt worden ist und man sich für eine antwort entschieden hat, lasse ich entsprechenden hinweis danach (im Aufklaerer_Container.Aufklaerer_txt.text ) 'aufplopppen'....


hast du evtl eine idee wie ich die 'caseverteilung' optimieren kann? ich gehe stark davon aus, dass dort der fehler passiert (auch wenn ich nicht weiß warum..)
 
Zuletzt bearbeitet:
A

ADcosmos

Guest

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

Hi,

Ideen zur Verbesserung:

1. Noch einmal von vorne beginnen und das Prinzip Model-View-Controller umsetzen (zu mindestens etwas). So .

2. Du wirst 1. nicht umsetzen, da es mehr Arbeit macht. Also eine etwas andere Art:
Code:
var originalArray:Array = new Array();
var shuffledArray:Array=new Array();
var questObject:Object;//das aktuelle Quest-Object
var punkte:Number=0;

var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("questdata1.xml"));// Pfad zur Php Datei
loader.addEventListener(Event.COMPLETE, handleComplete);// Eventhandler zum auffangen der Antwort

Antwort1_Container.mouseChildren=false;//Deaktiviert das innere Textfeld
Antwort1_Container.buttonMode=true; //MC wird asl Schaltflaeche sichtbar (Handcursor)
Antwort2_Container.mouseChildren=false;//Deaktiviert das innere Textfeld
Antwort2_Container.buttonMode=true; //MC wird asl Schaltflaeche sichtbar (Handcursor)
Antwort3_Container.mouseChildren=false;//Deaktiviert das innere Textfeld
Antwort3_Container.buttonMode=true; //MC wird asl Schaltflaeche sichtbar (Handcursor)

//nächste Zeile hierher verrschoebven, stadn vorher nah am Ende
Aufklaerer_Container.addEventListener(MouseEvent.CLICK, klickIrgendwo);

function handleComplete(event:Event):void{
	var xml:XML=XML(event.target.data);
	for each (var item in xml.quest){
		var obj=new Object();
		obj.frage=item.frage;
		obj.antwort=item.antwort;
		obj.antwort_bem=item.antwort_bem;
		obj.falsch1=item.falsch1;
		obj.falsch1_bem=item.falsch1_bem;
		obj.falsch2=item.falsch2;
		obj.falsch2_bem=item.falsch2_bem;		
		originalArray.push(obj);
	}
	
	for( var i:uint=0; i<originalArray.length;i++){
		shuffledArray.push(i);
	}
}

/*_____________________ZufallsArray In Container_______________________*/
/////////////////////////////////////////////////////////////////////////
function caseVerteiler(){
	var i:uint=0;
	if (shuffledArray.length==0){
		for( i=0; i<originalArray.length;i++){
			shuffledArray.push(i);
		}
	}
	
	//Zufalls-Frage holen
	var index:uint=Math.random()*shuffledArray.length;
	questObject=originalArray[shuffledArray[index]];
	shuffledArray.splice(index,1);
	
	//Frage stellen
	Frage_Container.Frage_txt.text=(questObject.frage); //frage immer im gleichen MC
	
	//Wenn noch kein EventListener, dann wird er erstellt.
	if (!Antwort1_Container.hasEventListener(MouseEvent.CLICK)){
		Antwort1_Container.addEventListener(MouseEvent.CLICK, spielerHatGeantwortet);
		Antwort2_Container.addEventListener(MouseEvent.CLICK, spielerHatGeantwortet);
		Antwort3_Container.addEventListener(MouseEvent.CLICK, spielerHatGeantwortet);
	}
	//Zufaelliges Setzen der Antworten
	var antwortArray:Array=new Array(Antwort1_Container.Antwort1_txt, Antwort2_Container.Antwort1_txt, Antwort3_Container.Antwort1_txt);
	var ar:Array= new Array(questObject.antwort, questObject.falsch1, questObject.falsch2);
	
	for (i=0; i<ar.length;i++){
		var rand:uint=Math.floor(Math.random()*antwortArray.length);
		antwortArray[rand].text=ar[i];
		antwortArray.splice(rand,1);
	}
}
/////////////////////////////////////////////////////////////////////////

function spielerHatGeantwortet(e:MouseEvent):void{
	var antwort=e.target.Antwort1_txt.text;
	if (antwort==questObject.antwort){
		Aufklaerer_Container.Aufklaerer_txt.text=("Richtig! "+questObject.antwort_bem);
		PunkteZaehler_MC.PunkteZaehler_txt.text=(++punkte +" Punkte"); 
	}
	if (antwort==questObject.falsch1){
		Aufklaerer_Container.Aufklaerer_txt.text=("Richtig! "+questObject.falsch1_bem);
	}
	if (antwort==questObject.falsch2){
		Aufklaerer_Container.Aufklaerer_txt.text=("Richtig! "+questObject.falsch1_bem);
	}
	Aufklaerer_Container.visible=true;
}

/////////////////////////////////////////////////////////////////////////
function klickIrgendwo(event:MouseEvent):void{
	Aufklaerer_Container.visible=false;
	caseVerteiler();
}

Ich hab mich an deinem Src-Code gehalten, aber beim Zufall meine Index-Variante (von oben, Post2) genutzt. Und den Src-Code kompakter gemacht.

WICHTIG!
Antwort1_Container.Antwort1_txt wird zu Antwort1_Container.Antwort1_txt
Antwort2_Container.Antwort2_txt wird zu Antwort2_Container.Antwort1_txt
Antwort3_Container.Antwort3_txt wird zu Antwort3_Container.Antwort1_txt

Beachte die Zahl 1 vor _txt. Die sollte eine 1 bleiben.

Schön wäre es auch variablen und Methoden klein zu schreiben. Das hab ich hier aber NICHT "korrigiert".

Wenn noch Fragen sind, stell Sie.

MFG ADcosmos
 

noob69

Noch nicht viel geschrieben

AW: 'Sammel'Array für bereits gestellte Quiz-Fragen die nach Zufall ausgelesen werden

ne, sollte sich erledigt haben... alles läuft endlich wie es soll...tauchen auch keine fehler mehr im späteren quizverlauf auf :) falls ich das ganze mal öffentlich mach, gibts ne beerware lizenz auf dich :):D
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.621
Beiträge
1.538.378
Mitglieder
67.545
Neuestes Mitglied
helenkitina
Oben