Форум: "Игры";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
ВнизDelphiX --- Движение спрайта Найти похожие ветки
← →
bulavkin (2006-06-27 21:16) [0]Вот пример в котором я двигаю спрайт слева направо по горизонтали
procedure TForm1.DXTimerTimer(Sender: TObject; LagCount: Integer);
var
i: integer;
begin
if not DXDraw.CanDraw then exit;
DXDraw.Surface.Fill( 0 );
for i:=0 to 700 do
begin
DXImageList.Items.Find("hero.bmp").Draw(DXDraw.Surface, i, 0, 0);
DXDraw.Flip;
end;
end;
Все работает, но есть у этого примера недостаток:
за спрайтом остается шлейф смазанный.
Откуда он берется и как от него избавиться?
Спасибо!
← →
MeF Dei Corvi © (2006-06-27 21:34) [1]
> Откуда он берется и как от него избавиться?
Не делать его? Объясните мне, что делает вышенаписанный код? Я понимаю его так:
1) каждый цикл отрисовки мы очищаем экран
2) далее выводим на него 700 копий "hero.bmp" сдвинутых на 1 пиксель вправо...
Отсюда мы получаем, что избавиться от шлейфа можно только понял код.
← →
bulavkin (2006-06-27 22:01) [2]
> MeF Dei Corvi © (27.06.06 21:34) [1]
>
> > Откуда он берется и как от него избавиться?
>
> Не делать его? Объясните мне, что делает вышенаписанный
> код? Я понимаю его так:
> 1) каждый цикл отрисовки мы очищаем экран
> 2) далее выводим на него 700 копий "hero.bmp" сдвинутых
> на 1 пиксель вправо...
> Отсюда мы получаем, что избавиться от шлейфа можно только
> понял код.
Корень ошибки мне понятен, спасибо.
Если я правельно понял теорию, то отрисовка происходит в двух буферах.
Грубо говоря основной (видимый) и задний.
Сначало изображение отрисовывается на заднем, затем буфера меняются местами делая картинку видимой.
В данном примере я пытался сделать следующие:
1. Отрисовать картинку на заднем плане
2. Поменять буфера местами (чо бы сделать картинку видимой)
3. Очистить заздий план (буфер)
4. Отрисовать на заднем плане картинку но со сдвигов на 1 пиксель вправо
Если Вас не затруднит подскажите правельное решение.
← →
n85sergey © (2006-06-27 23:52) [3]попробуй так
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_LEFT then dec(x);
if Key = VK_RIGHT then inc(x);
end;
procedure TForm1.DXTimerTimer(Sender: TObject; LagCount: Integer);
var
i: integer;
begin
if not DXDraw.CanDraw then exit;
DXDraw.Surface.Fill( 0 );
DXImageList.Items.Find("hero.bmp").Draw(DXDraw.Surface, x, y, 0);
DXDraw.Flip;
end;
← →
bulavkin (2006-06-28 00:57) [4]
> n85sergey © (27.06.06 23:52) [3]
Большое Вам спасибо.
Разобрался...
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
if not DXDraw.CanDraw then Exit;
DXDraw.Surface.Fill(0);
DXImageList.Items.Find("hero.bmp").Draw(DXDraw.Surface, x, y, 0);
DXDraw.Flip;
inc(x);
end;
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.047 c