Thyme例文集

Thyme例文集

 Thyme講座を読み終わり、これからThymeをさまざまなものに応用していこうとする方のために、いくつかの例文を紹介しておく。


1.簡易なものたち

シミュレーション経過時間をリアルタイムで表示する

onCollide = (e) => { text = { "" + sim.time }; }
  • boxにこのスクリプトを書き込めば、text部分にシミュレーション経過時間をリアルタイムで表示できる。

シミュレーション経過時間をリアルタイムに表示する-2

onCollide = (e) => { text = { "" + (sim.time - sim.time % 1) }; }
  • こちらの場合は、表示されるのが「小数点以下を省いた秒数」となる。
    • ( sim.time - sime.time % 1 )の部分が「小数点以下を省いた秒数」である。

衝突相手を判断して処理を変更する

onCollide = (e) => { e.this.color = (e.other + "" == "box" ? [1.0, 0.0, 0.0, 1.0] : [0.0, 0.0, 1.0, 1.0]) }
  • 衝突相手がboxならば赤色になり、box以外ならば青色になる。

衝突相手を判断して処理を変更する-2

onCollide = (e) => { 
  e.this.color = e.other.collideSet == 1 ? [1.0, 0.0, 0.0, 1.0] : e.this.color ; (※1) 
  e.this.color = e.other.collideSet == 2 ? [0.0, 0.0, 1.0, 1.0] : e.this.color ; (※2)
  e.this.color = e.other.collideSet == 3 ? [1.0, 0.0, 1.0, 1.0] : e.this.color ; (※3)
}
  • 衝突相手が衝突判定Aのみならば赤色になり、Bのみならば青色になる。(※1、※2)
  • 衝突相手が衝突判定AとB両方を持っているならばピンク色になる。(※3)
  • もちろん、このスクリプトを書く物質はAとB両方に衝突するように設定しなければならない。
    (スクリプト案絶賛募集中)
    


2.関数例

シミュレーション経過時間を時分秒表記であらわす

scene.my.extractTime = () => {
  var := sim.time;
  hour := ( var >= 3600 ? var / 3600.0 : 0.0 );
  hour = ( hour - hour % 1.0);
  minute := ( var >= 60 ? ( var - hour * 3600.0 ) / 60.0 : 0.0 );
  minute = ( minute - minute % 1.0 );
  second := ( var - hour * 3600.0 - minute * 60.0 );
  second = ( second - second % 1.0 );
  
  "" + hour + "h " + minute + "m " + second + "s";
}
  • 小数点を含む秒数のみのsim.timeから、時間と分を切り出し、残ったものを秒とする関数だ。
  • 戻り値は「"1h 32m 15s"」のような表記になる。

3.複雑なものたち

PJsystemさんの発明したアレに似たもの


onCollide = (e) => {
  collideSet = {sim.time * 13.0 % 1 >= 0.5 ? 1 : 2}  (※1)
  e.this.text = e.other.collideSet == 1 ? e.other.text : e.this.text ; (※2)
  e.other.text = e.other.collideSet == 2 ? e.this.text : e.other.text ; (※3)
}
  • 衝突判定を「A→B→Aと変更する」を1ループとし、毎秒13回それを行っている。(※1)
    • 「sim.time % 1」という処理を行うことで秒数の小数点以下のみを導出している。
      • 判定条件を分かりやすく言うと「秒の小数点以下が(.0~.4999…)ならばfalse、(.5~.999…)ならばtrue」である。
      • つまり1秒の間に「trueの場合の処理」と「falseの場合の処理」を交互に行うことになる。
    • 「sim.time * 13」を言い換えると「13倍早く進む時間」を表現している。
      • 13倍進む時間を元に「毎秒trueとfalseの処理を交互に行う」処理を行っていることになる。
      • つまり「A→B→A」の切り替えは 1/13秒ごとに行われる。
  • 相手がA判定ならば、自分自身のtextに相手のtextを読み込む。A判定でなければ現状を維持する。(※2)
    • つまり、自分自身のtextが変更される条件は「相手がA判定」の時だけとなる。
  • 相手がB判定ならば、相手のtextに自分のtextを書き込む。B判定でないのならば現状を維持する。(※3)
    • つまり、相手のtextが変更される条件は「相手がB判定」の時だけとなる。

 これを利用する際には「A判定の四角」と「B判定の四角」に挟まれた「このスクリプトを書き込んだ四角」を用意する。
A判定B判定の二つの四角はフィクスで、スクリプトを書き込んだ四角はヒンジで、共に背景に接着しておく。

 実際に動かすとtext属性に書かれた値が「A判定の四角」→「スクリプトを書いた四角」→「B判定の四角」と伝達していく。
あたかも電気信号により情報が伝達したかのような振る舞いをするのである。



4.拡張的な技術



コメント欄

  • "" + (time - time % 1) - 384 2010-08-23 11:09:47
  • 失敗しました・・・。「{"" + (time - time % 1)}」とtext欄に書き込めば、時間を一秒間隔で表示できます。どうでしょうか? - 384 2010-08-23 11:11:48
  • 発案ありがとうございます384さん、追記しておきました。 - 作成主 2010-08-26 07:34:38
  • onCollide=(e)=>{ e.this.controllerAcc := e.pos(0) - App.mousePos(0) ; text = {"" + e.this.controllerAcc } } - WING7 2012-01-08 23:02:07
  • マウスのX軸と自分の距離が測れます。 - WING7 2012-01-08 23:02:59

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年08月26日 07:33
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。