. Niebieska część to rozmiar bitmapy, a czerwona część to tyle, co widzimy na ekranie. Idąc ludzikiem w prawo bitmapa przesuwa się w lewo (a ludzik stoi na ekranie w miejscu). Gdy bitmapa przesunie się o 16 pikseli, to wraca na swoją pozycję 'zero', czyli (16,16), kopiowana jest część bitmapy o rozmiarze (320+16)*(256+2*16) z pozycji 16,0 do pozycji 0,0, a w prawym górnym rogu zaczyna się dogrywanie kolejnych kafli, czyli Block nr_kafla#,336,0.@tukinem, post #1

@teh_KaiN, post #2
@jarek72, post #3
@teh_KaiN, post #2

@tukinem, post #5
@teh_KaiN, post #2
Wytłumaczenie scrollowania po X już jest trudniejsze, nazywa się "corkscrew scrolling" i jak nie w archiwum ScrollingTrick to znajdziesz informacje po tym haśle w necie.
Laik nie zrozumie, ale łatwiej jest krok po kroku wytłumaczyć, kolejno pod jaki adres pamięci jakie liczby powstawiać i jak je wyliczyć sobie. Nie oczekuję gotowca, tylko w miarę możliwości gdyby ktoś wytłumaczył krok po kroku jaką dużą bitmapę stworzyć, jak przesuwać copperem bitmapę, jak działa corkscrew scroll itp.
void scrollVPort(struct ViewPort *vp, WORD dx, WORD dy)
{
struct RasInfo *ri = vp->RasInfo;
DrawInvisibleColumn(ri->RxOffset + vp->DWidth);
DrawInvisibleRow((ri->RyOffset - 16) % 512);
DrawInvisibleRow((ri->RyOffset + vp->DHeight) % 512);
ri->RxOffset += dx;
ri->RyOffset += dy;
if (ri->RxOffset < 0)
{
ri->RyOffset--;
ri->RxOffset += vp->DWidth;
}
else if (ri->RxOffset >= vp->DWidth)
{
ri->RyOffset++;
ri->RxOffset -= vp->DWidth;
}
if (ri->RyOffset < 0)
{
ri->RyOffset += vp->DHeight;
}
else if (ri->RyOffset >= vp->DHeight)
{
ri->RyOffset -= vp->DHeight;
}
ScrollVPort(vp);
} @Hexmage960, post #7
@tukinem, post #8
Wszystkie te przykłady z podwójnymi rozmiarami bitmap chyba służą tylko do scrolla w jedną stronę, tzn przykładowo w Giana Sisters. Mnie chodzi o scroll w wszystkich kierunkach a'la SuperFrog.
@jarek72, post #9
Wszystkie te przykłady z podwójnymi rozmiarami bitmap chyba służą tylko do scrolla w jedną stronę, tzn przykładowo w Giana Sisters. Mnie chodzi o scroll w wszystkich kierunkach a'la SuperFrog. Myślę, myślę i nie potrafię tego za bardzo zrozumieć.
@teh_KaiN, post #14
@selur, post #13
@teh_KaiN, post #11
No, tylko generowanie całej drugiej bitmapy w 16 klatkach często nie jest możliwe z tego względu, że oprócz tego w klatce musisz zrobić masę innych rzeczy - animować przeciwników, przeliczyć logikę gry itd. Najlepsze rozwiązania są takie, które wymagają tylko odrysowania jednego rzędu/kolumny w tym czasie, wprowadzając minimalny narzut do gry.
@tukinem, post #16

@tukinem, post #16
@teh_KaiN, post #20


@tukinem, post #23
@tukinem, post #19
zajmie w chip ramie 51kB więc ograniczenia raczej żadne
@tukinem, post #26
@teh_KaiN, post #27
@teh_KaiN, post #29