うしブログ

うしブログ

趣味で運営する、GeoGebraの専門ブログ。

(作業メモ)StartPoint要検証(2行の場合;テキスト変更時未定義問題)

(要修復)ToggleButton・RollPolygonWithoutSlipping・貯金時計・直感力トレーニング

On Update スクリプト内で「オブジェクト更新前の値」を参照する方法

設例

数値オブジェクトnを作成する。最小値1、最大値10、増分1に設定して、スライダーを作成する。

ブランクのテキストオブジェクトtext1 = ""を作成する。

いま、nのスライダーを動かす直前のnの値が、n_{previous}であったとする。そして、nのスライダーを動かした結果、nの値がn_{current}に更新されたとする。

当該更新を監視して、text1の値を以下のように設定する、nのOn Update スクリプトを作成しなさい。

"nの更新前の値は、n_{previous}でした。nの更新後の値は、n_{current}です。"

※ n_{previous}、n_{current}には、その時の具体的な数字(1,2,...,10)が入るようにせよ。

方法1

 数値オブジェクトpreviousを、以下の定義で作成する。

previous = n

そして、nのOn Update スクリプトに、以下を記述する。

SetValue[text1,"nの更新前の値は、"+previous+"でした。nの更新後の値は、"+n+"です。"]

(解説)

nに従属するオブジェクト(ここではprevious)を、nのOn Update スクリプト内で参照する場合には、当該従属オブジェクトの値は、更新前のnの値に基づいて計算された値が採用される*1。この方法は、この仕様を利用したものである。

方法2

グローバルJavaスクリプトとして、以下のスクリプトを記述する。

//グローバル変数:nの更新前の値を入れる用
var nPrevious = ggbApplet.getValue('n');

function updateText(){
  //nの更新後の値
  var nCurrent = ggbApplet.getValue('n');
  ggbApplet.setTextValue('text1', 'nの更新前の値は、'+nPrevious+'でした。nの更新後の値は、'+nCurrent+'です。');
  //nPreviousを最新の値に更新
  nPrevious = ggbApplet.getValue('n');
}

そして、nのOn Update スクリプトに、以下のJavaScriptを記述する。

updateText();

(解説)

関数updateText内で、setTextValue メソッドを、古い値のnPreviousを用いて実行する。それから、nPreviousを最新の値に更新する。この順序がポイントである。