在图片框中移动透明图像

时间:2014-03-19 17:14:49

标签: c# transparency picturebox

对于一个项目,我正在制作游戏,在其中我有一个滚动地图。地图左右移动并在图片框中重绘,以便我可以在小图片框中放置一张大地图。地图的顶部是透明的,以便我可以稍后改变天空颜色。但是,当我移动地图时,透明部分会出现故障。

Original map before moving

After moving the map a bit

正如您所看到的,树线上方的所有内容都会被拉伸,这是因为这是透明度开始的地方。图片框的父母是表格,表格是浅蓝色,这就是背景为浅蓝色的原因。

这是我移动图片/将其重新绘制到图片框上的代码:

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

任何人都可以帮助解释故障吗?

3 个答案:

答案 0 :(得分:1)

g.Clear()来电之前尝试使用您的天空颜色调用g.DrawImage()。我认为它只是在自身的顶部,这导致了涂抹。

答案 1 :(得分:0)

对我来说,似乎你在不清除上一次抽奖的显示时反复重绘!您使用什么类型的框架来开发它?它有自定义绘图类吗?正如tesserex建议更具体地调用g.Clear(),你会没事的。

答案 2 :(得分:0)

在这种情况下,您不应该g.Clear,因为您每次都要重新绘制新图像。

我敢打赌 imageX 大于(imageWidth - pbMap.Width)所以它不会进入 IF ,因此它会重绘与以前一样。

注意:我不知道如何创建 g ,但如果您使用.CreateGraphics(),请不要忘记Dispose()

干杯