Skip to main content

ティラノスクリプトで for ループ [擬似]

ooq.kamui

ティラノスクリプトのタグには for ループがありません
if はありますが for はありません

そこでどうするか

わたしがやっている方法は macro 化しての再帰呼び出しです

ふつうの for 文に慣れていると案外思い浮かばない方法かもしれないので, 紹介したいと思います
ツリー構造以外のデータに再帰呼び出しを適用する発想に なかなかならないかもしれませんので

別の方法で, 例えば ティラノスクリプト公式サイトでも紹介されているこちらの plugin

https://tyrano.jp/market/item/2016

もありますが, macro 化しての再帰呼び出し法 もなかなかお手軽でお薦めです
[jump] や飛び先のラベルを追加することもありません

やりかた

プログラムの中で for ループの部分は たいていそこで一機能をなしていることが多いので, その処理に個別の名前をつけて macro 化してもさして問題はありません
スクリプトの見通しとしても悪くはなりません

例えば, キャラクター 5人分の何かの処理をしたいとき, ふつうなら 1人分の処理を 5回 for ループで回すことになりますが, この 1人分の処理 の部分は macro 化して切り出しても問題ないと思います

ただ, 今回ここで紹介する macro 化して再帰呼び出し法 で ふつうの for ループの感覚と少し異なるところは, ループ内部の処理を macro 化するのではなく, ループ制御を含めた部分が macro になるところです

以下に例で示します

[iscript]
; 次のキャラクターたちがいるとします
f.charas = ["marin", "katia", "kinoko"];
[endscript]

; ここで f.charas 配列分の何かの処理をしたいとき
; 1人分の処理を [loop_logic] として macro 化します
[macro name="loop_logic" ]

; 1人分の処理をここに書いていきます
[eval exp="console.log(f.charas[t.i])"]

; 終了部分
; カウンタをプラスして, ループを終わるか判定
[eval exp="t.i++" ]
[if exp="t.i < f.charas.length" ]
[loop_logic]
[endif]
[endmacro]

; カウンタを初期化して実行
[eval exp="t.i=0" ]
[loop_logic]

実行結果

marin
katia
kinoko

となります

1回は処理を行うので, do while 文に近いですね

よかったら試してみてください

サウンドファイルをさくさく聴きたい♬

ooq.kamui

個人や小規模サークルでゲームを作るとき, BGM や SE , あるいはボイスを選んでいく作業がなかなか大変だと思います

フリーで使用できる音源をあちらのサイトやこちらのサイトからとりあえずざっくりと, あれもこれもと目一杯ダウンロードしておいて, いざ, シーンを考える段になってから, ダウンロードしておいた大量のファイルの中から ぴったり合うものを選んでいくわけだが

それにしても多すぎる!!

いちいち iTunes に取り込んで聴いている場合でもないし
ファイルパスで見ながらどんな曲かが分かりさえすればよいのだ
もっとさくさく聴けないものだろうか

そんなあなたとわたしの悩みを解決するべくツールを作りました

デモ

https://ooq.jp/pri/tech/js/001.sound_list/sound_list.html

img

ソースファイル

http://ooq.jp/pri/tech/js/001.sound_list/sound_list.sh
http://ooq.jp/pri/tech/js/001.sound_list/sound_list.html.tpl

利用環境は mac となります

できること

あるディレクトリ配下にあるサウンドファイルをすべてリスト化して
ブラウザでさくさく聴く

設置のしかた

  1. sound_list.sh と sound_list.html.tpl を適当なディレクトリに置く
    2つのファイルは同じディレクトリに置いてください
  2. sound_list.sh のはじめのほうにある次の設定を実行環境に合わせて編集
    • サウンドファイルが置いてあるディレクトリ
    • 対象のファイルタイプ
    • 設置する html ファイルから対象ディレクトまでの相対パス
      ( よく分からない場合はとりあえず空でよい )
  3. sound_list.sh を実行する
    結果は標準出力に出ます
    リダイレクトで html ファイルとして保存してください
    ex) $ sh sound_list.sh > sound_list.html

