2016-05-28 13 views
0

Ich habe versucht, eine Mod für Scratch zu erstellen, die API der Website verwenden würde, um Informationen über Benutzer zu ziehen. Das Problem ist, dass ich es in zwei Blöcke brechen musste. (Diese Blöcke funktionieren, indem sie Funktionen aufrufen, die auf einer Tabelle mit Blocknamen und Funktionsnamen basieren, und übergeben die Argumente.) Ich habe es eingerichtet, wo der erste (der primAskAboutMe aufruft) die Informationen aus der API lädt und wann Wenn die Informationen geladen werden, kann der Benutzer den zweiten Block (der primReportAboutMe aufruft) verwenden, um den Wert zurückzugeben. Das Problem ist, dass ich den zweiten Block nicht bekommen kann, um eine Antwort zurückzugeben.Aktionsskript: API-Mod kann nicht in Scratch funktionieren

Entweder versuche ich Informationen falsch zu bekommen (was möglich ist, weil ich ActionScript/Flash zum ersten Mal benutzt habe), oder ich verstehe wirklich nicht, was ich bin tun.

* Hinweis: Original Scratch Repository. Dieser Code würde in src/primitives/Primitives.as gefunden werden (aber nicht, weil ich das noch nicht in mein eigenes Repository hochgeladen habe, weil ich mir nicht ganz sicher bin, wie).

protected var resultAM:String; 

    protected function primAskAboutMe(b:Block):void { 
var user:String = interp.arg(b, 0); 
    var loader:Loader = new Loader(); 
    var url:String = 'http://www.api.scratch.mit.edu/users/'+user; 
    var urlReq:URLRequest = new URLRequest(url); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteAboutMe); 
    loader.load(urlReq); 



} 
protected function onCompleteAboutMe(e:Event):void{ 
    //resultAM = e.target.data; 
    resultAM="foo"; 
    } 

protected function primReportAboutMe():String{ 


return resultAM; 


} 
+0

Jeder? Hat das eine Bump-Funktion? Hellooooo? – BKFighter

+0

Was ist dein Scratch-Skript? Möglicherweise sind die Daten noch nicht geladen, wenn Sie versuchen, darauf zuzugreifen. Klicken Sie im obigen Beitrag auf Bearbeiten, um den Eintrag hinzuzufügen, und antworten Sie dann auf meinen Kommentar. – Scimonster

+0

Nein, es gibt keine Bump-Funktion. Sie erhalten eine Antwort, wenn ein ** Freiwilliger ** Lust hat, sich mit Ihrer Frage zu befassen. Sie können also den zweiten Block nicht dazu bringen, eine Antwort zurückzugeben "_, was bedeutet das genau? Sie erhalten eine Zeichenfolge, aber es ist leer? Oder meinst du, du kannst die Funktion überhaupt nicht ausführen? Bevor Sie die Zeile 'return resultAM; ausführen, fügen Sie die Zeile' trace ("Ergebnis AM ist:" + resultAM); '. Was sagt es über das Ergebnis? –

Antwort

0

Das Problem ist, dass ich nicht den zweiten Block eine Antwort zurück zu bekommen.

Ich denke es ist, weil Sie keinen Empfänger für das zurückgegebene Ergebnis festgelegt haben. Wenn Sie eine Berichtszeichenfolge erstellen und dann wie str_Report = primReportAboutMe(); aktualisieren, wird der Text resultAM in str_Report zurückgegeben.

Hier ist ein kleines testbares Beispiel. Vielleicht hilft es Ihnen in gewisser Weise ... Denken Sie daran, seit primReportAboutMe String-Daten gibt es muss verwendet werden, um einige String Variable zu aktualisieren.

var resultAM:String = ""; 
var checkResult:String = ""; 

resultAM="foo"; 

checkResult = primReportAboutMe(); //# update this String with function returned String 
trace ("Check Result is : " + checkResult); //# shows... Check Result is : foo 

function primReportAboutMe():String 
{ 
    return resultAM; //# returns a String's current value 
}