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

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

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

Re[20]: キー入力でゲーム作成 [1]


(過去ログ 22 を表示中)

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

■9529 / inTopicNo.21)  Re[19]: キー入力でゲーム作成
  
□投稿者/ ぽぴ王子 (281回)-(2007/10/29(Mon) 22:57:54)
ぽぴ王子 さんの Web サイト
No9528 (mあ@反省中 さん) に返信

> C# よりも、VB の方がいいんじゃない?
> 簡単だよ。

簡単、なんでしょうか。
個人的なイメージでは、VBはちょろちょろとしたことをするのには簡単ではあるけれども
初心者を躓かせるような罠がたくさん仕込まれていて、ある意味とても怖いという
イメージがあります。
あと、C#からわざわざ乗り換えるほどではないかな、とか。
(新規で覚えるならどちらでもかまわないですけど)


■No9525 (ken さん) に返信

> 上のゲームにpicutureBoxもいれてみましたが、picutureBoxにインポートした画像が動きません。
>  どこか間違えているのでしょうか?

>              if (e.KeyCode == Keys.Space)
>                  z -= 10;

ここで z の値を変更しているけれど、z の値が pictureBox1.Left と連動していないから
じゃないかしらん。
pictureBox を動かしたい?のであれば、z ではなくて pictureBox1.Left そのものを変更
してあげる必要があると思う。

あと、ソースコードを載せるなら「図表モード」にしておいた方がいいですよ。

引用返信 編集キー/
■9530 / inTopicNo.22)  Re[20]: キー入力でゲーム作成
□投稿者/ mあ@反省中 (4回)-(2007/10/29(Mon) 23:34:17)
No9529 (ぽぴ王子 さん) に返信
> ■No9528 (mあ@反省中 さん) に返信
> あと、C#からわざわざ乗り換えるほどではないかな、とか。

ははは、確かに、それは言えますね。
とりあえず、C#は経験値全然無いのですけど、No20 にC#のコードも追加しておきました。

どっちもにたりよったりですね。

Paint イベント内で描画するのは止めた方がいいかも>主さん
なんか書き換えが見えちゃってるし。

昔の32×32ドットのアイコンみたいなの並べたロールプレイングゲームみたいなの
作ろうとしているのであれば、「部分書き換え」なんて小細工も覚えておくと良いです
よ。

引用返信 編集キー/
■9546 / inTopicNo.23)  Re[19]: キー入力でゲーム作成
□投稿者/ ken (22回)-(2007/10/30(Tue) 19:25:32)
No9528 (mあ@反省中 さん) に返信
> C# も載せます。
>
> using System;
> using System.Collections.Generic;
> using System.ComponentModel;
> using System.Data;
> using System.Drawing;
> using System.Text;
> using System.Windows.Forms;
>
> namespace GameCs
> {
> public partial class Form1 : Form
> {
> private PictureBox pic = new PictureBox();
> public Form1()
> {
> InitializeComponent();
> }
>
> private void Form1_Load(object sender, EventArgs e)
> {
> Controls.Add(pic);
>
> pic.Paint += pic_Paint;
> this.KeyUp += me_Keyup;
> }
>
> private void pic_Paint(Object s, PaintEventArgs e)
> {
> e.Graphics.DrawRectangle(Pens.AliceBlue,new Rectangle(10,10,40,40));
> e.Graphics.FillRectangle(Brushes.Aqua, new Rectangle(10, 10, 40, 40));
> }
>
> private void me_Keyup(object s, KeyEventArgs e)
> {
> switch (e.KeyCode)
> {
> case Keys.Up:
> pic.Top = pic.Top - 10;
> break;
> case Keys.Down:
> pic.Top = pic.Top + 10;
> break;
> case Keys.Left:
> pic.Left = pic.Left - 10;
> break;
> case Keys.Right:
> pic.Left = pic.Left + 10;
> break;
> default:
> break;
> };
> }
>
> }
> }
>
ありがとうございます。上記のコードを記述してみましたが、ビルドして何も描画されていないウインドウが表示されるだけです。

引用返信 編集キー/
■9547 / inTopicNo.24)  Re[20]: キー入力でゲーム作成
□投稿者/ 魔界の仮面弁士 (502回)-(2007/10/30(Tue) 19:28:44)
2007/10/30(Tue) 19:37:22 編集(投稿者)

No9546 (ken さん) に返信
> ありがとうございます。上記のコードを記述してみましたが、ビルドして何も描画されていないウインドウが表示されるだけです。

フォームの Load イベントに Form1_Load を割り当てるのを忘れているのではないでしょうか?

