2008年12月25日

完成!? KAGマクロ @sbl

「大体わかった!」 ような気がしたので――


<<任意の前景レイヤを複数まとめて

 ( [trans]一発で消せるよう)

  backlay して visible=false しておく マクロ>>


――を書いてみましたところ、

『意図したとおりに動きました!』 ので!

そちら、とりいそぎ ご報告&御紹介 申し上げます!!



なお、このマクロは

tOさん @ PBP


ご謹製の

【KAGマクロ @del】


を、ものっそいご参考にさせていただいてる――

というか、率直にいって、「一部改変版」な感じでございます。


また、その一部改変も、
桜庭さんのアドバイス・ヒントを頂戴できなければ、
とーてーも私にはできなかったかと思いますので、
ここに、お二方への最大限の敬意と謝意とを示させていただきたく存じます!


ということで、 以下の文字列クリックが、不肖 私の初マクロ!


【KAGマクロ @sbl】 


となります!!


もし、

「立ち絵をまとめて一気に選択して→任意のトランジション効果を用いて消させたいぜ!」

という方が いらっしゃいましたら、使っていただけましたら幸いです!






--------------------

(以上が主題。以下は余談)



が、
厳密には、上記 【@sbl】

の数十分前、私は

『配列の仕組み勉強用マクロ』 

【@test】


を組んでおりましたのでございます。


お手本(KAGマクロ@del)の、変数名やた何やらをあれこれ変えたりして、
『for構造文の中で、配列の情報がどのように扱われるのか』
を、システムインフォーメーションで出してみる、
という試験スクリプトです。


で。

試験結果は

[test 2]
→2 、休み

[test 3]
→3 休み

[test 2 5]
→ 2 休み 5

[test 2 5 6]
→結果、6,2,休み、5

[test 2 5 6 8])
→6,8,2,休み


となりました。

でもって、if,else構文を外してのtestを行うと、

[test 2]
→2 、tagname

[test 3]
→3 tagname

[test 2 5]
→ 2 tagname 5

・・・

という風に、ifつきの構文ではスキップされてelse以下の"休み"のメッセージをはいていたところに、
tagname といういう文字列が吐かれてきました。

【@test】においてのif〜else文は、

if(bob[i]!=='tagname')

{
System.inform(bob[i]);
}

else
{
System.inform("休み");
    }

・・・
tagnameという文字列と、bob[i]とが、“データ形・値の両方ともに一致する”ではない場合には真なので、bob[i]をシステムインフォーメーションとして表示しなさい。

一致してしまった場合は[偽]なので、else以下に従い、
休み と表示しなさい。

というものでございますので、完全にツジツマが合います!


つまり

@macro name=test
@eval exp="test(mp)"
@endmacro

で定義され、

[test 2 5]

みたいな感じで 入力されたのもが持つ配列情報・(mp)

の中には。

2 と 5 のほかに、 tagname という文字列も含まれている!

のです。


これが何故か〜 を

[tjs 配列 tagname] でググる

--------------------------------
kag.conductor.pendings.add(tag)

機能
後回しにするタグ配列にタグを追加する

引数
tag…辞書配列オブジェクト。キーtagnameにタグ名、属性名のキーに属性値を登録しておくこと  

---------------------------------

という一文が引っかかってまいりました。


ので、(多分)

[test 2 5]

みたいな感じで入力された配列(mp)は、
最初っから
tagname という 情報を含む約束になっている。

というか test(=タグ名)に相当する情報が、配列内ではtagnameという風におきかわっている

・・・みたいな感じなのかなぁ? と想像いたしました。


まぁ、その想像があっているにせよ間違っているにせよ(この後の勉強でおいおい理解できるかともおもいますが)

とにもかくにも、ずーっと意味のわからなかった、

ifで'tagname'を除外する処理の意味!

が理解でき、私は超! イキオイづきました!!


そのイキオイで、桜庭さんにアドバイスいただいたとおり、
"tjs 引数 function" とか "tjs 辞書配列" とかでググっていくと、


---------------------------

式中辞書配列

 %[ ] を使って、式中に Dictionary クラスのオブジェクトをその場で記述することができます。要素名 => 要素の値、をカンマで区切り、初期要素となる式を列挙します。たとえば、
var dic = %["a" => 1, "b" => 2, "c" => 3];

--------------------------


という記事にいきあたることが出来ました。



つ ま り!

@delにある

(大なり、小なりの記号は、ブログのご認識を防ぐため、全角で代記しています)

