★前回の記事
現在300ms間隔で描画を行なっていますが、ピースの数が多い場合は若干遅く感じます。そこで速度調節機能を追加します。
速度設定の追加
速度の設定を追加しましょう。 下記の記事で5段階のスライダーを用意しました。
5段階それぞれに対応した速度を設定します。値は適当に決めています。
js/config.js
const config = { cellSize: 25, fieldOffset: {top: 26, left: 26}, // 追加 speedList: [10, 50, 100, 200, 500], }
初期値はhtmlからスライダーの値を読み込むのが良いのですが、今回は簡単のため、スライダーの初期値をconfig
に記載します。
js/config.js
const config = { cellSize: 25, fieldOffset: {top: 26, left: 26}, speedList: [10, 50, 100, 200, 500], // 追加 defaultSpeedLevel: 3, }
速度を格納する変数の追加
速度を格納する変数をします。初期値は、config.speedList[config.defaultSpeedLevel]
です。
setTImeout
の引数を、定義した変数に変更します。
js/solver.js
const solver = { solverStack : [], timer: null, // 追加 speed: config.speedList[config.defaultSpeedLevel], // 中略 solve : (options) => { // 中略 if (! solver.hasAllFiveTimesCells(nextField, nextEmpty)){ console.log("フィールドが5の倍数以外で分断されている") // 変更前 // solver.timer = setTimeout(() => solver.solve(options), 300) // 変更後 solver.timer = setTimeout(() => solver.solve(options), solver.speed) return } // 中略 // 変更前 // solver.timer = setTimeout(() => solver.solve(options), 300) // 変更後 solver.timer = setTimeout(() => solver.solve(options), solver.speed) }, // 中略 }
速度を変更するための関数をsolver
に定義します。
js/solver.js
const solver = { // 中略 // 追加ここから setSpeed: (speed) => { solver.speed = speed }, // 追加ここまで }
これで速度を変更する準備が整いました。
actionの登録
スライダー(speed-range
)にactionを登録します。(action.changeSpeed
はまだ定義していません)。$('#speed-range').val()
でスライダーの値を取得していますが、文字列型なのでparseInt
で数値に変換しています。
js/main.js
// 前略 const initializer = { setEvent: () => { // 中略 // 追加ここから $('#speed-range').on("change", () => { const speedLevel = $('#speed-range').val() action.changeSpeed(parseInt(speedLevel, 10)) }) // 追加ここまで }, }
actionの実装
action.changeSpeed
を実装します。config
から値を取り出して、solver
にセットします。
js/action.js
const action = { // 中略 // 追加ここから changeSpeed: (speedLevel) => { solver.setSpeed(config.speedList[speedLevel]) }, // 追加ここまで }
実行結果
実行結果です。スライダーを動かすと、ピースを置く速度が変わりました。(画像では伝わらないので、実際に動かして確かめてみてください)
以上で速度調整機能の実装ができました。
★次回の記事
★目次