もしそうなら、プロパティウィンドウの稲妻アイコンでイベントの割り当てを行うか、あるいはコードから
 public Form1()
 {
   InitializeComponent();
   this.Load += Form1_Load; //追加
 }
のように、実行時にイベントの割り当てを行ってみてください。
引用返信 編集キー/
■9548 / inTopicNo.25)  Re[20]: キー入力でゲーム作成
□投稿者/ ken (23回)-(2007/10/30(Tue) 19:33:53)
No9529 (ぽぴ王子 さん) に返信
>
>>上のゲームにpicutureBoxもいれてみましたが、picutureBoxにインポートした画像が動きません。
>> どこか間違えているのでしょうか?
>
>> if (e.KeyCode == Keys.Space)
>> z -= 10;
>
> ここで z の値を変更しているけれど、z の値が pictureBox1.Left と連動していないから
> じゃないかしらん。
> pictureBox を動かしたい?のであれば、z ではなくて pictureBox1.Left そのものを変更
> してあげる必要があると思う。
>
下記のコードではだめなのでしょうか?一応pictureBox1.Leftをzに代入することになるのでは?ちがいますか??ちがうのかな?
private void Form1_Load(object sender, EventArgs e)
{
z = pictureBox1.Left;


引用返信 編集キー/
■9549 / inTopicNo.26)  Re[21]: キー入力でゲーム作成
□投稿者/ ken (24回)-(2007/10/30(Tue) 19:55:54)
No9547 (魔界の仮面弁士 さん) に返信
> もしそうなら、プロパティウィンドウの稲妻アイコンでイベントの割り当てを行うか、あるいはコードから
>  public Form1()
>  {
>    InitializeComponent();
>    this.Load += Form1_Load; //追加
>  }
> のように、実行時にイベントの割り当てを行ってみてください。

動きました。ありがとうございました。それともう一つお尋ねしたいのですが、keyDownイベントは、なぜForm1にしか表示されないのでしょうか?
c#.netのときには、キーボードから入力するテクニックを使うときには、WINDOWS APIを呼び出すために長たらしいコードを何行も書かなければ
ならなかったと思いますが、2005になってからは、APIを呼び出すコードは不要になったと思うのですが?違いましたでしょうか?
引用返信 編集キー/
■9550 / inTopicNo.27)  Re[19]: キー入力でゲーム作成
□投稿者/ ken (25回)-(2007/10/30(Tue) 20:05:31)
No9528 (mあ@反省中 さん) に返信
ありがとうございます。
ただ理解できなかったところがあります。というのは、pictureBoxコントロールを使っていようですが、コードには、pictureBoxと記述してありますよね。コントロールを使用しないでコードでpictureBoxコントロールを作成するワザがあるのですか?入門書にはのっていなかったように思いますが、そのへんのところをよろしかったらおしえてください。


>
引用返信 編集キー/
■9552 / inTopicNo.28)  Re[22]: キー入力でゲーム作成
□投稿者/ 魔界の仮面弁士 (503回)-(2007/10/30(Tue) 20:17:40)
ついでに、KeyPreview プロパティについても調べておくと良いかも。

No9549 (ken さん) に返信
> それともう一つお尋ねしたいのですが、keyDownイベントは、なぜForm1にしか表示されないのでしょうか?
実のところ、KeyDown イベントそのものは、すべてのコントロールに存在しています。

ただしコントロールによっては、このイベントが隠されている(非表示属性が付加されている)ため、
そういったコントロールでは、プロパティウィンドウや IntelliSense などには表示されないのです。


> c#.netのときには、キーボードから入力するテクニックを使うときには、
これは、2002 の事でしょうか?
KeyDown の仕組み自体は、以前から変わっていないと思いますけれども…。
引用返信 編集キー/
■9553 / inTopicNo.29)  Re[20]: キー入力でゲーム作成
□投稿者/ 魔界の仮面弁士 (504回)-(2007/10/30(Tue) 20:20:09)
No9550 (ken さん) に返信
> コードでpictureBoxコントロールを作成するワザがあるのですか?

あります。

Form1 にコントロールを幾つか貼り付けた後、「ソリューション エクスプローラ」ウィンドウで、
Form1.cs の横にある 『+』アイコンを展開して、Form1.Designer.cs の内容を見てください。

その中にある『Windows フォーム デザイナで生成されたコード』という部分を見れば、
何が行われているのかがわかるでしょう。
引用返信 編集キー/
■9555 / inTopicNo.30)  Re[19]: キー入力でゲーム作成
□投稿者/ ken (26回)-(2007/10/30(Tue) 20:43:59)
No9528 (mあ@反省中 さん) に返信
> private void Form1_Load(object sender, EventArgs e)
> {
> Controls.Add(pic);
>
> pic.Paint += pic_Paint;
> this.KeyUp += me_Keyup;
> }
何度もすみません。作っていただきましたプログラムは動きましたが上記の部分の意味がわかりかねます。
もしよろしかったらおしえてください。

