在太空侵略者中爆破黑色圆圈

时间:2015-02-23 20:30:08

标签: c++ algorithm 2d marmalade

我正在尝试克隆太空入侵者,与绿色障碍相撞。 https://www.youtube.com/watch?v=bLAhmnCZym4

现在我可以访问绿色屏障的像素 我想在子弹的碰撞点周围绘制一个坚实的黑色圆圈,现在我正在使用下面的代码,但是它会传播随机像素,而不是纯黑色圆圈,它的中心是子弹的击中点 结果如下所示: http://i.stack.imgur.com/mpgkM.png

int radius = 50;
            for (int y = -radius; y <= radius; y++)
            {
                for (int x = -radius; x <= radius; x++)
                {
                    if (x*x + y*y <= radius*radius)
                    {
                        int j = x + normX;
                        int i = y + normY;
                        uint8 pixelOffset = j + i;
                        ptr += pixelOffset;
                        *ptr = 0xff000000;
                    }
                }
            }

1 个答案:

答案 0 :(得分:0)

像素通常以光栅顺序存储,因此您需要更改

uint8 pixelOffset = j + i;

int pixelOffset = j + i*pitch;

其中pitch是图像的宽度。

此外,每次写一个像素时,你都会将ptr移动到一个新的位置,这样就得到了一条对角线。

替换

                    ptr += pixelOffset;
                    *ptr = 0xff000000;

                    ptr[pixelOffset] = 0xff000000;