2016-06-14 6 views
0

Cここからは初心者です。移動中にピクチャボックスの背景がほかのピクチャボックスと等しいかどうかを確認します。

私は2D Tanksゲームを作っています。これまでのところすべてうまくいきました。 私のタンクはどちらもピクチャーボックスなので、私のミサイルもそうです。 PictureBoxのミサイルと戦車の画像には、透明なBackColourプロパティがあります。問題は、ミサイルの背景である&タンクは、他のピクチャボックス(pbバックグラウンド)の上にある間は透明ではないということです。 thisのように見えます。

私は、異なるPBを使用することは非効率的な方法だと知っていますが、私はかなり遠くに来ていて、私は本当に良く分かりません。とにかく、あなたが見ることができるように、ミサイルとタンクPBの背景は、フォームの色を示しています。私が画像をダウンロードしたとき、背景は透明で、私はそれを確信しています。私のPBの背景を真に透明にするにはどうすればいいですか? (オーバーラップPBの背景と一致しますか?)

私はthisを見ましたが、私のシナリオと実際には一致しません。

お手数ですが、事前におねがいします。

更新:私はTommyのアドバイスに従っています。これは、常にミサイルXとミサイルYを変更するタイマーのpbBackgroundに沿って移動するのが正しい方法ですか?現在、これは何もしません。

using (Graphics drawmissile = Graphics.FromImage(pbBackground.Image)) 
     { 
      drawmissile.DrawImage(pbMissile.Image, new Point(MissileX,Convert.ToInt32(MissileY))); 
     } 

答えて

2

PictureBoxは不透明です。そしてPictureBoxは効率的ではありません。

ゲームを作成するには、フォームに直接描画するPaintイベントを勉強する必要があります。

Bitmap backgroundBitmap = new Bitmap("background"); 
Bitmap tankBitmap = new Bitmap("tank"); 

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    e.Graphics.DrawImage(backgroundBitmap, 0, 0); 
    e.Graphics.DrawImage(tankBitmap, 30, 30); 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    this.Invalidate(); //trigger Form1_Paint to draw next frame 
} 
+0

素晴らしいですが、私はそのミサイル画像のグラフィックをタイマーにダニ? –

+0

e.Graphics.DrawImage(tankBitmap、x、y);タイマーティックで(x、y)を変更する – Tommy

1

は、互いの上に複数のPictureBoxインスタンスを階層化しないでください。それは非常に混乱し、非常に迅速になるでしょう。

代わりに、1つのPictureBoxを使用して、ペイントを使用して画像を描画します。このようにして、発生しているグラフィックス操作をさらに制御することができます。

は、この例ではthis

private void DrawIt() 
{ 
    System.Drawing.Graphics graphics = this.CreateGraphics(); 
    System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(
     50, 50, 150, 150); 
    graphics.DrawEllipse(System.Drawing.Pens.Black, rectangle); 
    graphics.DrawRectangle(System.Drawing.Pens.Red, rectangle); 
} 

を見てください彼らは、フォーム上に直接図形を描画する方法を示します。代わりにPictureBoxを使用します。画像を描画することもできます。

System.Drawing.Graphicsオブジェクトを使用してフォームに図形を描画する方法はたくさんあります。比較のためにthis質問を見てみてください。

+0

実際の画像を描くことはできますか?同様に、オンラインからダウンロードした画像ですか? –

+0

はい、 'Graphics.drawImage'メソッドで行うことができます。 https://msdn.microsoft.com/en-us/library/system.drawing.graphics.drawimage(v=vs.110).aspx – Ares

0

トミーの答えは権利であるあなたがpictureboxesを使用して上の死んセット(悪いアイデア)している場合は、しかし、重複のPictureBox 透明にbackgroundcolourとどんなイメージにフォームの背景を設定します。 TIL透明なBackColourは単にフォームcolor/imageを使用します。 Tommyは実際にここで正しい答えを持っていますが、これが私の問題(怠惰な方法)を修正するためにしたものです。

関連する問題