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

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

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

Re[7]: コントロールのスピード


(過去ログ 21 を表示中)

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

■8950 / inTopicNo.1)  コントロールのスピード
  
□投稿者/ 岸 (1回)-(2007/10/15(Mon) 12:17:31)

分類:[C#] 

まだ、始めたばかりで右も左もわかりませんが、一応いじくって将来的にはゲームでも作りたいと思っています。
それでまずpictureBoxコントロールを左右上下に動かすプログラムを作ってみましたが、一つ疑問点が生じたので質問した次第です。
pictureBox1.BackColor = Color.Gold; pictureBox1.Left += 5;の場合はスムーズに移動しますが、画像を読み込ませると動きが鈍くなるのは、読み込むことが原因と考えてよろしいのでしょうか?
たわいもない初心者レベルの質問ですみません。


namespace WindowsApplication9
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;

}

private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Left += 5;

if (pictureBox1.Left > 100)
{
pictureBox1.BackColor = Color.Gold;
pictureBox1.Left += 5;
}

if (pictureBox1.Left > 200)
{ pictureBox1.BackColor = Color.Snow;
pictureBox1.Left += 3;
}
if (pictureBox1.Left >400)
{
pictureBox1.Image = Image.FromFile("c:\\ppp.jpg");
pictureBox1.Top += 20;
}
}
}
}
引用返信 編集キー/
■8951 / inTopicNo.2)  Re[1]: コントロールのスピード
□投稿者/ 渋木宏明(ひどり) (468回)-(2007/10/15(Mon) 12:32:13)
渋木宏明(ひどり) さんの Web サイト
> pictureBox1.BackColor = Color.Gold; pictureBox1.Left += 5;の場合はスムーズに移動しますが、画像を読み込ませると動きが鈍くなるのは、読み込むことが原因と考えてよろしいのでしょうか?

よろしいです。

アクション系のゲームなどでは特に、ゲーム開始時ステージの開始時に読み込んでおくのが普通です。

引用返信 編集キー/
■8953 / inTopicNo.3)  Re[2]: コントロールのスピード
□投稿者/ 岸 (2回)-(2007/10/15(Mon) 12:55:42)
No8951 (渋木宏明(ひどり) さん) に返信
> よろしいです。
> アクション系のゲームなどでは特に、ゲーム開始時ステージの開始時に読み込んでおくのが普通です。

ありがとうございます。
次に、画像が一定の範囲内を無限に周回するようなプログラムを作ってみましたが、自分でも何か非常に無駄の多いプログラムのような気がするのですが、より簡潔に記述できる方法がありましたらアドバイスお願いします。

namespace WindowsApplication9
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
timer2.Enabled = false;
timer3.Enabled = false;
}

private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Left += 5;

if (pictureBox1.Left > 100)
{
pictureBox1.BackColor = Color.Gold;
pictureBox1.Left += 5;
}

if (pictureBox1.Left > 200)
{
pictureBox1.BackColor = Color.Snow;
pictureBox1.Left += 3;
}
if (pictureBox1.Left > 400)
{
pictureBox1.Image = Image.FromFile("c:\\ppp.jpg");
pictureBox1.Top += 50;
}

if (pictureBox1.Top > 200)
{
timer1.Enabled = false;

timer2.Enabled = true;

}
}

private void timer2_Tick(object sender, EventArgs e)
{
if (pictureBox1.Top > 50)
{
pictureBox1.Left -= 20;

}
if (pictureBox1.Left < 100)
{
timer1.Enabled = false;

timer2.Enabled = false;
timer3.Enabled = true;
}

}

private void timer3_Tick(object sender, EventArgs e)
{
if (pictureBox1.Left < 100)
{
pictureBox1.Top -= 5;

}
if (pictureBox1.Top < 50)
{
pictureBox1.Left += 5;

}
if (pictureBox1.Left > 100)
{
timer1.Enabled = true;
timer2.Enabled = false;
timer3.Enabled = false;


}

}
}
}
引用返信 編集キー/
■8963 / inTopicNo.4)  Re[3]: コントロールのスピード
□投稿者/ PATIO (26回)-(2007/10/15(Mon) 17:09:49)
C#自体はあまり使っていないのですが、ソースを見た感想を書いてみます。
おかしな事を書いていたら指摘お願いします。
参考にしたいと思いますので。

タイマーが三つも必要な理由がソースからは読み取れません。
インターバルが同じなら一つで良いような気もします。
今どっちに向かって動いているかと言う状態管理だけを
きちんとしておけば、タイマーは一つで良さそうです。

