gpt4 book ai didi

c# - 将图像添加到 pictureBox

转载 作者:行者123 更新时间:2023-11-30 21:01:37 28 4
gpt4 key购买 nike

我正在编写一个简单的游戏 - 贪吃蛇。我想要背景和我的蛇。我认为最好的方法是使用两个 pictureBox(一个有背景,第二个 - 透明,上面有蛇)。

这是个好办法?以及如何将几个小图像(蛇的片段)放在不同位置的一个图片框上(只需将像素(一个接一个)从图像复制到 pictureBox 或者也许有最快的方法 - 将所有图像放在正确的位置)?我现在有带背景(父级)和另一个透明(子级)的 pictureBox。

结果应该是这样的:

sample Image

我做了类似的东西(感谢@dotTutorials),但我的蛇的片段比原始图像大一点,cookie 更小。哪里会出问题?

绘图代码:

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;
}

结果:

enter image description here

最佳答案

实现此目的的最佳方法无疑是使用“图形”类。请进一步查看 GDI 和命名空间 System.Drawing .

如果您想使用代表游戏空间的 Picturebox,您也可以通过调用成员 CreateGraphics 轻松地将图形实现到 picturebox。

希望对你有帮助! :)请注意,当您开始严肃的游戏开发时,您必须找到比 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 由 4 种数据类型组成,float X,float Y,float Width 和 float Height。

使用 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;
}
}

关于c# - 将图像添加到 pictureBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13997509/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com