对于一个项目,我正在制作游戏,在其中我有一个滚动地图。地图左右移动并在图片框中重绘,以便我可以在小图片框中放置一张大地图。地图的顶部是透明的,以便我可以稍后改变天空颜色。但是,当我移动地图时,透明部分会出现故障。
正如您所看到的,树线上方的所有内容都会被拉伸,这是因为这是透明度开始的地方。图片框的父母是表格,表格是浅蓝色,这就是背景为浅蓝色的原因。
这是我移动图片/将其重新绘制到图片框上的代码:
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;
}
}
}
任何人都可以帮助解释故障吗?
答案 0 :(得分:1)
在g.Clear()
来电之前尝试使用您的天空颜色调用g.DrawImage()
。我认为它只是在自身的顶部,这导致了涂抹。
答案 1 :(得分:0)
对我来说,似乎你在不清除上一次抽奖的显示时反复重绘!您使用什么类型的框架来开发它?它有自定义绘图类吗?正如tesserex建议更具体地调用g.Clear(),你会没事的。
答案 2 :(得分:0)
在这种情况下,您不应该g.Clear
,因为您每次都要重新绘制新图像。
我敢打赌 imageX 大于(imageWidth - pbMap.Width)所以它不会进入 IF ,因此它会重绘与以前一样。
注意:我不知道如何创建 g ,但如果您使用.CreateGraphics()
,请不要忘记Dispose()
干杯