重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

何度もすみません。今度は変数の受け渡しの質問なのですが
動的に配置したボタン(ムービークリップへの埋め込み)を押したときに、PHPに変数を送りたいです。
参考にしているソースだと

function test(id, namae, title, comment, oya_x, oya_y, x, y, midoku, writer, user_id)
{
this.id = id;
this.namae = namae;
this.title = title;
this.comment = comment;
this.oya_x = oya_x;
this.oya_y = oya_y;
this.x = x;
this.y = y;
this.midoku = midoku;
this.writer = writer;
this.user_id = user_id;
}
bbs_data = new Array();
<<中略>>
for(i = 0 ; i < len ; i++)
{
 bbs_data[i] = new test(get_data[0 + i*11], get_data[1 + i*11], get_data[2 + i*11], get_data[3 + i*11], get_data[4 + i * 11], get_data[5 + i*11], get_data[6 + i*11], get_data[7 + i*11], get_data[8 + i*11], get_data[9 + i*11], get_data[10 + i*11]);
x = get_data[6+i*11] * 1;
<<中略>>
this.attachMovie("star_sq_bl",theName, i, {id:bbs_data[i].id, namae:bbs_data[i].namae, title:bbs_data[i].title, comment : bbs_data[i].comment, midoku:bbs_data[i].midoku, user_id:bbs_data[i].user_id});

で動いているそうです。
それを参考にためしで

function go(atai)
{
this.atai = atai;
}
ddgo = new Array();
for(d = 0; d < 6; d++)
{
ddgo[d] = new go( d );
}
<<中略>>
this.attachMovietable,to,indent,atai:table.atai} );

