C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[18]: PictureBox で画像を動かす [1]


(過去ログ 171 を表示中)

[トピック内 25 記事 (21 - 25 表示)]  << 0 | 1 >>

■98492 / inTopicNo.21)  Re[14]: PictureBox で画像を動かす
  
□投稿者/ 星は昴 (27回)-(2021/11/19(Fri) 13:38:28)
No98483 (魔界の仮面弁士 さん) に返信
No98489 (KOZ さん) に返信

 お二人のコード確認させていただきました。

 すばらしい!

 ちらつきのない動きでした。KOZ さんのコードはちょっと長いのでまだよく理解できていません。

 魔界の仮面弁士 さんのコードでは

  int offset = 3;

がポイントだと思うのですが、この働きと、値を 3 としている理由を教えていただけたら幸いです。





引用返信 編集キー/
■98493 / inTopicNo.22)  Re[15]: PictureBox で画像を動かす
□投稿者/ 魔界の仮面弁士 (3224回)-(2021/11/19(Fri) 14:29:15)
No98492 (星は昴 さん) に返信
>  魔界の仮面弁士 さんのコードでは
>   int offset = 3;
> がポイントだと思うのですが、この働きと、値を 3 としている理由を教えていただけたら幸いです。

いや別に、offset は 1 でも 30 でも何でも良いです。


タイマーの Interval を 16 にしているのは、自分が使用している PC だと、
タイマーの分解能が、せいぜい秒間 60 回程度であるためです。
秒間 10 回程度ならば、Interval = 100 に設定しますよね。

TV のアニメーションだと、1 コマは秒間 24 回程度なので、
実際にはここまで細かくする必要は無いとは思います。
星は昴さんの Interval は幾つに設定されていますか?


で、その 1 コマの間に何ピクセル水平移動させるか…というのが int offset です。
値がマイナスの時は左方向に、プラスの方向は右方向に移動させています。

offset の値を大きくすれば、移動速度が速くなり、小さくすれば遅くなります。
ただしコマ数(fps) は変わらないので、offset を増やし過ぎると、
テレポートしている感じが強くなります。

また、Interval が大きくなれば、カクついた感じの動きになります。


ただ、offset や Interval がどうであれ、元質問の『ちらつき』は起きえないはずなんですよね。
ダブルバッファを意図的にオフにしていれば、相当ちらつくことにはなりますが…。
(描画数の多い KOZ さんのサンプルだと、特に顕著になるはず)
引用返信 編集キー/
■98498 / inTopicNo.23)  Re[16]: PictureBox で画像を動かす
□投稿者/ PATIO (23回)-(2021/11/24(Wed) 14:40:13)
2021/11/24(Wed) 14:47:17 編集(投稿者)

No98493 (魔界の仮面弁士 さん) に返信
> ■No98492 (星は昴 さん) に返信
>> 魔界の仮面弁士 さんのコードでは
>>  int offset = 3;
>>がポイントだと思うのですが、この働きと、値を 3 としている理由を教えていただけたら幸いです。
>
> いや別に、offset は 1 でも 30 でも何でも良いです。
>
>
> タイマーの Interval を 16 にしているのは、自分が使用している PC だと、
> タイマーの分解能が、せいぜい秒間 60 回程度であるためです。
> 秒間 10 回程度ならば、Interval = 100 に設定しますよね。
>
> TV のアニメーションだと、1 コマは秒間 24 回程度なので、
> 実際にはここまで細かくする必要は無いとは思います。
> 星は昴さんの Interval は幾つに設定されていますか?
>
>
> で、その 1 コマの間に何ピクセル水平移動させるか…というのが int offset です。
> 値がマイナスの時は左方向に、プラスの方向は右方向に移動させています。
>
> offset の値を大きくすれば、移動速度が速くなり、小さくすれば遅くなります。
> ただしコマ数(fps) は変わらないので、offset を増やし過ぎると、
> テレポートしている感じが強くなります。
>
> また、Interval が大きくなれば、カクついた感じの動きになります。
>
>
> ただ、offset や Interval がどうであれ、元質問の『ちらつき』は起きえないはずなんですよね。
> ダブルバッファを意図的にオフにしていれば、相当ちらつくことにはなりますが…。
> (描画数の多い KOZ さんのサンプルだと、特に顕著になるはず)

魔界の仮面弁士さんのコードを見て気になったのですけれど、

pictureBox.BackgroundImageに黒い画像を設定しているとか
pictureBoxの背景色に黒を設定しているとかしている場合に
ビットマップ上でも黒い背景と白い球を描画した状態で
張り付けるようなことをするとボールがちらつきそうです。
一旦は全て黒くなってからボールがのった画像がのる事になるので
ボールの部分は、白⇒黒⇒白という描画になってちらつきが起こる可能性があります。

ちらつかせない為には一回の画面の切り替え処理の中で白⇒黒か黒⇒白以外の変化が
起こらないようにする必要があるので可能性としてはその位かなと思います。

ちなみにですが、上記のように画面上の変化が一方向のみの場合、カクカク感は出てもちらつきは起きません。
白⇒黒⇒白と変化する場合、途中の黒が明らかに無駄なのでこれが無くなれば、人の目には変化が無かったと認識されます。
引用返信 編集キー/
■98501 / inTopicNo.24)  Re[17]: PictureBox で画像を動かす
□投稿者/ KOZ (174回)-(2021/11/24(Wed) 22:34:42)
No98498 (PATIO さん) に返信
> 一旦は全て黒くなってからボールがのった画像がのる事になるので
> ボールの部分は、白⇒黒⇒白という描画になってちらつきが起こる可能性があります。

PictureBox の場合、WM_ERASEBKGND は無視され、WM_PAINT 処理中に
BackColor による塗りつぶしも、背景の描画も、イメージの描画も
バッファに対して行われ、画面への転送は1回限りです。

質問者さんが提示されたコードを実行してみても発生しないので
第三者が実行してみて、チラツキを確認できるコードが提示されない限りは
解決不能でしょう。

引用返信 編集キー/
■98504 / inTopicNo.25)  Re[18]: PictureBox で画像を動かす
□投稿者/ PATIO (24回)-(2021/11/25(Thu) 09:57:18)
No98501 (KOZ さん) に返信
> ■No98498 (PATIO さん) に返信
>>一旦は全て黒くなってからボールがのった画像がのる事になるので
>>ボールの部分は、白⇒黒⇒白という描画になってちらつきが起こる可能性があります。
>
> PictureBox の場合、WM_ERASEBKGND は無視され、WM_PAINT 処理中に
> BackColor による塗りつぶしも、背景の描画も、イメージの描画も
> バッファに対して行われ、画面への転送は1回限りです。
>
> 質問者さんが提示されたコードを実行してみても発生しないので
> 第三者が実行してみて、チラツキを確認できるコードが提示されない限りは
> 解決不能でしょう。

確かに再現できる最小セットがないとこれ以上は無理ですね。
何が起こっているのか気にはなりますけれど、
さすがにプロジェクト一式もらうわけにもいきませんし。
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -