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で質問しましょう!
似たような質問が見つかりました
- 弁護士・行政書士・司法書士・社会保険労務士 管理費滞納債務の特定承継人への承継 6 2022/04/02 16:59
- その他(コンピューター・テクノロジー) 50台の織機から回転数を取得・集計しモニターに表示したい 2 2022/11/05 15:48
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- C言語・C++・C# visual studio 2019 についての質問です 1 2022/09/21 09:58
- SQL Server これをSQL文で出来るでしょうか? 1 2023/03/26 02:16
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- SEO SEO対策などに詳しい方に質問です。 私は過去にこの掲示板を使い 幾度なく質問を投稿し 後に知った実 3 2022/12/11 13:05
- バッグ・財布 スーツケースのストッパー機能について 1 2023/07/23 13:09
- 弁護士・行政書士・司法書士・社会保険労務士 行政書士試験の民法についての質問になります。 解除についての質問になります。 問 Aが、その所有する 2 2023/07/18 17:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c# デリゲート関連の命名について
-
SAStrutsでActionからJSPに値を...
-
リサージュ図形
-
Javaでポインタ的なことはでき...
-
コード中の謎のエラー
-
javaのエラーの意味がわかりま...
-
デスクトップのアイコンの位置...
-
Javaで簡単なアニメーションを...
-
西暦 -> 年号、年号 -> 西暦の...
-
熟語を判別し構文解析してくれ...
-
式の型は配列型で int に解決済...
-
Start:アプレットは初期化され...
-
因数分解メソッドの改良
-
配列にnullを代入すると、null...
-
C#で動的配列Listの中身をListB...
-
C言語のポインターに関する警告
-
Javaで改行などが出来ないのです。
-
配列を逆順させて表示させる方...
-
応用情報技術者試験の令和元年...
-
getStringの値がNULLの時の処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
式の型は配列型で int に解決済...
-
「配列定数は、イニシャライザ...
-
javaでcsvファイル読込時の改行...
-
java spring でエラーが出て困...
-
javaでカレンダー作成
-
Javaで電卓を作りたい
-
SwingでJtableのヘッダ行が表示...
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
C#で実行時にメソッドの返り値...
-
(Swing)JTextFieldを半角のみ入...
-
c# デリゲート関連の命名について
-
Javaでポインタ的なことはでき...
-
複数のボタンを配置し、それぞ...
-
javaのエラーの意味がわかりま...
-
JUnit4のアノテーションについて
-
sin曲線とcos曲線を描くプログ...
-
intが負の時に投げる例外はあり...
-
Java 初心者 int型の取り扱い方
-
C++からC#のdllを参照する際、...
おすすめ情報