C# 在picturebox中移动透明图像
对于一个项目,我正在制作一个游戏,其中有一个滚动地图。地图向左和向右移动,并在一个图片框中重新绘制,这样我就可以在一个小图片框中有一个大地图。地图的顶部是透明的,这样我以后可以改变天空的颜色。但是,当我移动贴图时,透明部分会出现小故障 正如您所看到的,树线上方的所有内容都会被拉伸,这是因为这是透明度的起点。picturebox的父对象是窗体,窗体为浅蓝色,这就是背景为浅蓝色的原因 以下是我将图片移动/重新绘制到picturebox上的代码:C# 在picturebox中移动透明图像,c#,transparency,picturebox,C#,Transparency,Picturebox,对于一个项目,我正在制作一个游戏,其中有一个滚动地图。地图向左和向右移动,并在一个图片框中重新绘制,这样我就可以在一个小图片框中有一个大地图。地图的顶部是透明的,这样我以后可以改变天空的颜色。但是,当我移动贴图时,透明部分会出现小故障 正如您所看到的,树线上方的所有内容都会被拉伸,这是因为这是透明度的起点。picturebox的父对象是窗体,窗体为浅蓝色,这就是背景为浅蓝色的原因 以下是我将图片移动/重新绘制到picturebox上的代码: private void timerTick_Ti
private void timerTick_Tick(object sender, EventArgs e)
{
move();
//Draws new portion of the map
g.DrawImage(image, new Rectangle(0, 0, pbMap.Width, pbMap.Height), new Rectangle(imageX, imageY, pbMap.Width, pbMap.Height), GraphicsUnit.Pixel);
//Refreshes
pbMap.Image = bmp;
}
private void move()
{
//Right arrow events
if (right)
{
imageX += mapSpeed;
//Makes sure the picture stays within borders
if (imageX >= (imageWidth - pbMap.Width))
{
imageX = imageWidth - pbMap.Width;
}
}
//Left arrow events
if (left)
{
imageX -= mapSpeed;
//Makes sure the picture stays within borders
if (imageX <= 0)
{
imageX = 0;
}
}
}
private void timerTick_Tick(对象发送方,事件参数e)
{
move();
//绘制地图的新部分
g、 DrawImage(图像,新矩形(0,0,pbMap.Width,pbMap.Height),新矩形(imageX,imageY,pbMap.Width,pbMap.Height),GraphicsUnit.Pixel);
//刷新
pbMap.Image=bmp;
}
私人空位移动()
{
//右箭头事件
如果(右)
{
imageX+=mapSpeed;
//确保图片保持在边框内
if(imageX>=(imageWidth-pbMap.Width))
{
imageX=imageWidth-pbMap.Width;
}
}
//左箭头事件
如果(左)
{
imageX-=地图速度;
//确保图片保持在边框内
如果(imageX在我看来,您似乎在一遍又一遍地重新绘制,而没有清除上一次绘制的显示!您使用什么类型的框架来开发它?它有自定义绘图类吗?正如tesserex建议的那样,更具体地调用g.Clear()和u就可以了。尝试调用g.Clear()
在调用g.DrawImage()
之前使用天空颜色。我认为它只是在自身顶部绘制,这导致了涂抹。在这种情况下,您不需要g.Clear
,因为您每次都在绘制新图像
我敢打赌,imageX大于(imageWidth-pbMap.Width),因此它不会进入(如果),因此它会像以前一样重新绘制
注意:我不知道如何创建g,但是如果使用.CreateGraphics()
请不要忘记Dispose()
干杯