C64Power Forum

Ogólne => Forum Ogólnodyskusyjne => Wątek zaczęty przez: BagoZonde w 11 Października 2011, 11:39

Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: BagoZonde w 11 Października 2011, 11:39
Witam! Otworzyłem sobie górną i dolną ramkę, do górnej wrzuciłem sprite'a. U góry wyświetla się elegancko. Niestety część tego sprite'a widoczna jest w dolnej części wyłączonej ramki. Problem występuje gdy pozycja Y sprite'a jest mniejsza od 31. Włączenie i wyłączenie ramki realizuję w rasterliniach $f8 i $00 na zmianę wyłączając i włączając 3-ci bit w $d011. Próbowałem w rasterlinii $f8 wyłączyć po prostu sprite'a i włączyć go z powrotem gdy ekran rysowany jest od góry - ale bez powodzenia - nadal kawałek sprite'a widoczny jest na dole (np: dla pozycji Y=30 widoczny jest 1 piksel sprite'a od góry, a dla pozycji Y=29 widoczne są 2 piksele itd.).

Co to może być? Wygląda na jakąś prawidłowość ;).
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: uka w 11 Października 2011, 23:12
W nieodpowiednim momencie wyłączasz/włączasz sprajta. Nie wiem jak wygląda twoja procka, ale ja kiedyś się zapomniałem i włączałem przy nie tej co trzeba było zerowej wartości $d012 (nie sprawdzałem najstarszego bitu raster w $d011 i zamiast zerowej linii miałem 256) Jak widać górny fragment sprajta to za późno wyłączasz jak dolny za wcześnie włączasz.
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: BagoZonde w 12 Października 2011, 01:13
No przecież! Bułka z masłem, rzeczywiście za późno wyłączałem. Dzięki za cynk uka!!
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: Skull w 15 Października 2011, 19:48
Znów za późno odczytuję temat
można też "zwyczajnie "gdzies go przenieść (np. na tą chwile ustawić go w d010, przy okazji bedziesz widzial czy robisz to za późno), zmienić kolor na tła, pusty kształt, zasłonić itd.

Prawda jest też taka, że jak wyświetli się pierwsza linia sprite, to nawet jak go w niej zaraz wyłączysz to pozostałe liniie spritea jeszcze i tak się wyswietlą - dopiero po nich jest on wyłączony.
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: BagoZonde w 15 Października 2011, 21:36
Tak, dzięki inc/dec $d020 odmierzam sobie ile coś zajmuje czasu w ramce, właśnie walczę z algorytmem kopiowania bitmapy, żeby robić płynne animacje nie-sprite'owe bo sprite'y i muza chodzą w tym czasie elegancko. Bez kopiowania koloru się mieści, ale już jak tej bitmapce multicolorowej dokoptuję kolor to wyskakuje za ramkę. Oczywiście jadę unrolled głównie i automodyfikacją ale jeden loopik się też niestety trafił. Próbowałem też z frameskipping, sobie testuję możliwości c64 i swoich przy okazji ;). Teoretycznie można by swapować jednego sprite'a na ramkę i tak "obsługiwać" np: 32. Dziś właśnie próbowałem coś takiego zrobić z "wyłapywaniem" sprite'ów, ale jednak własne rozwiązanie (bardzo oszczędne ale jednak z pętelką) nie sprawdziło się, sprite'y nie zdążyły się switchować w wąskim gardle. Dopiero po chwili dotarło do mnie, że chciałem zrobić multiplexer 32 :D a z tym co prezentuję na tym etapie to powinienem tekstówkami się zająć :D. Sporo jest możliwości, samemu drążę tematy, nie to, że wyważam otwarte drzwi, po prostu próbuję i przy okazji nabieram ogłady z hexami, ze skokami beq *+x cykli itd. \"\". Pracuję nad mini grą, która ma poprzedzić mniej wymagającego technicznie (ale zawsze) Meonlawela. Chciałem z nią zdążyć na RGCD puszczając w wersji 16k ale mam szanse 50/50 \"\".

