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);
}
}
}
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);
}
No.1
- 回答日時:
これだけでは回答できる人はいないと思いますよ?
ピクチャーボックスないで、プレイヤーはどうやって表示されているの?
壁はどういう風に描画しているの?
それも含めて全部わからないっていうなら、作成することはそもそも無理
ってことじゃないかな?
すいません、仰られるとおりですね。
ご指摘ありがとうございます。
ピクチャーボックス内では以下のようにステージを作っています。
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で実行時にメソッドの返り値...
-
java 長さの異なる配列の代入
-
C言語からJavaに書き換えの質...
-
c# デリゲート関連の命名について
-
Stringの文字列をString[]配列...
-
SwingでJtableのヘッダ行が表示...
-
javaでcsvファイル読込時の改行...
-
sin曲線とcos曲線を描くプログ...
-
java spring でエラーが出て困...
-
アンマネージDLLで、ダイアログ...
-
全組み合わせの出力
-
javaのプログラムで、forの文が...
-
式の型は配列型で int に解決済...
-
Java エラーについて
-
C言語のポインターに関する警告
-
VBAで配列の計算
-
ORA-01858: 数値を指定する箇所...
-
パソコンキーボードで時分秒を...
-
Path型をString型へ変換する(Java)
-
C#で、あるクラスのメンバーす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
JAVA エラー 式の開始が不正で...
-
式の型は配列型で int に解決済...
-
メインが含まれていません
-
javaでcsvファイル読込時の改行...
-
DataSet(DataTable)の使い方
-
java spring でエラーが出て困...
-
C++からC#のdllを参照する際、...
-
c# デリゲート関連の命名について
-
JUnit4のアノテーションについて
-
SwingでJtableのヘッダ行が表示...
-
Java エラーについて
-
6桁の数字を重複なしでランダム...
-
C#で実行時にメソッドの返り値...
-
JAVAでCの関数ポインタのような...
-
IN演算子の中身を動的に生成
-
行の途中から読み込む方法
-
javaでカレンダー作成
-
ビープ音をなめらかに鳴らしたい
-
初心者ですが、今javaで簡単な...
おすすめ情報