在space个入侵者中爆破黑圈
Blasting black circle in space invader
我正在尝试克隆space入侵者,与绿色屏障碰撞。
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;
}
}
}
像素通常按光栅顺序存储,因此您需要更改
uint8 pixelOffset = j + i;
至
int pixelOffset = j + i*pitch;
其中间距是图片的宽度。
此外,每次写入一个像素时,您都会将 ptr 移动到一个新位置,因此您会得到一条对角线。
替换
ptr += pixelOffset;
*ptr = 0xff000000;
和
ptr[pixelOffset] = 0xff000000;
我正在尝试克隆space入侵者,与绿色屏障碰撞。 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;
}
}
}
像素通常按光栅顺序存储,因此您需要更改
uint8 pixelOffset = j + i;
至
int pixelOffset = j + i*pitch;
其中间距是图片的宽度。
此外,每次写入一个像素时,您都会将 ptr 移动到一个新位置,因此您会得到一条对角线。
替换
ptr += pixelOffset;
*ptr = 0xff000000;
和
ptr[pixelOffset] = 0xff000000;