2

私は単純なゲーム - ヘビを書いています。背景と私のヘビを入れたいと思います。最良の方法は、2 つの pictureBox を使用することだと思います (1 つは背景付きで、もう 1 つは蛇が透明になっています)。

これは良い方法ですか?そして、いくつかの小さな画像(ヘビのセグメント)を1つの画像ボックスの異なる場所に配置するにはどうすればよいですか(画像から画像ボックスにピクセル(1つずつ)をコピーするか、すべての画像を正しい場所に配置する最速の方法があります)?背景(親)と別の透明(子)を持つpictureBoxがあります。

結果は次のようになります。

サンプル画像

私はそのようなものを作成しました (@dotTutorials のおかげで) が、私のヘビのセグメントは元の画像よりも少し大きく、クッキーは小さくなっています。どこが問題になる可能性がありますか?

描画コード:

public Bitmap PrinPlayground()
{

    char[,] tempPitch = play.getPitch();

    Graphics g = pb2.CreateGraphics();
    Bitmap bitmap = new Bitmap(512, 512);
    Graphics BBG = Graphics.FromImage(bitmap);

    Bitmap head = CookieSnake.Properties.Resources.head;
    Bitmap body01 = CookieSnake.Properties.Resources.body01;
    Bitmap tail = CookieSnake.Properties.Resources.tail;
    Bitmap cookie = CookieSnake.Properties.Resources.cookie;

    BBG.Clear(Color.Transparent);

    for (int i = 0; i < 16; i++)
        for (int j = 0; j < 16; j++)
        {
            if (tempPitch[i, j] == 'H')
            {
                BBG.DrawImage(head, new Point(32*j, 32*i));
            }
            else if (tempPitch[i, j] == 'B')
            {
                BBG.DrawImage(body01, new Point(32*j, 32*i));
            }
            else if (tempPitch[i, j] == 'T')
            {
                BBG.DrawImage(tail, new Point(32 * j, 32 * i));
            }
            else if (tempPitch[i, j] == 'C')
            {
                BBG.DrawImage(cookie, new Point(32 * j, 32 * i));
            }
        }
    g.DrawImage(bitmap, new Point(0,0));
    return bitmap;
}

結果:

ここに画像の説明を入力

4

1 に答える 1

4

これを実現する最善の方法は、'Graphics' クラスを使用することです。GDI と名前空間をさらに調べてくださいSystem.Drawing

ゲーム スペースを表す Picturebox を使用する場合は、メンバーを呼び出すことで、picturebox にグラフィックを簡単に実装することもできますCreateGraphics

これがお役に立てば幸いです。:) 本格的なゲーム開発に着手するときは、GDI よりも優れた代替手段を見つける必要があることに注意してください。個人的には XNA ライブラリの方が好きです

GDI の使用例 [これは速く書いたので、コピーして貼り付けてはいけません。でも; それは良い原点です:)]

    Graphics g = pictureBox1.CreateGraphics();
    Bitmap BB = new Bitmap(pictureBox1.Width, pictureBox1.Height);
    Graphics BBG = Graphics.FromImage(BB);

    Bitmap Background = (Bitmap)Bitmap.FromFile("BackgroundPicture.png");
    Bitmap Head = (Bitmap)Bitmap.FromFile("SnakeHead.png");
    Bitmap Tail = (Bitmap)Bitmap.FromFile("SnakeTail.png");

    Point snakeLocation = new Point((BB.Width / 2) - (Head.Width / 2), (BB.Height / 2) - (Head.Height / 2));


    while (true) {
        #region Update
        // update method here!
        snakeLocation.X += 1;
        #endregion

        #region Draw
        BBG.Clear(Color.CornflowerBlue);
        BBG.DrawImage(Background, new Point(0, 0));

        BBG.DrawImage(Head, snakeLocation);
        BBG.DrawImage(Tail, new Point(snakeLocation.X - Head.Width, snakeLocation.Y));

        g.DrawImage(BB, new Point(0, 0)); // draw to screen
        #endregion
    }

更新: DrawImage メソッドは、RectangleF 入力も受け入れます。RectangleF は、float X、float Y、float Width、float Height の 4 つのデータ型で構成されます。

RectangleF を使用すると、描画される画像のサイズを簡単に指定できます。以下のコードを見てください。

public Bitmap PrinPlayground() {

            char[,] tempPitch = play.getPitch();

            Graphics g = pb2.CreateGraphics();
            Bitmap bitmap = new Bitmap(512, 512);
            Graphics BBG = Graphics.FromImage(bitmap);

            Bitmap head = CookieSnake.Properties.Resources.head;
            Bitmap body01 = CookieSnake.Properties.Resources.body01;
            Bitmap tail = CookieSnake.Properties.Resources.tail;
            Bitmap cookie = CookieSnake.Properties.Resources.cookie;

            BBG.Clear(Color.Transparent);

            for (int i = 0; i < 16; i++)
                for (int j = 0; j < 16; j++) {
                    if (tempPitch[i, j] == 'H') {
                        BBG.DrawImage(head, new RectangleF(new Point(32 * j, 32 * i), new SizeF(/*Adjust the size after your pleasure*/32, 32)));
                    }
                    else if (tempPitch[i, j] == 'B') {
                        BBG.DrawImage(body01, new RectangleF(new Point(32 * j, 32 * i), new SizeF(32, 32)));
                    }
                    else if (tempPitch[i, j] == 'T') {
                        BBG.DrawImage(tail, new RectangleF(new Point(32 * j, 32 * i), new SizeF(32, 32)));
                    }
                    else if (tempPitch[i, j] == 'C') {
                        BBG.DrawImage(cookie, new RectangleF(new Point(32 * j, 32 * i), new SizeF(/*Half the size of the head [Adjust after your needs!]*/32 / 2, 32 / 2)));
                    }
                }
            g.DrawImage(bitmap, new Point(0, 0));
            return bitmap;
        }
    }
于 2012-12-21T21:40:10.420 に答える