Viva Commodore!
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: V-12/Tropyx w 15 Października 2011, 23:13
Jeżeli bitmapa zajmuje cały ekran, to nie musisz nic kopiować, wystarczy przełączać banki.
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: BagoZonde w 15 Października 2011, 23:16
V-12/Tropyx
Pardon, chodziło mi o blok, dokładnie 6x5 kwadratów w trybie multicolor (nie wiem jak się to podaje w tym formacie, czy nibble robi za jeden piksel czy za dwa) ale wygospodarowałem sobie sporo wolnych cykli więc dam radę ;).
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: V-12/Tropyx w 15 Października 2011, 23:40
No to faktycznie jest z tym trochę zabawy. Może spróbuj adresowanie pośrednie na stronie zerowej. 6x5 to nie jest aż taki duży obszar do przenoszenia.
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: BagoZonde w 15 Października 2011, 23:49
V-12/Tropyx
Zerowa na bank, spróbuję jeszcze frameskipping zastosować - w jednej ramce bitmapkę a w drugiej colormem i videomem - z tym, że musi to być całkowicie niezauważalne przez oko ludzkie ;). Jeżeli PAL i jeżeli 50 klatek na sekundę, to w około 16-stu powinno spokojnie wystarczyć, ale zauważyłem, że to jakoś inaczej działa, muszę z tym poeksperymentować, jeszcze nie wiem co mogę z tego wycisnąć.
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: Skull w 16 Października 2011, 07:52
BagoZonde
\"\", muszę przyznać że tworzysz juz pewien folklor pisarsko-programistyczny na tym forum. Z zaciekawieniem wypatruje kolejnych postów i z zacięciem je czytam, choć nie zawsze mogę zrozumieć co piszesz. Jeśli chodzi o liczbę słów zapożyczanych z jezyków obcych (tu angielski) jesteś niekwestionowanym liderem statystyki - prawie co drugie słowo w twoich postach, jest właśnie tego typu.

Moze spróbuj stworzyć te swoje animacje na generatorze znaków (Charset, Chargenerator)

A wogóle to polecam jednak zagłębić się w literaturę z lat 90-tych, bo jest w niej dużo artykułów i kursów o sprawach które cały czas mozolnie odkrywasz (C&A, Kebab, 64plus4).
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: BagoZonde w 16 Października 2011, 11:15
Skull
Haha, wcale nie dziwi mnie fakt skąd takie zapożyczenia, skoro przez większość czasu przebywam na CSDB, codebase64 i czytam zagraniczną literaturę. Zresztą jednak po polsku jest mniej tego, na zagramanicznych więcej rzeczy znalazłem do tej pory. Ale Kebaba rzeczywiście nie przeglądałem jeszcze (!!). Angielski jest uniwersalnym językiem ;) a jak mam napisać frameskipping: przeskakiwanie/omijanie klatek? Jeżeli będzie Cię to mniej raziło, to przestawię się na poprawną polszczyznę choć ucierpi na tym mój folklor pisarsko-programistyczny \"\".

Co do animacji to mogę wrzucać charseta na bitmapę multicolor? Myślałem, że w trybie bitmap multicolor jest to niemożliwe bo to w końcu bitmapa (#$3b do $d011, #$18 do $d016 no i bank: #$3a do $d018).
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: Kisiel w 16 Października 2011, 14:53
ja wymiękam \"\" Skull pokaż twardość.
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: V-12/Tropyx w 16 Października 2011, 17:33
BagoZonde:
Co do animacji to mogę wrzucać charseta na bitmapę multicolor?

Wrzucać możesz, ale będziesz miał kaszanę \"\" jak jestesś w trybie graficznym no to nie możesz wyświetlać fontów :D
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: Kisiel w 16 Października 2011, 19:18
obczaj konwertery do znaków.
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: BagoZonde w 16 Października 2011, 21:46
Kisiel
No konwersją znaków sam się bawiłem ale w trybie bitmapy charsetów nie zobaczę przecież.
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: Skull w 17 Października 2011, 09:33
a jakby tak zamiast fontów zrobić kawałeczki bitmapy ?
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: V-12/Tropyx w 17 Października 2011, 10:02
hehe no właśnie od bitmapy się zaczęło. Problem polega na tym, że zapewne BagoZonde chce przepisywać bitmapę np. w środku ekranu. Wiele efektów na C64 jest w ten sposób robionych. Zostanie Ci raczej próba przyśpieszenia procedury przepisującej, bo innej opcji nie widzę.
Tytuł: Sprite w górnej ramce - problem
Wiadomość wysłana przez: BagoZonde w 17 Października 2011, 10:12
V-12/Tropyx
No właśnie muszę przyspieszyć (a chciałem napisać zboostować :D) kopiowanie bloków, dlatego też spróbuję z pomijaniem klatek (miało być: frameskipping :D) - w jednej ramce będzie kopiowanie np: bitmapy czyli do $e000, a w drugiej będzie kopiowanie kolorków. Oczywiście ważne jest czy kopiuje się to na dole czy na górze, więc spróbuję to jakoś pogodzić biorąc pod uwagę fakt, że takich bloków do puszczenia w ruch może być więcej więc i tak będę musiał je kolejkować. Możliwe, że po prostu zrobię tylko kopiowanie bitmapy a kolory będą musiały być niezmienne.