1

我是 allegro 的新手,所以这可能是一个简单的问题。

我想知道是否有一种方法可以将快板形状移动 x,y 而不用填充我用黑色圆圈制作的圆圈并制作一个新圆圈。

目前我有一个while循环,通过移动用黑色圆圈填充当前圆圈并用x和y制作一个新的圆圈来移动圆圈,这有点不同我想知道是否有办法移动快板形状x,y 因为它似乎让我的游戏变慢了。

这是当前使用这种方式的时间:

int x=100;
int y = 100;
int tempX,tempY; 
 while(1)
{
tempX=x;
tempY=y;
    circlefill ( screen, tempX, tempY, 20, makecol( 0,0, 0));
    circlefill ( screen, x, y, 20, makecol( 0, 0, 255))
x+=10;
y+=10;
}

谢谢

4

2 回答 2

0

您需要使用缓冲区。

设置图形模式后,创建一个SCREEN_W,SCREEN_H大的位图。然后在每一帧上,清除该位图,在 处绘制蓝色圆圈x, y,然后将缓冲区绘制到屏幕上。

我建议您查看 Allegro 附带的许多示例或阅读教程,因为您需要学习许多基本但重要的东西。

另外,我强烈推荐使用 Allegro 5,因为它是积极开发的,并且有一个更适合现代硬件的 API。

于 2012-06-30T15:49:49.100 回答
0

正如 Matthew 所说,您想使用缓冲区,它就像一个虚拟屏幕,您可以在其中写入所有想要的位图,然后再将其显示在屏幕上,它的大小必须与您的屏幕大小相同。

忘记TempXand TempY,而不是circlefill (screen, x, y, 20, makecol(0,0,255))先调用你制作一个位图(通常命名为buffer,呵呵..),从现在开始你将所有图形直接绘制到它,所以不要使用screenuse buffer。当你完成每一帧时,你把这个缓冲区“blit”到屏幕上,如下所示:

blit(buffer, screen, 0, 0, 0, 0, buffer->w, buffer->h);

然后你只需调用clear_bitmap(buffer)并再次开始绘制并重复。这样,您不必跟踪对象先前的位置以在将其再次绘制到新位置之前将其擦除,想象一下如果您必须擦除而不是黑色背景并用另一块填充背景,CPU 将会受到打击每次移动某物时生成一个位图?

于 2014-04-26T02:38:46.327 回答