ページ移動について
投稿者 : kazz(ntchba036080.chba.nt.ngn2.ppp.infoweb.ne.jp)
- 2011/12/17(Sat) 17:31
No.13468
|
|
|
|
|
$projectManager.loadPage()で同じページを読み込むとき、
page=$projectManager.getCurrentPageName(); でページの名前を取得して、 $projectManager.loadPage(page); とできればいいんですが、
$projectManager.getCurrentPageName()だと""つきの文字列になってしまいます。 ""をはずさないと無理なんですが、そのための命令ってありますか? valueOf()ではだめでした…valueOf()は数値のみらしいです。
|
Re: ページ移動について
投稿者 : S.Percentage(s10-14.opera-mini.net)
- 2011/12/17(Sat) 18:18
No.13469
|
|
|
|
過去のスレッドをたどれば多分あるとは思いますが、getglobalという隠し関数を使うと出来ます。 ex: page = $projectManager.getCurrentPageName(); $projectManager.loadPage(getglobal(page));
|
文字列からの変数指定(修正有)
投稿者 : リセッタ(ai126212009167.5.tik.access-internet.ne.jp)
- 2011/12/17(Sat) 18:19
No.13470
|
|
|
|
文字列で指定されたグローバル変数の値を得るには、'getGlobal()'メソッドを使います。
getGlobal(varName); // 文字列'valName'で指定されたグローバル変数の値を返す。 // 文字列の先頭は'$'から指定。
質問の場合ですと、
page=$projectManager.getCurrentPageName(); // 変数'page'にはページ名称 $projectManager.loadPage(getGlobal(page)); // (=変数名文字列"$page_XXX")が入る。
になります。
'getGlobal()'があるなら、'setGlobal()'もあります。
setGlobal(varName,v); // 文字列'valName'で指定されたグローバル変数に値'v'を設定する。 // 文字列の先頭は'$'から指定。
※ 未定義変数名を指定した場合は、新たに作成される。
※※ 'getGlobal()','setGlobal()' は、ネイティブです。オーバーライド(再定義)できません。
また、メンバー変数についても幾つか同様に隠しメソッドがあります。 (メンバー変数:普通の変数。'var'宣言をしていない、'$'が先頭についていない、 もしくは(仮)引数('function'宣言文で指定)以外の変数。) 但し、文字列から直接ではなく参照番号('0'から始まる整数)を介してのアクセスになります。 (配列をイメージすると解り易いかな?)
getValueByIndex(idx); // 参照番号'idx'で示されるメンバー変数の値を返す。 setValueByIndex(idx,v); // 参照番号'idx'で示されるメンバー変数に値'v'を設定する。 getValueCount(); // メンバー変数の個数(最大参照番号+1)を返す。 getValueName(idx); // 参照番号'idx'で示される変数名を文字列で返す。 getValueIndex(varName); // 変数名(文字列)で指定されたメンバー変数の参照番号を返す。 // 未定義変数名は'-1'を返す。
※ 配列と異なり新規の変数を作成するメソッド('add()','insert()'系)は見つかりませんでした。未定義指定時は注意。
メソッド内のローカル変数('var'宣言した変数)と(仮)引数('function'宣言文で指定)については 自分では分かりませんでした。
※※ 説明したメソッドは'Object'クラスのメソッドです。(つまり、どのオブジェクトでも使えます)
# おまけ:変数アクセス関数(文字列指定−汎用)
function getVariable(varName) { if(varName is String) { if(varName.byteAt(0)==36) { // 先頭が'$'(グローバル) return getGlobal(varName); } else { return getValueByIndex(getValueIndex(varName)); } } else return null; }
function setVariable(varName,v) { if(varName is String) { if(varName.byteAt(0)==36) { // 先頭が'$'(グローバル) setGlobal(varName,v); } else { setValueByIndex(getValueIndex(varName),v); } } }
# おまけ2:オブジェクトの変数をダンプ(一覧出力)
function dumpVariable(obj) { var i,o; if(obj==null) o=this; else o=obj; for(i=0; i<o.getValueCount(); i++) { print(o.getClassName()+"."+o.getValueName(i)+"="+o.getValueByIndex(i)); } }
|
Re: ページ移動について
投稿者 : kazz(ntchba036080.chba.nt.ngn2.ppp.infoweb.ne.jp)
- 2011/12/17(Sat) 21:43
No.13471
|
|
|
|
おお!大変わかりやすい回答をありがとうございます。 getGlobalってそういうふうに使えたのか・・・初めて知りました。 無事、使えました。 BBSをもっと探せばよかったですね…迷惑かけました。 リセッタさんの隠しメゾットの説明はかなり参考になりました。 機会があれば活用させてもらいます。
|
応用(修正)
投稿者 : リセッタ(ai126212131169.5.tik.access-internet.ne.jp)
- 2011/12/18(Sun) 03:41
No.13472
|
|
|
|
ところで現在のページ名が判っても、意味ないじゃん!って思っている人もいるんじゃないかな?
こんな風にも使えるよって応用編です。
extends SecretChar;
basePage="$page_stage"; // 基本ページ名 'stage1.cmml','stage2.cmml','stage3.cmml',….'stage10.cmml' の場合 endPage=10; // 最終ページ番号
function nextPage(jj) { // 次ページ移動 var j,page; if(jj==null) j=1; else j=jj; page=getPage()+j; if(page>endPage) page=1; // 最終ページを超えた->1ページへ // ↑ 'page=1;'を例えば'page="$page_ending";'にしてエンディングページや // '{ page=1; $gameLevel++; }'の様にして、少し手強くなって1ページから等に出来ます。 setPage(page); } function prevPage(jj) { // 前ページ移動 var j,page; if(jj==null) j=1; else j=jj; page=getPage()-j; if(page<1) page=endPage; // 1ページを超えた->最終ページへ // ↑ 'page=endPage;'を例えば'page="$page_title";'にしてタイトルページ等にもできます。 setPage(page); } function setPage(page) { // 指定ページ(Pageオブジェクト/ページ名/ページ番号)移動 if(!(page is Page)) { // pageはPageオブジェクト以外? if(!(page is String)) page=basePage+page; // 数値なら文字列化 page=getglobal(page); // Pageオブジェクト化 } $projectManager.loadPage(page); } function getPage() { // 現在ページ番号取得 var page; // ※ 注意! 'stageN.cmml'以外だと失敗します。 page=$projectManager.getCurrentPageName(); // ページ名取得 // ※ この部分に文字列変数'page'と'basePage'相当部分の比較処理を入れ、 // 不一致で'null'を返す様にするべきかも(^ ^;A return valueOf(page.substring(basePage.length())); // ページ名から'basePage'部分を外して数値化。 }
// ex) // nextPage(); // 次のページへ // prevPage(); // 前のページへ // nextPage(0); // 現在ページの再読込 // nextPage(2); // 2ページ先へ // prevPage(3); // 3ページ戻る // setPage(4); // 4ページ($page_stage4:stag4.cmml)へ // setPage($page_index); // $page_index(index.cmml)へ // setPage("$page_start"); // $page_start(start.cmml)へ // page=getPage(); // 変数'page'に現在のページ番号(整数)が返る
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー メンバー変数アクセスを使った似非配列の例です。
extends SpriteChar;
a0=0; a1=0; a2=0; a3=0; a4=0; // a[] 初期化:add()が無いから必ず行う a5=0; a6=0; a7=0; a8=0; a9=0; a="a"; b0=0; b1=0; b2=0; b3=0; b4=0; b="b"; // b[] 初期化
// 似非配列 要素 取得 // String name: 似非配列名 // int idx: 参照番号 function getFakeArray(name,idx) { name=name+idx; return getValueByIndex(getVriableIndex(name)); }
// 似非配列 要素 設定 // String name: 似非配列名 // int idx: 参照番号 // void v: 設定値 function setFakeArray(name,idx,v) { name=name+idx; setValueByIndex(getVriableIndex(name),v); }
// Ex) // for(i=0; i<10; i++) { // setFakeArray(a,i,getFakeArray(a,i)+i); // }
# ん?3次元処理用 行列計算クラス作れそうだね。少し考えてみるか。
|
Re: ページ移動について
投稿者 : kazz(ntchba036080.chba.nt.ngn2.ppp.infoweb.ne.jp)
- 2011/12/19(Mon) 01:55
No.13473
|
|
|
|
・・・すごいとしか言い様がありません(汗 ありがたく使わせてもらいます・・・
|
|