kag.getLayerFromElm(%["layer"=>names[i], (略

は、

「左辺の“layer”が、右辺の names[i] より大であるか等しい場合」

などという意味ではなく、

「左辺のlayerの値は、右辺の names[i] としますよ」

という意味だったのです!!!!


これが解かれば、

「だいたいわかった!」 となり→本記事冒頭に戻り、
私は

[KAGマクロ @sbl]を、わりとサクりと、思ったとおりに機能させるようになりましたのでした!

(ちなみに、sblは。soft_boys_love 
もしくは select_back_lay の、いずれかお好きな意味に
ご解釈いただけましたら幸いです!!)



・・・と、いうような次第を持ちまして、

とりあえず、
私的課題

【自分で使うマクロを作る!】

は、これで一応のクリアーといたしたく思います!!


ので、以降は

年賀状書いたりコミケ準備をしたりしながら、

第三章のプロトタイプのインターフェースや右クリックメニューなどなどの試作・試験実装などなどを、
引きつづき、がんばっていきたく存じます!!



------------------------

追記!

桜庭さんから本記事へお寄せいただきましたコメントに 「なるほど!!」と思い、

if,else構文なしの方のtest

for (var i=0; i<bob.count; i += 2)

を、

早速、

for (var i=0; i<bob.count; i++)

→二項目の処理がおわったときに、
 iに+2をするのではなく、
 +1をする


に変更してみまして、

[test 1 3 5 9 ]の結果を見ましたところ!

→1,true,3,true,9,true,tagname,test,5,true

という値が帰ってまいりました!

つまり (mp) = test[1 3 5 9] という配列は、実は

[1 true 3 true 5 true tagname test 5 true]

という・・・便宜上、縦線をつかってブロックわけすると

[1 true ┃ 3 true ┃ 5 true ┃ tagname test ┃ 5 true]

という、(言葉が正しいかわかりませんが)

「値と属性とが、二個一組になってはいっている」

っぽいのです。

ですから

「countの数は、見かけの倍存在する」

わけでございまして、ゆえに【kagマクロ @del】 では、


for (var i=0; i<bob.count; i += 2)

と、一個飛ばしでiを評価する仕組み! に作られていたのだと思います!!


これで、(多分、誤解がなければ)
お手本とさせていただきました、【kagマクロ @del】が、

「どのようにかかれ、如何に動いているのか」

が、一応はひととおり理解できたような気持ちになれて、非常にスッキリとしております!!


あらためまして、tOさん、桜庭さんに、心よりの御礼を申し上げます!! 





posted by 進行豹 at 15:10| Comment(6) | TrackBack(0) | 製作日誌
この記事へのコメント
おー、いい感じですね。お疲れ様です
補足しておくと

>test(=タグ名)に相当する情報が、配列内ではtagnameという風におきかわっている

これについては実際には
"関数(この場合の function test(mp))に渡される辞書配列mpには、タグ名がどっからともなく追加されている"みたいな認識でオーケーかと思います。

http://www.project-potato.info/sub/listup.txt
上記のテキストは『要はmpってどんなデータなのさ?』ってのを表示してくれるスクリプトですが

これを"@listup 1 2 3 4 5"として呼ぶと、

Posted by 桜庭 at 2008年12月25日 16:24
おっと、間違えて途中送信してしまいました^^;

これを"@listup 1 2 3 4 5"として呼ぶと、
"tagname : listup 1:true 2:true 3:true 4:true 5:true"
みたいな感じで表示されます。
"trueってどっから来たの?"って話ですが、
マクロの場合は具体的な値が無い場合はとりあえずtrueにしておけ、っていう具合の仕組みになっているらしいです。

ためしに"@listup 1='A' 2='B' 3"として呼ぶと、
"tagname : listup 1:A 2:B 3:true"
みたいな感じで『イコールで中身を指定した奴はその通りに、何も書いてない奴はtrueに』になるます。


ちなみに辞書配列については(書き方にもよりますが)
=>ではなく:で区切ることもあります。

var hoge = %[ "A"=>1, "B"=>2, "C"=>3 ];
みたいな書き方が常ですが、
Posted by 桜庭 at 2008年12月25日 16:28
別の関数に渡す時なんかだと
getLayerFromElm(%[layer:"base", page:"back"])
みたいな感じで用いることもあるってこってす。
Posted by 桜庭 at 2008年12月25日 16:30
>桜庭さん

 追加アドバイス、ありがとうございます!!
 配列の中身、早速test2マクロの方を
 一コ刻みに直して確認してみましたところ、
 listupマクロと同じ結果が出てまいりました!

+ 配列は 「名前と中身」 とのセットで、
 中身が空のときはtrue、 
 指定してあればその中身になる

 とのご説明を頂戴し、さらに配列についての理解が深まったように思います。

 記述方法なども「いろいろある」ことを知っておけば、今後他のtjs式をみたときに
「???」と止まってしまうまえに見当をつけることも出来そうに思いますので、
非常にタメになりますです!

『知識が深まれば省力化のためのヒントも見つけやすくなる!』

こと、今回 ようようにして実感できたように思いますので、これを励みに KAG,tjsはもちろん、他のもろもろも、制作と勉強と、平行してやっていくように出来ればいいな! とも思っております!
Posted by 進行豹 at 2008年12月25日 17:01
マクロ完成おめでとうございます。
ここ数日、これまでとは毛色の変わった日誌を興味深く
拝見しておりました。
門外漢の私から言えることとしては、Big-Birdや
Cookie-Monsterに言及なさるのであれば、
countは"C"ountが正ではなかったかということでございましょうか。

あと、かや姉キュウトでございました。
Posted by GoShu at 2008年12月26日 00:04
>GoShuさん

 マクロ完成へのお祝いメッセージ、ありがとうございます!

 正直、吉里吉里を現在進行形で弄っている方以外には、さぞや面白くない制作日誌だろうなぁ、とは自分でも思っておりましたので

(しかし! 制作日誌に書かないことには、くじけてしまいそうでもございましたので〜)

興味深くお読みくださってらしたとのこと、非常に嬉しく思っております。

ありがとうございます!

&ブーツinかや姉、キュートとお褒めいただけましたことも、素直にとても嬉しいです♪

と、“C”の件、
ご指摘いただければ、
「なんと自分はツメが甘いのだろうか!」と、
顔面蒼伯、爵然と出来ぬ気持ちでおりますです(反省

Posted by 進行豹 at 2008年12月26日 01:21
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/24750445
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック