• ベストアンサー

すいません、質問というか困っていることがあります。

すいません、質問というか困っていることがあります。 私は今C#でイライラ棒を作成しているのですが、ピクチャーボックス内での、プレイヤー(自機)の動かし方と。壁に当たった時の当たり判定のプログラミングが分りません。 グーグルなどで検索をかけましたが、私が納得するような回答はありませんでした。 C#に詳しい方、お手数ですがご教授お願いします。 できればソース付でお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

 続きです。ペイントイベントはピクチャーボックス側を実装して下さい。 //当たり判定 private bool AtariHantei(Graphics g) { Point[] apt = new Point[] { new Point(0, 0), new Point(0, 20), new Point(20, 0), new Point(20, 20) }; for (int n = 0; n < apt.Length; ++n) { IntPtr hdc = g.GetHdc(); Color c = Color.FromArgb((int)GetPixel(hdc, pos.X + apt[n].X, pos.Y + apt[n].Y)); g.ReleaseHdc(hdc); if (pboxDate1.BackColor.R != c.R || pboxDate1.BackColor.G != c.G || pboxDate1.BackColor.B != c.B) { return true; } } return false; } //キャラ操作 private void Form1_KeyDown(object sender, KeyEventArgs e) { old = new Point(pos.X, pos.Y); switch (e.KeyCode) { case Keys.Left: pos = new Point(pos.X - 5, pos.Y); break; case Keys.Right: pos = new Point(pos.X + 5, pos.Y); break; case Keys.Up: pos = new Point(pos.X, pos.Y - 5); break; case Keys.Down: pos = new Point(pos.X, pos.Y + 5); break; } Graphics g = pboxDate1.CreateGraphics(); if (AtariHantei(g) == true) { MessageBox.Show("激突した"); } DrawStage(g); } //ピクチャボックスのペイント private void pboxDate1_Paint(object sender, PaintEventArgs e) { DrawStage(e.Graphics); } } }

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

 こんにちは。本来はMDXやXNAと言ったDirectX関連で実装するべきでは。  以下はC#とNetFrameworkのみです。参考程度に。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { [System.Runtime.InteropServices.DllImport("gdi32.dll")] static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos); //プレイヤーの現在位置 private Point pos = new Point(35, 35); //プレイヤーの以前の位置 private Point old = new Point(0, 0); public Form1() { InitializeComponent(); } private void DrawStage(Graphics g) { //プレイヤーの残像を消す g.FillEllipse(new SolidBrush(pboxDate1.BackColor), old.X, old.Y, 20, 20); //壁 g.FillRectangle(Brushes.Blue, 0, 0, 20, 559); g.FillRectangle(Brushes.Blue, 748, 0, 20, 559); g.FillRectangle(Brushes.Blue, 10, 0, 748, 20); g.FillRectangle(Brushes.Blue, 10, 539, 748, 20); g.FillRectangle(Brushes.Black, 70, 20, 20, 450); g.FillRectangle(Brushes.Black, 500, 120, 20, 419); g.FillRectangle(Brushes.Black, 70, 470, 350, 15); g.FillRectangle(Brushes.Black, 70, 330, 350, 15); g.FillRectangle(Brushes.Black, 70, 190, 350, 15); g.FillRectangle(Brushes.Black, 150, 400, 350, 15); g.FillRectangle(Brushes.Black, 150, 260, 350, 15); g.FillRectangle(Brushes.Black, 150, 120, 350, 15); g.FillRectangle(Brushes.Black, 150, 70, 20, 60); g.FillRectangle(Brushes.Black, 200, 20, 15, 60); g.FillRectangle(Brushes.Black, 250, 70, 15, 60); g.FillRectangle(Brushes.Black, 300, 20, 10, 60); g.FillRectangle(Brushes.Black, 350, 70, 10, 60); g.FillRectangle(Brushes.Black, 400, 20, 15, 60); g.FillRectangle(Brushes.Black, 450, 70, 15, 60); g.FillRectangle(Brushes.Black, 500, 20, 20, 60); g.FillRectangle(Brushes.Red, 700, 20, 48, 50); //プレイヤー g.FillEllipse(Brushes.Red, pos.X, pos.Y, 20, 20); }

全文を見る
すると、全ての回答が全文表示されます。
  • Kazma_hk
  • ベストアンサー率26% (115/428)