引用返信 編集キー/
■9556 / inTopicNo.31)  Re[21]: キー入力でゲーム作成
□投稿者/ ken (27回)-(2007/10/30(Tue) 20:46:39)
No9553 (魔界の仮面弁士 さん) に返信
> ■No9550 (ken さん) に返信
> Form1 にコントロールを幾つか貼り付けた後、「ソリューション エクスプローラ」ウィンドウで、
> Form1.cs の横にある 『+』アイコンを展開して、Form1.Designer.cs の内容を見てください。
>
> その中にある『Windows フォーム デザイナで生成されたコード』という部分を見れば、
> 何が行われているのかがわかるでしょう。

???? すみません愚鈍な私の頭では理解不能です。かんで含めるようにおしえてくださったらうれしく思います。
お願いばかりして申し訳ありません。
引用返信 編集キー/
■9559 / inTopicNo.32)  Re[22]: キー入力でゲーム作成
□投稿者/ 渋木宏明(ひどり) (505回)-(2007/10/30(Tue) 20:58:51)
渋木宏明(ひどり) さんの Web サイト
> 2005になってからは、APIを呼び出すコードは不要になったと思うのですが?違いましたでしょうか?

減りはしましたが、不要と言えるほど極端に減ってはいません。
標準クラスライブラリで実装困難である場合など、引き続き API 呼び出しを行わなくてはならない場面は少なからずあります。

引用返信 編集キー/
■9561 / inTopicNo.33)  Re[22]: キー入力でゲーム作成
□投稿者/ 魔界の仮面弁士 (505回)-(2007/10/30(Tue) 21:05:15)
No9556 (ken さん) に返信
>>> コードでpictureBoxコントロールを作成するワザがあるのですか?
>> あります。
>> (中略)
> ???? すみません愚鈍な私の頭では理解不能です。かんで含めるようにおしえてくださったらうれしく思います。
> お願いばかりして申し訳ありません。

別の表現にするのは吝かではないのですが……噛み砕いた説明を行ってほしい個所というのが、
どの部分の事を指しているのかが分かりませんでした。


No9553 の私の投稿の中で、わかりにくかった部分があれば説明しなおしますので、
先の発言についての理解度について、順に質問させてください。


------
>> Form1 にコントロールを幾つか貼り付けた後、

この「コントロールをフォームに貼り付ける」という手順については分かりますか?
------
>> 「ソリューション エクスプローラ」ウィンドウで、

ソリューション エクスプローラというのが、何のことであるのかは分かりますか?
------
>> Form1.cs の横にある 『+』アイコンを展開して、
>> Form1.Designer.cs の内容を見てください。

この + アイコンを見つけられましたか?
また、Form1.Designer.cs の内容を見ることはできましたか?
------
>> その中にある『Windows フォーム デザイナで生成されたコード』という部分を見れば、

Windows フォーム デザイナで生成されたコードという記述を
Form1.Designer.cs の中に見つけることはできましたか?
------
>> 何が行われているのかがわかるでしょう。

その中に、自動生成されたコードが記述されているのですが、見つけることはできましたか?
コードを見つけられたのであれば、その中に、コントロールを生成しているような記述を発見できましたか?
------
コントロール生成コードまでは見つかったが、それぞれの行の意味がさっぱりわからないという事でしょうか?
もしそうなら、わからないコードというのは、その中のどの行ですか?
引用返信 編集キー/
■9565 / inTopicNo.34)  Re[23]: キー入力でゲーム作成
□投稿者/ ken (28回)-(2007/10/30(Tue) 21:48:54)
No9561 (魔界の仮面弁士 さん) に返信
> コントロール生成コードまでは見つかったが、それぞれの行の意味がさっぱりわからないという事でしょうか?
> もしそうなら、わからないコードというのは、その中のどの行ですか?

PictureBoxコントロールを貼り付けると下記のコードが生成されました。
この意味がわかりかねます。
private System.Windows.Forms.PictureBox pictureBox1;
引用返信 編集キー/
■9567 / inTopicNo.35)  Re[24]: キー入力でゲーム作成
□投稿者/ 魔界の仮面弁士 (506回)-(2007/10/30(Tue) 21:54:15)
No9565 (ken さん) に返信
> PictureBoxコントロールを貼り付けると下記のコードが生成されました。

