« 【よみもの】「うしくんと話そう」第3回 まだ自己紹介のまき | メイン | 【講座】HSP3ワンポイントテクニック 第9回 »

2006年06月20日

【講座】HSPたまひよ塾 - 第12回「キャラクターの移動(2)」

さて、たまひよ塾も連載10回を越える、この時に、前回の疑問符に答えを
提示するつわものが現れました。

【メールより転載】

buffer 2 :picload "onitama.jpg"
screen 0,640,480
repeat 200
pos 2*cnt,180
gcopy 2,0,0,120,120
wait 1
color 255,255,255
if cnt!=199:boxf 2*cnt,180,2*cnt+2,180+120
loop

boxf 命令を使って、画像移動後に残る矩形の部分を白塗りしてみました。
また、画像の異動が荒いために、がくがくしていたのを
1回の移動距離を短くすることによって、動きをスムーズにしました。
また、2*cnt というように動きがなめらかになるようにした結果、
動きが遅くなりましたので、wait 10→ wait 1 として待ち時間を
短くしました。
ループの最後にも、画像の左端の一部を削除していましたので
if cnt!=199 という条件を付けました。
これでOKでしょうか。
(矢野重文さん)

矢野さん、たまひよ塾へのお便りありがとうございます。
色々と工夫しましたね。プログラムは工夫しながら作り上げていくことが
すごく大事です。
命令の位置を変えたりする試行錯誤もすてき、動きをスムーズにしようと
いう思いもナイスです。
boxf命令を使うアイデアがよかったですね。ほとんど正解です。

ではでは前回の解答編、まいりましょうか。

キャラクター画像移動時の残像を消すには、boxf命令を使って残像の残る
範囲を塗りつぶします。


画像:onitama.jpg
http://www.hspcenter.com/hsptvm/archives/onitama.jpg
(WEBブラウザで表示後、右クリックで画像を保存。)

▼サンプルスクリプト1
;----------------------------------------
buffer 2 :picload "onitama.jpg"
screen 0,640,480
color 255,255,255
repeat 50
x=8*cnt :y=180
pos x,180 :gcopy 2,0,0,120,120
boxf x,180,x+7,y+119
wait 10
loop
;----------------------------------------
一つ移動先にコピーする度に残像が残るわけですが、
さらにカンペキを目指すならこれも見えないようにすることができます。
それにはredraw命令を使います。
redraw命令は画面の更新を制御する命令です。

▼サンプルスクリプト2
;----------------------------------------
buffer 2 :picload "onitama.jpg"
screen 0,640,480
color 255,255,255
repeat 50
redraw 0
x=8*cnt :y=180
pos x,180 :gcopy 2,0,0,120,120
boxf x,180,x+7,y+119
wait 10
redraw 1
loop
;----------------------------------------
redraw 0 (描画モード0) と指定すると gcopy命令が実行されても仮想画
面を書き換えるだけで、実際の画面には反映されず、
redraw 1 (描画モード1) と指定すると、書き換えた画面が実際の画面に
も反映されます。
こうすると完璧に画像もチラつかせずに移動させることができます。

(悠黒喧史)

投稿者 usuaji : 2006年06月20日 23:12

口臭チェッカー市場