回答No.1

これだけでは回答できる人はいないと思いますよ? ピクチャーボックスないで、プレイヤーはどうやって表示されているの? 壁はどういう風に描画しているの? それも含めて全部わからないっていうなら、作成することはそもそも無理 ってことじゃないかな?

jegann
質問者

お礼

すいません、仰られるとおりですね。 ご指摘ありがとうございます。 ピクチャーボックス内では以下のようにステージを作っています。 Graphics g = pboxDate1.CreateGraphics(); //壁 g.FillRectangle(Brushes.Blue, 0, 0, 20, 559); g.FillRectangle(Brushes.Blue, 748, 0, 20, 559); g.FillRectangle(Brushes.Blue, 10, 0, 748, 20); g.FillRectangle(Brushes.Blue, 10, 539, 748, 20); g.FillRectangle(Brushes.Black, 70, 20, 20, 450); g.FillRectangle(Brushes.Black, 500, 120, 20, 419); g.FillRectangle(Brushes.Black, 70, 470, 350, 15); g.FillRectangle(Brushes.Black, 70, 330, 350, 15); g.FillRectangle(Brushes.Black, 70, 190, 350, 15); g.FillRectangle(Brushes.Black, 150, 400, 350, 15); g.FillRectangle(Brushes.Black, 150, 260, 350, 15); g.FillRectangle(Brushes.Black, 150, 120, 350, 15); g.FillRectangle(Brushes.Black, 150, 70, 20, 60); g.FillRectangle(Brushes.Black, 200, 20, 15, 60); g.FillRectangle(Brushes.Black, 250, 70, 15, 60); g.FillRectangle(Brushes.Black, 300, 20, 10, 60); g.FillRectangle(Brushes.Black, 350, 70, 10, 60); g.FillRectangle(Brushes.Black, 400, 20, 15, 60); g.FillRectangle(Brushes.Black, 450, 70, 15, 60); g.FillRectangle(Brushes.Black, 500, 20, 20, 60); g.FillRectangle(Brushes.Red, 700, 20, 48, 50); //プレイヤー g.FillEllipse(Brushes.Red, 35,35,20,20);

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ゲーム制作での質問です。

     Javaでゲームを作ってるんだけど、キャラクターと壁との当たり判定がよく分からない状態です。  自機と弾の当たり判定なら分からないんですが、自機と壁との当たり判定で配列を用いずに、当たり判定をするコツが分かる方がいらっしゃたら少しでもいいので教えて下さい。

  • Parafla!でイライラ棒

    フリーソフトのParafla!で、イライラ棒を作りたいのですが、 イライラ棒で言う「さわってはいけない物」は ラインと説明させて頂きます。 (1)ラインにカーソルがふれたとき、 指定した映像に飛ばす方法。 「指定した映像」とは 「ゲームオーバー」などが書かれている場面です (2) 当たり判定を背景につけず ラインだけ当たり判定にする。 ためにはどのようなプログラミングを行えばいいのですか?

  • 数学系の質問です。

    現在、プログラミングで矩形と矩形の当たり判定を行い、当たっていたら、埋まっている分を飛び出させる処理を作っています。 どういう理論で作ればできるのか、Google検索をかけても全然出できません。どうすればいいですか?

  • 壁との当たり判定

    objective-cでプレイヤーと壁の当たり判定に困っています。 いろいろと検索して参考になるサイトをさがしてはいるんですが なかなか見つかりません。 何かお勧めのサイト、または書籍などあれば教えて下さい。 ちなみに当たる壁は複雑な地形の画像でやっています。

  • C#でのドラッグ&ドロップの質問です

    C#でのドラッグ&ドロップの質問です ピクチャーボックスがあります。 そのピクチャーボックスをD&Dで動かしたいです。 例をあげると、 ペイントソフトの範囲選択した後にD&Dすると移動できるような感じです。 掴んで動かせる感じですね。 そんなことが書いてあるサイトやソースを教えてくだされば有り難いです。

  • 処理の速い当たり判定について[WINSOWS][C]

    いつもお世話になっております。 WINDOWSプログラミングを勉強しています。 現在当たり判定について勉強しているのですが、調べてみたところいろいろなやり方があるようです。 私が今作ろうとしているのはアクションゲームなのですが、接地、ダメージ等々の当たり判定があり、毎フレームでこのような判定を繰り返すと重くなってしまうのでは、と危惧しています。 ここで質問なのですが、WINDOWSまたはCプログラムでなるべく速く処理ができる当たり判定を教えていただけないでしょうか? また、初心者向けなものをお願いします。 我儘を言って申し訳ありませんが、ご指導よろしくお願いします。

  • 縦スクロールのゲームの参考本

    DXライブラリとCを使ってシューティングゲームを作成したいと思っています。 14歳から始めるC言語ゲームプログラミングでDXライブラリと横スクロールゲームについて勉強し http://l.huu.cc/s/ このサイトで縦スクロールのゲームを作成しています。今このサイトはしばらく更新していないようなのですが・・・敵と自弾までの判定はできたものの、敵と自機、敵の弾と自機との判定ができず現在勉強中です・・・。 現在東方のような縦スクロールシューティングゲームをDXライブラリとC言語を作成しようと思っているのですがそのようなゲームの参考本はないでしょうか? 理想としてはサンプルゲームプログラムがあり、プレイヤーの移動→弾の発射→・・・といった具合に作成していく参考書が望ましいです。 開発環境は C言語 DXライブラリ ビジュアルスタジオ2003.net です。よろしくお願いします。

  • C#で壁の当たり判定と自キャラの移動で困っています

    初投稿です。C#のコンソールアプリケーションでゲーム作りをしているC#初心者です。 GraphicsExというフォームを作ってそこに壁を描画するところまではできたのですが、画像を自キャラとして動かせるとよいのですが、できないので今はとりあえず丸を描画して動かしています。 質問なのですが、自キャラを丸で描画して動かすと、壁の当たり判定が分からないので、キャラ(ただの丸ですが)が壁をすり抜けてしまいます。壁にぶつかった時にそれ以上進めないようにするために壁の当たり判定をどなたか教えてほしいです。 あとGraphicsを使っているからか、プログラムがおかしいのか分かりませんが(おそらく後者(汗)キャラの移動はキー入力でやっていて、数秒は意図した通りに移動できるのですが何故かキャラを移動しても、しなくても数秒後にフォームがとまってしまい動かなくなります。どのようにプログラムを記述をするとうまく自キャラの操作をできるのかも教えていただけるとすごく嬉しいです。 重ね重ね恐縮ですが、できればソース付でお願いします。 そもそも、コンソールアプリケーションでゲームを作るべきではない、DirectXを使うべきだ、とかあると加えてアドバイスほしいです。 (ウインドウズフォームもDirectXもあまり詳しくないですが。。。orz) 一応いままでのおおまかなプログラムを載せておきます。長文失礼しました。

  • 【行き詰まり】ブロック崩しゲーム作成【判定?】

    初めまして。 今課題ということでVB.NETでブロック崩しを作成しているのですが、 作成途中で詰まってしまい、ここへ書き込みをしています。 ・ボール、ブロックの初期配置 ・壁とブロックの当たり判定 まで作ったところで、講師から「プロパティを用いてブロックへの当たり判定と消える判定フラグをまとめろ」と言われました。 VB初心者で使い方が判らず、あちこち調べて見ましたがどうにも糸口が掴めません。 どなたかご存知の方いましたら、御教授の程をお願いします。 ソースは後ほど添付します。 よろしくお願いします。 (環境はVisual Basic 2008 Express Editionです)

  • ピクチャボックスから座標を読み込み 配列へ

    プログラミング初心者でわからないことがあるのでどなたかわかるかたいましたら教えてください<(_ _)> ピクチャボックスにグラフを書くプログラムを作っているのですが、 波状のグラフから その最大値、最小値をいくつかとり、それらについて近似直線を書こうとしています。 その際に、範囲指定をマウスで行うか、もしくはピクチャボックス上をクリックするとその座標を読み込み配列に入れたいのです。 例えばc(600)の配列に クリックしたら順次その座標データ(X座標だけでかまわないです)が入るようにするにはどうしたらいいでしょうか? 具体的には1回クリックしたらc(0)へ、2回目はc(1)へ・・・・ とこれを繰り返し操作できるようにしたいのです ぐぐってみましたが、座標を読み込みはありますが、それを活用するというものがなかなかなくて。 わかる方いましたらお願いします。