Form1.Designer.cs の中には、他にもたくさんのコードが生成されますよね。

[Windows フォーム デザイナで生成されたコード] と書かれた部分を開くと、
private void InitializeComponent() の中に。


> この意味がわかりかねます。
> private System.Windows.Forms.PictureBox pictureBox1;

"pictureBox1" という名前の、PictureBox 型の変数を宣言しているところです。
引用返信 編集キー/
■9569 / inTopicNo.36)  Re[20]: キー入力でゲーム作成
□投稿者/ mあ@反省中 (5回)-(2007/10/30(Tue) 22:12:45)
No9555 (ken さん) に返信
> ■No9528 (mあ@反省中 さん) に返信
>> private void Form1_Load(object sender, EventArgs e)
>> {
>> Controls.Add(pic);
>>
>> pic.Paint += pic_Paint;
>> this.KeyUp += me_Keyup;
>> }
> 何度もすみません。作っていただきましたプログラムは動きましたが上記の部分の意味がわかりかねます。
> もしよろしかったらおしえてください。
>
フォームデザイナでPictureBoxを選択して張り付けるのと、

private PictureBox pic = new PictureBox(); 行と
(this.)Controls.add(pic);
が同じということです。

フォームデザイナにPictureBoxを貼り付けてもいいのですが、他のファイルもアップロードしないと
ダメなのでフォームデザイナに貼り付けることを自前でコーディングしているだけです。

Form1.cs なり.vb なり掲示板のレス許容量に収めるのは大変ですので長いものを載せるときはコード
も工夫しましょう。


引用返信 編集キー/
■9570 / inTopicNo.37)  Re[25]: キー入力でゲーム作成
□投稿者/ ken (29回)-(2007/10/30(Tue) 22:17:21)
No9567 (魔界の仮面弁士 さん) に返信
>>
> "pictureBox1" という名前の、PictureBox 型の変数を宣言しているところです。
PictureBox 型の変数というのは入門書のどこにも書かれていません。C#は奥が深すぎますね。

ということはすべてのコントロールをコードで記述できるということですね。
それが大変なことと、生産性を高めるためにグラフィカルに処理できるようにバージョンアップしたということなのですね。
実際、プログラムを作成しているときにコントロールを使わないでコードで記述しなければならない場面
などというのはあるのでしょうか?
引用返信 編集キー/
■9571 / inTopicNo.38)  Re[21]: キー入力でゲーム作成
□投稿者/ ぽぴ王子 (282回)-(2007/10/30(Tue) 22:35:51)
ぽぴ王子 さんの Web サイト
No9548 (ken さん) に返信

なんだか一気に流れていて、ここに答えていいのかどうか(先に知るべきことが多そう)悩むところですが。

> 下記のコードではだめなのでしょうか?一応pictureBox1.Leftをzに代入することになるのでは?ちがいますか??ちがうのかな?
> private void Form1_Load(object sender, EventArgs e)
> {
> z = pictureBox1.Left;

「pictureBox1.Left を z に代入する」ことにはなります。
でも、z を変更したからと言って pictureBox1.Left が変更されるわけではない、ということです。

たとえばこんなコードがあるとしましょう。

int A = 1;
int B = A;
A = 2;

変数 A に 1 を設定し、変数 B に A を代入しています。
この時点で A と B は共に 1 を指しています。でも A と B の値は同じですが、違うモノです。
ここで A = 2; として A の値を 2 に変更しても B の値は変更されません。

pictureBox1.Left と z にも同じことが言えるわけです。

なので、z を変更するのではなく pictureBox1.Left そのものを変更しなければいけません。

引用返信 編集キー/
■9573 / inTopicNo.39)  Re[22]: キー入力でゲーム作成
□投稿者/ ken (30回)-(2007/10/30(Tue) 22:55:22)
No9571 (ぽぴ王子 さん) に返信

> たとえばこんなコードがあるとしましょう。
>
> int A = 1;
> int B = A;
> A = 2;
>
> 変数 A に 1 を設定し、変数 B に A を代入しています。
> この時点で A と B は共に 1 を指しています。でも A と B の値は同じですが、違うモノです。
> ここで A = 2; として A の値を 2 に変更しても B の値は変更されません。
>
> pictureBox1.Left と z にも同じことが言えるわけです。
>
> なので、z を変更するのではなく pictureBox1.Left そのものを変更しなければいけません。

確かにそうですね。プログラミングは奥が深いですね。あきらめない限り挫折とは言わないとどなたかがどこかの掲示板でおっしゃって
いましたが、何かくじけそうです。
引用返信 編集キー/

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

このトピックに書きこむ

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

管理者用

- Child Tree -