есть ли способ перемещать фигуры по x и y в Allegro 4.2?

Я новичок в аллегро, так что это может быть простой вопрос.

Мне интересно, есть ли способ перемещать фигуры аллегро по 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;
}

Спасибо


person progc123    schedule 30.06.2012    source источник


Ответы (2)


Вам нужно использовать буфер.

После установки графического режима создайте растровое изображение размером SCREEN_W,SCREEN_H. Затем в каждом кадре очищайте это растровое изображение, рисуйте к нему синий кружок в позиции x, y, а затем рисуйте буфер на экране.

Я предлагаю вам взглянуть на множество примеров, поставляемых с Allegro, или прочитать учебные пособия, потому что есть много элементарных, но важных вещей, которые вам нужно изучить.

Кроме того, я настоятельно рекомендую использовать Allegro 5, так как он активно развивается и имеет API, гораздо более подходящий для современного оборудования.

person Matthew    schedule 30.06.2012

Как сказал Мэтью, вы хотите использовать буфер, который похож на виртуальный экран, где вы можете записать все растровые изображения, которые хотите, перед показом их на экране, он должен быть того же размера, что и ваш экран. размер.

Забудьте TempX и TempY, и вместо вызова circlefill (screen, x, y, 20, makecol(0,0,255)) вы сначала создадите растровое изображение (обычно называемое buffer, хех..), и с этого момента вы рисуете всю свою графику непосредственно в нем, поэтому не используйте screen, используйте buffer. Когда вы заканчиваете каждый кадр, вы «выводите» этот буфер на экран следующим образом:

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

а затем вы просто вызываете clear_bitmap(buffer) и снова начинаете рисовать к нему и повторяете. Таким образом, вам не нужно отслеживать предыдущее положение объекта, чтобы стереть его, прежде чем рисовать его снова в новом положении, представьте себе удар процессора, если вместо черного фона вам нужно будет стереть и заполнить фон другим фрагментом. растровое изображение каждый раз, когда вы что-то перемещаете?

person rlam12    schedule 26.04.2014