画面の使いかた

sound_list.sh を実行して作成したファイルをブラウザで開きます
ローカルファイルとして開いても構いません

先のデモ画面を見ながら説明します
http://ooq.jp/pri/tech/js/001.sound_list/sound_list.html

ページを開くと1曲目から自動で流れはじめます

上部ボタンの説明

next  : 次の曲へ進みます
loop : ループ再生します
intro : イントロの 3.5秒くらいで次の曲に移ります
デフォルトで on になっています
off にすれば以降も聴けます

あとはだいたい分かると思います

デモのようにウェブサーバにあげるなどして http 経由で見れば, ブラウザを一度閉じたあとでも, 前に聴いていた続きから聴けます
localhost でも大丈夫だと思います
単に local ファイルとして見ている場合は cookie が使えないため前の続きからは聴けません
それ以外の機能は同じです

プログラムの説明

プログラムの学習用に中身の説明もしたいと思い, コードの中にコメントで記述していたのですが, シェルスクリプトのほうだけで力尽きました..

javascript 部分についてはまたの機会に
とりあえずソースは掲載しておきます

sound_list.sh

説明をコメントで記述しています

{{< gist ooq-kamui 911b103603be9dcf3367c76ad7fddd41 >}}
sound_list.html.tpl
{{< gist ooq-kamui 20622471d4431d03398a79452d97d635 >}}

音源ファイル提供元

Pocket Sound         http://pocket-se.info
back-ground.biz http://back-ground.biz
music is vfr http://musicisvfr.com
無料効果音で遊ぼう! http://taira-komori.jpn.org
On-Jin http://on-jin.com
効果音ラボ http://soundeffect-lab.info
くらげ工匠 http://www.kurage-kosho.info
DOVA-SYNDROME http://dova-s.jp

以下は細かいことなので興味を持ってくださった方のみへ

細かいことをいうと loop と intro が両方 on のときは intro が優先され, 3.5秒で次の曲に進みます
同じ曲の冒頭 3.5秒を繰り返すわけではありません
もともと長さが 3.5秒未満の曲の場合, 3.5秒間は同じ曲を繰り返し, 3.5秒経ったところで次の曲へ進みます
ボタン名から考えるとちょっと違和感があるかもしれませんが, このツールの目的としてはまあこれでいいかなと思い, こうしています

冒頭 3.5秒を繰り返し聴きたい需要はたぶんあまりなく, もし冒頭を何回かよく聴いてみたい曲があったら頭の 10秒ぐらい聴いて 自分のタイミングで先頭に戻るほうが自然

loop 機能の目的は 同じ曲の終わりとはじめのつながりに違和感がないかを確認するため ゲームの bgm はループ再生されるのが基本なので その確認のためです

intro 機能を正確にいうと イントロのみを聴いて次に進む なのでボタン名も intro & next にするとより正確なのだが表示上の短縮のため intro としている感じです

両方 on のときはどちらを優先するかといった細かい挙動を ユーザーが自由に設定できるようにするのが一番よいと思いますが, そこまで作る時間は取れそうにないのでした..

my .vimrc

ooq.kamui

やっぱり vim 使えたほうが 便利かなと思い, 数ヶ月前から 使い始めました
最初に比べれば だいぶ慣れてきたかな

他のPC で使いたいときがあるので, 自分の copy 用に up

慣れるまでは mac の キーバインドに寄せておいて
習熟に合わせて vim 本来の機能を復活させていく系の途中段階 という感じのものです

随時更新になります

https://github.com/o-o-q/vimrc/blob/master/.vimrc

apache conf memo

ooq.kamui

ちょっとした自分用のメモです..

<Directory "/Users/kamui/Sites">
AddType text/html .shtml .html
AddHandler server-parsed .shtml .html
Options Indexes MultiViews FollowSymlinks Includes
AllowOverride all
Require all granted
</Directory>