メイン 迷える子羊の部屋【初心者専用】 functionのreturnについて | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
susumu | Åê¹ÆNo.45367 投稿日時: 2010-7-27 19:57 |
新米 居住地: シンガポール 投稿: 6
使用環境:
MacOSX10.5.8, Flash CS3 |
functionのreturnについて いま、Flash+PHP+MySQLを使用してスコアの制作をしています。
流れと致しましては、 ゲーム開始→ゲームの終了→名前を記入後、サブミットボタンを押すとスコアボードに切り替わり、スコアが表示されます。 その際、先にASからPHPへ名前とスコアのデータを送り一旦MySQLに挿入後、データをソートして引き出し再びASへ送りスコアボードへ表示という流れにしようと考えています。 ASからPHPへ値を渡し一旦MySQLへ格納後、再びスコアの高い順からデータを引き出しASまで引き出す事は出来ましたが、sendAndLoadを使用し送受信を行っているため受信用の関数から外へ値を渡す事が出来ません。returnを使用しましたが駄目でした。 以下ソースです。 var phpPath = "http://www.hogehoge.com/"; // 送信用LoadVarsインスタンス var send_lv:LoadVars = new LoadVars(); // 受信用LoadVarsインスタンス var recv_lv:LoadVars = new LoadVars(); //受信後の変数処理関数 recv_lv.onLoad = function(success) { if(success){ //受け取った変数の処理 recv_lv.uname0 = this.uname0; recv_lv.score0 = this.score0; recv_lv.uname1 = this.uname1; recv_lv.score1 = this.score1; recv_lv.uname2 = this.uname2; recv_lv.score2 = this.score2; recv_lv.uname3 = this.uname3; recv_lv.score3 = this.score3; recv_lv.uname4 = this.uname4; recv_lv.score4 = this.score4; recv_lv.uname5 = this.uname5; recv_lv.score5 = this.score5; recv_lv.uname6 = this.uname6; recv_lv.score6 = this.score6; recv_lv.uname7 = this.uname7; recv_lv.score7 = this.score7; recv_lv.uname8 = this.uname8; recv_lv.score8 = this.score8; recv_lv.uname9 = this.uname9; recv_lv.score9 = this.score9; trace(recv_lv.uname0); //usagi trace(recv_lv.score0); //9999 return recv_lv; }else{ errorMsg.text = 'Can not recieve the values from PHP.'; } } //送信用変数へ代入 send_lv.user = user_name.slice(0,-1); send_lv.score = user_score; //送受信 send_lv.sendAndLoad(phpPath + "getdata.php", recv_lv, "POST"); trace(recv_lv.uname0); //undefined trace(recv_lv.score0); //undefined 以上、宜しくお願い致します。 |
奥村 典史 | Åê¹ÆNo.45368 投稿日時: 2010-7-27 20:33 |
常連 居住地: 大阪府(以前:東京都府中市 / 土日は大抵京都) 投稿: 69
使用環境:
FlashCS5.5, WinXP,Win7(64bit), 単体テスト用に FlexSDK3.4, As3Unit エディター FlashBuilder5 スクリプト ActionScript3.0 |
Re: functionのreturnについて やりたいことは
http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=9487&forum=6&post_id=45193#forumpost45193 と同じと解釈しました。 違う場合は何が違うか教えていただけると 答えられると思います。 |
永井勝則 | Åê¹ÆNo.45369 投稿日時: 2010-7-28 0:26 |
職人 居住地: 白馬村 投稿: 796
使用環境:
Windows 7 :Flash CS4: 10.6.8 :Flash CS5.5 |
Re: functionのreturnについて 久しぶりにDelegateの登場かと思い、AS2.0リファレンスを引き引き、コードを書いてみましたが、違うようです。
たぶん、 trace(recv_lv.uname0); //undefined trace(recv_lv.score0); //undefined の行は、PHPからの結果が返ってくる前に実行されているので、 undefinedになっているのだと思います。 したがって、recv_lv.onLoadの呼出し後であれば、PHPからのデータは使えるようになると思います。 テストに使ったファイル php
AS2.0
AS2.0には、戻ってきたデータが、LoadVars.onLoad上でなく、メインのタイムラインの関数で扱えるようになるDelegateというクラスがあります。 今回は関係ないと思いますが、前は便利に使っていたような記憶があります。
ちなみに、フレーム1にstop();を書き、 recv_lv.onLoadか、onLoadPHP内で、データの取得を確認した後、 gotoAndStop()で、メインのタイムラインのフレームを先に送れば、 その送った先のフレームでrecv_lv.name0などのデータは使えます。
|
susumu | Åê¹ÆNo.45371 投稿日時: 2010-7-28 14:16 |
新米 居住地: シンガポール 投稿: 6
使用環境:
MacOSX10.5.8, Flash CS3 |
Re: functionのreturnについて 永井 勝則 様
ご丁寧な解説ありがとうございます。 私なりにまねをしてみましたが、やはり駄目でした。 私自身、フラッシュやASを扱うのはこれが初めてでタイムラインやそれぞれの関数の働きなども把握しきれていません。(普段はグラフィックをやっています。今回、AS以外のウェブ系プログラムが出来るので振られてしまいました。。) 以下はサブミットボタンを離した時におこるアクションです。 またスコアボードにPHPから送られてきたデータをあてがうのですがこれ自体が関数で囲まれているのでこの関数の外で使用するには先のDelegateという物を使用するのでしょうか?そうなるとますます訳が分からなくなってきます。(T-T)/ <現状> ゲームから渡ってきた名前とスコアを一度データベースへ挿入後、再度スコアの高い順にソートし引き出しまでは出来ています。recv_lv.onLoad内ではその値を確認出来ますが、それをecv_lv.onLoad関数外でも使用出来る様にしたい。 <追記> ソースをいくらいじっても同じ結果になってしまいます。 どうしても、undefinedになってしまいます。 値の取り方が悪いのでしょうか? recv_lv.onLoadの呼出し後にtraceを行ってもやはりundefinedになってしまいます。 // 送信用LoadVarsインスタンス var send_lv:LoadVars = new LoadVars(); // 受信用LoadVarsインスタンス var recv_lv:LoadVars = new LoadVars(); //Submit Action Here btn_submitScore.onRelease = function () { var phpPath = "http://www.hogehoge.com/"; var user_name = ScreenName.text; //username var user_score = _root.iUserScore; //the score if(_root.hasSubmitted == false) { if(user_name.length >= 2 && user_score > 0) { sendToPHP(user_name,user_score,phpPath); trace(recv_lv.uname0); //undefind trace(recv_lv.score0); //undefind GSScoreSubmit.unauthSubmitScore(user_score, user_score, "", user_name); _root.hasSubmitted = true; btn_submitScore.enabled = false; btn_submitScore._alpha = 50; startSound("SoundFX", "Snd_SubmitScore", 100, 1); //score board _root.mcScoresPanel.gotoAndPlay("show"); /*END*/ }else{ errorMsg.text = 'Name is empty.'; } }else{ errorMsg.text = 'Score not valid for submission'; } }; //送信関数 function sendToPHP(user_name,user_score,phpPath) { //送信用変数へ代入 send_lv.user = user_name.slice(0,-1); send_lv.score = user_score; //送受信 send_lv.sendAndLoad(phpPath,recv_lv,"POST"); }; //受信後の変数処理関数 recv_lv.onLoad = function() { //受け取った変数の処理 recv_lv.uname0 = recv_lv.uname0; recv_lv.score0 = recv_lv.score0; recv_lv.uname1 = recv_lv.uname1; recv_lv.score1 = recv_lv.score1; recv_lv.uname2 = recv_lv.uname2; recv_lv.score2 = recv_lv.score2; recv_lv.uname3 = recv_lv.uname3; recv_lv.score3 = recv_lv.score3; recv_lv.uname4 = recv_lv.uname4; recv_lv.score4 = recv_lv.score4; recv_lv.uname5 = recv_lv.uname5; recv_lv.score5 = recv_lv.score5; recv_lv.uname6 = recv_lv.uname6; recv_lv.score6 = recv_lv.score6; recv_lv.uname7 = recv_lv.uname7; recv_lv.score7 = recv_lv.score7; recv_lv.uname8 = recv_lv.uname8; recv_lv.score8 = recv_lv.score8; recv_lv.uname9 = recv_lv.uname9; recv_lv.score9 = recv_lv.score9; trace(recv_lv.uname0); //kame trace(recv_lv.score0); //4561 }; check_btn.onRelease = function() { trace(recv_lv.uname0); // ? trace(recv_lv.score0); // ? }; |
susumu | Åê¹ÆNo.45372 投稿日時: 2010-7-28 14:21 |
新米 居住地: シンガポール 投稿: 6
使用環境:
MacOSX10.5.8, Flash CS3 |
Re: functionのreturnについて piggest 様
ご回答ありがとうございます。 「何が違う」かというのも把握出来ません。恐らく初歩的な事なのでしょうが、私自身今回初めてASを扱ったものでして。。 違うと言えば、ご覧頂いたコードはサブミット用関数の中にあり、さらに現在取り出そうとしているPHPの値をその関数外で使用するという事かもしれません。 何かご教授頂けると助かります。(T_T)/ |
ひろゆき | Åê¹ÆNo.45392 投稿日時: 2010-7-29 12:27 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: functionのreturnについて
データ送信時の処理とデータ受信時の処理ともに、 赤字の部分のスクリプトを記述していますが、 赤字の部分で何をやっているのか不明なので、 あとはご自分で。 というか、GSScoreSubmitが突然出てきますが、 これは回答者に説明がなければ、何をするものか確認できません。
|
susumu | Åê¹ÆNo.45394 投稿日時: 2010-7-29 13:28 |
新米 居住地: シンガポール 投稿: 6
使用環境:
MacOSX10.5.8, Flash CS3 |
Re: functionのreturnについて mayor 様
ご回答ありがとうございます。 失礼いたしました。。。 赤字の部分はボタンを押したときの処理です。 AS用レイヤーの第1フレーム?でいいのでしょうか?そこに記述されています。 上から、
と解釈しています。 というのもこのフラッシュの制作者はASの知識は皆無なので、ソースを見る限りどこからか拾ってきたフラッシュを見た目だけ変えただけのようです。 因に赤字の部分はスコアを渡す関数の引数名を変えただけで、他はさわっていません。 以下、ボタン処理の関数です。
また、ひとまずmayor様のソースをコピペして試して見ましたが結果は同じでした。 recv_lv.onLoad内では値を見る事が出来ますがrecv_lv.onLoad外ではundefindになります。 |
ひろゆき | Åê¹ÆNo.45396 投稿日時: 2010-7-29 14:53 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: functionのreturnについて 引用:
susumuさんは書きました: スクリプトがよくお分かりにならないということであれば、 recv_lv.onLoad外で参照することはできないと考えた方がよいでしょう。 値を参照したければ、「データ受信時の処理」の箇所で、処理を行うようにしてください。 それでも、分からないということであれば、 外注もお考えになった方がよろしいのでは? [追記] 前述のスクリプトに間違いがあったので、修正。(青字部分) 赤字部分も少し修正。 (ただし、どの処理をどのタイミングで行うのかが不明確なので、要調整)
|
susumu | Åê¹ÆNo.45415 投稿日時: 2010-8-2 12:09 |
新米 居住地: シンガポール 投稿: 6
使用環境:
MacOSX10.5.8, Flash CS3 |
Re: functionのreturnについて ひろゆき様、ならびに手解きを頂きました皆様へ
ご教授有り難うございました。何とかゲームの方完成致しました。 私ももっとフラッシュを勉強したいと思います。 以上、簡単にではありますがお礼申し上げます。 有り難うございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |