あみだくじを作ってみよう9
作った本人がこれでいいだろうと思っても
他の人に使ってもらうと、色々ご意見を頂戴したりします。
毎度、管理人イガジーです。
ご意見を頂けるのは、大変ありがたいことだと思っています。
(イガジーへは、お気軽にメールフォームからご連絡ください)
そんなわけで、あみだくじも昨日で完成(完了)のつもりだったのですが
「横棒をたどる動きが速すぎる(動きが不自然)」とのご指摘を
頂戴したので、改善を試みました。
横棒は1回で描画していたのですが、棒をたどる動きの速度を一定に
保つためには、縦方向と同じく「yh2 の長さで描画して待つ」を繰り返す
ようにしなければなりません。
右方向に進む所は、次のようにすれば良いですね。
if (((j^i)&1)==0){ // 偶数上段 or 奇数下段
// 右を見る
if (i<(nn-1)){ // 右端でなければ
if (hb[i][j/2]) { // 右に横棒あり?
int nh=xlen/yh2;
for (int h=0;h<nh;++h) {
g.fillRect(x+h*yh2, yt-1,yh2 , 3);
repaintwait(wtt);
}
g.fillRect(x, yt-1, xlen+2, 3);
repaintwait(wtt);
++i;
}
}
}
横棒の長さ xlen を yh2 で割った回数ぶん(引く1)回します。
最後は、端数含めて横線を全部引きます(その方が安全で簡単なので)。
左に進む部分は、右から描画するので端数を算出しておく必要があります。
次のような感じになると思います。
else{ // 偶数下段 or 奇数上段
// 左を見る
if (i>0) { // 左端でなければ
if (hb[i-1][j/2]) { // 左に棒あり?
int nh=xlen/yh2;
int hm=xlen%yh2;
for (int h=nh-1;h>=0;--h) {
g.fillRect(x-xlen+hm+h*yh2, yt-1,yh2 , 3);
repaintwait(wtt);
}
g.fillRect(x-xlen, yt-1, xlen+2, 3);
repaintwait(wtt);
--i;
}
}
}
hm=xlen%yh2; が端数(余り)です。
これで、だいたい一定の速度であみだをたどるアニメーションが動くように
なったと思います。
この記事へのコメントはこちら