有没有办法在Allegro 4.2中通过x和y移动形状?

时间:2012-06-30 08:29:17

标签: 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;
}

由于

2 个答案:

答案 0 :(得分:0)

您需要使用缓冲区。

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

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

此外,我强烈建议使用Allegro 5,因为它是积极开发的,并且具有更适合现代硬件的API。

答案 1 :(得分:0)

正如Matthew所说,你想使用一个缓冲区,就像一个虚拟屏幕,你可以在屏幕上显示你想要 >之前的所有位图,它必须是相同的大小作为你的屏幕尺寸。

忘记TempXTempY,而不是调用circlefill (screen, x, y, 20, makecol(0,0,255)),而是首先创建一个位图(通常名为缓冲区,呵呵......)从现在开始直接将所有图形绘制到它,所以不要使用screen使用buffer。当你完成每一帧时,你就会" blit"像这样缓冲到屏幕:

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

然后你只需拨打clear_bitmap(buffer)并再次开始绘制并重复。这样你就不必跟踪一个物体以前的位置来擦除它再次在它的新位置再次绘制之前,想象一下如果不是黑色背景而你必须擦除并用另一块每次搬东西时都会有位图?