としてみたのですがうまくいきません。
ボタンには
this.getURL("http://spike.hit.dj.kit.ac.jp/~morioka/System/te … "Post");

が入っています。どこが悪いのでしょうか

A 回答 (3件)

様々な要因が複雑に絡み合っているので、


一度設計を見直すのが宜しいと思います。
恐らく、各機能を抽象的な部品化するのが問題をとく鍵かと。

 個々のスレッドオブジェクト(以下objS)情報は、
ダイナミックテキスト(以下D_TXT)にでも保持してもらい
objSのプロパティ値を取得すれば、同一タイムライン上なら
変数のスコープに悩まされる事はないかと思います。

 objSの座標移動は
_x,_y等のプロパティ値を変化させるだけ!の関数を用意し
onEnterFrame内で関数にobjSのインスタンス名を渡すなど。
とにかく、objS複製と座標移動は別々に関数化しておく。

 PHPに送りたい情報群を格納する入れ物(以下objNow、値は空)を用意し
onSetFocusで現在フォーカスがあたっているobjS内のD_TXTから、
情報群をobjNowに格納してあげる。
(onSetFocusではなくhitTestでもよいかも)

 フォーカスがあたっているobjSがonPressされたら、
objNowから情報群を取得し、
LoadVars(必須)のインスタンスに格納し、
sendなり、sendAndLoadしてあげる。
 多分、スレ番号を送ったら、PHPでDBやTEXTから情報を取得し
Flashに返してあげると思うので、やっぱりsendAndLoadかな。

onPressというイベントハンドラがForループに入っている
のが最も違和感を感じます。
    • good
    • 0
この回答へのお礼

 何とか解決しました。ありがとうございました。

お礼日時:2005/12/01 22:28

/********************************


getURLではブラウザが開きますが、良いのでしょうか?
sendAndLoadで送・受信しては?
(ごみがあるのでまだ未完成)
PHP側
#をセパレータに使わない方法も検討されては?
if($_POST['isRequest']=="myswf"){
$sNum="1#2#3#4#5#6#7";
$sID="1#2#3#4#10#11#12";
$sMother="1#1#1#4#4#10";
print(urlencode($sNum."&".$sID."&".$sMother));
}
実行結果
1#2#3&1#2#3&1#1#1
となり、これをFlash側で
tableNo[0]=1
tableNo[1]=2
tableNo[2]=3
とする
********************************/
urlPHP = "http://example.com/test.php";
function setArr(sVarName, aParam, sSeparator) {
set(sVarName, aParam.split(sSeparator));
}
var lv = new LoadVars();
// このSWFからのリクエストである事をPHPに知らせる
lv.isRequest = "myswf";
// onDataで変数名=値形式以外でも取得できる
lv.onData = function(data) {
if (data.length > 0) {
buf = unescape(data).split('&');
setArr("tableNo", buf[0], "#");
setArr("tableID", buf[1], "#");
setArr("motherID", buf[2], "#");
trace("OK");
} else {
trace("でーたなし");
}
};
// デフォルトでPOSTとして送受信
lv.sendAndLoad(urlPHP, lv);
/*******************************
この取得した値で、ボタンを複製する部分は省略
その複数あるボタンでどんな変数をPHPに送るのか不明
ですが、sendAndLoadがわかれば問題なし?
*******************************/
_root.oya_mc.ko1_btn.onPress = function() {
// ここに上記のような送受信するコードを記述
//lv.resendVar="でーた";
// 等々・・・・
};
this.stop();

この回答への補足

 何度もすみません、もう少し補足させてもらいます。作っているのは動的にスレッドオブジェクト(ボタンといっていたものです)の場所を動かす掲示板です。スレッドはテーマ別に分かれており、テーマを選ぶとそのテーマに関するスレッドが、その中身の情報(参加人数や発言数、スレッド番号など)によって動的に配置されます。
 そのスレッドオブジェクトをクリックすることで、別のフレームにそのスレッドの情報を送り、中身を表示させるようにしたいのです。
 教えていただいた方法ではうまくいかなかったので、別の方法でやってみたところ、値は遅れたのですがForループでまあしているために最後の値しか遅れません。スレッドごとのスレッド番号を送るにはどうすればいいでしょうか?
現在のソース

this.tablemc();
function tablemc(){
MatherX = new Array();
MatherY = new Array();

for(t = 0; t <= Tables; t++){
var depth = t;//this.getNextHighestDepth();
var x = 60 * Children[t];
MatherX[TableID[t]] = x;
var y = 60 * Indent[t];
MatherY[TableID[t]] = y;
var props = {_x:x, _y:y};
//var Line[] = props;
this.moveTo( MatherX[MotherID[t]] ,MatherY[MotherID[t]])
this.lineTo(x,y);
var mcname = "Tobj" + depth;
var table ="Tobj" + TableVoice[t] + TableJoin[t];//TableNo + TableNo;
this.attachMovie(table,mcname, depth);
test.atai = mcname;
this[mcname]._x = x;
this[mcname]._y = y;
trace("table="+table);
trace("mcname="+mcname);
trace("depth="+Indent[t]);
trace("props="+table_data[t]);
//trace("voice"=TableVoice);

this.onPress = function(){
trace("movie")
test.send("http://spike.hit.dj.kit.ac.jp/~morioka/System/te … "Post");
}
}
}

補足日時:2005/11/30 19:37
    • good
    • 0

とりあえず、参考にされているソースは忘れて。



Flash側にどのような項目がいくつあり、
PHP側でどんな変数名で受け取りたいのか示してください。

ところで、traceにてボタンクリックされている事を
確認できてますか?

Flashのバージョンは?

ということで、補足要求。

この回答への補足

説明不足ですみません
Flashは8を使っています

ボタンのクリックは確認できており

var atai = 1;
this.getURL("http://spike.hit.dj.kit.ac.jp/~morioka/System/te … "GET");

ではPHPで値が受け取れていることを確認できました。

今は試している状態なので、PHP側には[atai]という変数で受け取っています。
実際には

TableNo = tableNo.split("#");
TableID = tableID.split("#");
Children = children.split("#");

でPHPからとった値(中身は)
tableNo=1#2#3#4#5#6#7&tableID=1#2#3#4#10#11#12&motherID=#1#1#1#4#4#10
をforループで書くムービークリップに入れてもう一度それをクリックすることでPHPに返したいと思っています。
つたない説明ですみません。よろしくお願いします・

補足日時:2005/11/29 23:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!