二十二歩目 お絵描きソフトを作る(2)
〜描画速度の問題〜
いやー、前回は長かったね(すみましゅん)
さてとウイルスの問題だっけ?(違うって)
そうか お絵描きソフトを使って マウスのボタンをずーっと押して
マウスを動かしてるのに こうなっちゃう問題だったね
みんな ちょっと考えてくれ
なんでこうなるの!
・・・・・考えた?
実はこれはHSPのプログラムの遅れが原因だったのです
前のプログラムの絵をかく部分を見てみよう
repeat ;繰り返しの始め getkey key,1 ;キー番号1のキーが押されたらkeyに1を入力 if key=1:pset mousex,mousey ;keyが1だったら x座標mousex,Y座標mouseyの位置に ;1ドットの点を表示 await 1 ;待つ loop ;repeatヘ戻る |
これが絵を書く部分だね(screen以外は全部だ)
無限に繰り返して繰り返すたびにマウスの左クリックをチェックして
左クリックがされていたらマウスの位置に1ドットの点を描く・・・
実はこれ自体が問題らしいのです!
〜問題を解くかぎ〜
何が問題かと言うとこう言うことだ(この1ドットの点は拡大したものだと思って)
プログラムの実行と画面の状態の流れを書いてみました
まず 上にあるプログラムを実行します ※マウスの左クリックをずっとしているものとします 最初にrepeatが実行され(画面にえいきょう無し) 左クリックをしているのだから getkey key,1が実行されkeyには1が入ります |
|
次にif key=1でkeyは1だからif文は成立(:より右が実行)して pset mosex,mousey が実行されて マウスの矢印の位置に1ドットの点が描画されます |
|
次に await 1 が実行されて、それから loop で repeat に戻ります そしてまた同じように、左クリックをしているのだから getkey key,1が実行されkeyには1が入ります マウスは右下へと動かしてます |
|
次にif key=1でkeyは1だからif文は成立(:より右が実行)して pset mosex,mousey が実行されて マウスの矢印の位置に1ドットの点が描画されます こんな 同じことを何回も繰り返しつずけます |
さあ、皆さん どこをどうすれば良いと思いますか?
ちゅうか どこが悪いと思いますか?
ずっとマウスを押してるのだからマウスの通ったところに点を打たないといけないのに
マウスのボタンをずーっと押してマウスを動かしてるのに、
点と点との間には すきまが・・・
解決法 1つ目・・・「あんまり早くマウスを動かさないようにする」
これはもっともなんですが プログラムでどうにかするんじゃ
解決法 2つ目・・・「動作速度を速くする」
これは絶対無理だ まあなるべく repeat と loop の間には
何にもいれないようにすることは大事だが
ん〜〜〜〜〜 みんな分かった?
僕は上の4つの絵を見てきづいたことがある
あの二つの点と点の間をマウスの矢印が通ったわけだよな
ちゅうことは 二つの点と点を線でむすべば良いじゃん!
われながらナイスアイディアです(どこが!)
だってもうこれ以上プログラムの速度は速く出来ない、
で、上の図を見てわかるように 点と点との間をマウスの矢印が通ったわけだから
その二つの点を線で結べば・・・
こんな風に
OKOK、この歩目ではこの解決法しかやらなかったけど
(やっても良いがページ自体が長くなるんでね)
次の歩目で解決編のプログラムをやります
つまり点と点を線で結ぶ方法をネ