画面の大きさ等が分からないので外しているかもしれませんが、
if (pictureBox1.Left > 400)の時に毎回画像を読み込んでいるような気がします。
ファイルI/Oは一般的に重い処理になるので渋木宏明(ひどり) さんが書かれているように
最初に読み込んでおいて読み込んだ物を保持し続けて使いまわすとかの方が処理としては
良いのではと思いました。

引用返信 編集キー/
■8975 / inTopicNo.5)  Re[4]: コントロールのスピード
□投稿者/ 岸 (3回)-(2007/10/15(Mon) 19:06:23)
No8963 (PATIO さん) に返信
>> 画面の大きさ等が分からないので外しているかもしれませんが、
> if (pictureBox1.Left > 400)の時に毎回画像を読み込んでいるような気がします。
> ファイルI/Oは一般的に重い処理になるので渋木宏明(ひどり) さんが書かれているように
> 最初に読み込んでおいて読み込んだ物を保持し続けて使いまわすとかの方が処理としては
> 良いのではと思いました。

画像は、周回している間に3回変わります。それを最初に読み込んで保持しておくことはできるのでしょうか?
引用返信 編集キー/
■8978 / inTopicNo.6)  Re[5]: コントロールのスピード
□投稿者/ Jitta on the way (22回)-(2007/10/15(Mon) 20:20:13)
No8975 (岸 さん) に返信
> ■No8963 (PATIO さん) に返信
> >> 画面の大きさ等が分からないので外しているかもしれませんが、
>> if (pictureBox1.Left > 400)の時に毎回画像を読み込んでいるような気がします。
>>ファイルI/Oは一般的に重い処理になるので渋木宏明(ひどり) さんが書かれているように
>>最初に読み込んでおいて読み込んだ物を保持し続けて使いまわすとかの方が処理としては
>>良いのではと思いました。
>
> 画像は、周回している間に3回変わります。それを最初に読み込んで保持しておくことはできるのでしょうか?

ImageList とかいうコントロールを使うか、Bitmap を3つ作って最初に読み込んでおきます。

携帯から見ているので外しているかもしれません。
+=5 を、何度もする必要はあるのでしょうか?
どのあたりにあろうと、5ピクセルずれるのは決まりですよね?


if文の中ですが、わり算の商だけ求められると、計算ですみますよね。
99/100.0 は 0.99 ですが、99/100 は 0 です。


画像は、今はルートにあるかもしれませんが、配布先ではそこには置けません。
引用返信 編集キー/
■8979 / inTopicNo.7)  Re[6]: コントロールのスピード
□投稿者/ 岸 (4回)-(2007/10/15(Mon) 21:08:32)
No8978 (Jitta on the way さん) に返信
>> 画像は、今はルートにあるかもしれませんが、配布先ではそこには置けません。

これについては承知しています。exeファイルと同じフォルダにおくと言うことですね。

なるほどImageList というコントロールと剰余を使うのがポイントなのですね。書いていてえらい無駄の多いプログラムだと思いつつ
とにかく動けば。という思いで書いたものですから。
少しこのへんのところをサンプルなどで学習して出直してきます。
また、なにかとお世話になるかもしれませんが、よろしくおねがいします。
引用返信 編集キー/
■9016 / inTopicNo.8)  Re[7]: コントロールのスピード
□投稿者/ PATIO (28回)-(2007/10/16(Tue) 17:42:21)
No8979 (岸 さん) に返信
> ■No8978 (Jitta on the way さん) に返信
> >> 画像は、今はルートにあるかもしれませんが、配布先ではそこには置けません。
>
> これについては承知しています。exeファイルと同じフォルダにおくと言うことですね。
>
> なるほどImageList というコントロールと剰余を使うのがポイントなのですね。書いていてえらい無駄の多いプログラムだと思いつつ
> とにかく動けば。という思いで書いたものですから。
> 少しこのへんのところをサンプルなどで学習して出直してきます。
> また、なにかとお世話になるかもしれませんが、よろしくおねがいします。

ちなみにですが、画像が3個で増えないなら、Bitmap を3つ作って最初に読んでおくと言うのも有りです。
数を固定で持ちたくない場合は、ImageListと自前で設定ファイル等を用意すれば、その部分を
プログラムの外部で設定可能にもできると思います。
何処までこるか次第と言うところでしょうね。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

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

管理者用

- Child Tree -