kategoria: Blitz
[#61] Re: Nauka Blitz Basic

@pch, post #60

OK.
Teraz załadowałem sobie IFF z bobami do wycięcia, ale nie wchodziłem do trybu BLITZ. Ładnie wyświetliło, poza tym, że wskaźnik myszy został na ekranie.

Z manuala wyczytałem, że aby użyć trybu Dual Playfield muszę użyć flagi nr 1, czyli to będzie Slice 0,44,1? Bo rozumiem, że składnia jest następująca:
Slice,Y,flaga
[#62] Re: Nauka Blitz Basic

@tukinem, post #61

Tu już zostawiam temat do ogarnięcia dla Ciebie bo ja nigdy nie używałem SLICE, mam a1200 więc wybór padł oczywiście na komendy z DISPLAY library
[#63] Re: Nauka Blitz Basic

@pch, post #62

Wspominałeś kiedyś już o Display w tym wątku, ale w manualu nic nie widziałem na ten temat. To jest używanie biblioteki display.library, tak?
[#64] Re: Nauka Blitz Basic

@tukinem, post #63

W manuału (ale nie ' reference' tylko tym drugim) jest cały rozdział na ten temat.
Oni to tam akurat nazywają display library. Jest to poszerzenie, ulepszenie komend SLICE dla amig z trybami AGA
[#65] Re: Nauka Blitz Basic

@pch, post #64

Tu jest chyba odmłodzona paczka instalavyjna ze wszystkimi bibliotekami

http://ubb.plus/
[#66] Re: Nauka Blitz Basic

@mateusz_s, post #65

Dzięki
[#67] Re: Nauka Blitz Basic

@pch, post #64

Hej.

Mam kolejne 2 pytanka. Oto mój kod:
WBStartup

AMIGA
BitMap 0,320,200,3
LoadBitMap 0,"obrazek,0

BLITZ
Slice 0,44,320,200,$fff8,3,8,8,320,320 : ;uzycie skroconej wersji Slice przy rozdzialce 320x200 powoduje krzaczki na ekranie
Use BitMap 0
BitMapOutput 0
Use Palette 0
Show 0

Mouse On : ;uruchomienie myszy w trybie BLITZ
GetaShape 1,1,19,16,16 : ;wyciecie grafiki dla wskaznika myszy

Repeat

Locate 0,23
Colour 1,0
Print MouseX:Print"  ":Print MouseY:Print"  " : ;wyswietlenie pozycji wskaznika myszy
Blit 1,MouseX,MouseY

Until RawStatus($45) : ;wyjscie przez ESC
End


I teraz pytania:
1. Jak w trybie BLITZ wstawić mysz? Z tego co wyczytałem, to trzeba użyć Mouse On oraz tak jak zrozumiałem komendą GetaSprite ustawić sprajta z wyciętego shape'a, a następnie komendą Pointer ustawić wskaźnik myszy, jednak zawsze przy pointer wyskakuje mi syntax error. Tak jakbym używał złej składni

2. Jak wstawić shape'a jako obiekt ruchomy, a nie jako dorysowywanie blitterem? Tu użyłem w kodzie komendy Blit żeby sprawdzić czy to będzie działać przy ruchu myszą, jednak chodziło mi o coś w stylu komendy amosowej Bob a nie Paste Bob.
[#68] Re: Nauka Blitz Basic

@tukinem, post #67

Dodałem sobie jeszcze komendę MouseArea 0,0,305,185 aby nie wywalało błędu po wyjechaniu myszą poza ekran. Takie proste komendy ogarniam jeszcze
[#69] Re: Nauka Blitz Basic

@tukinem, post #68

Już sobie poradziłem mniej więcej. To znaczy, wskaźnik jest. Nie potrafię ustawić mu innych kolorów. Kolory 17,18,19 nie są możliwe do ustawienia przy palecie 16-kolorowej. Ogólnie zrobiłem tak:
1. Ekran zmieniłem na 16-kolorowy, który kiedyś i tak będę musiał zmienić na 8 kolorów aby użyć Dual-Playfieldu.
2. Wyciąłem shape'a o numerze "0" ze wskaźnikiem myszy
3. GetaSprite 0,0
4. Pointer 0,1 - nr sprajta użyłem jako 1, bo wtedy jest taki lekko szarawy a nie całkiem biały

Czy da się jakoś ustawić ręcznie kolory dla sprajtów skoro np. RGB 17,$f,$f,$f powoduje błąd przez 16-kolorową paletę?

No i powtarzam pytanie o wstawianie shape'a jako "boba" a nie "paste bob". Sorki za wyrażanie "amosowe".


PS. Napisałem już wycinanie shape'ów dla gry i muszę pochwalić BlitzBasic za szybkość w Amosie ekran z grafiką trochę widniał na ekranie, zanim się wszystko powycinało do pamięci, a tu jest krótkie mignięcie na ekranie. Wszystko ładnie szybko działa

Ostatnia aktualizacja: 20.09.2022 18:36:29 przez tukinem
[#70] Re: Nauka Blitz Basic

@tukinem, post #69

Czy da się jakoś ustawić ręcznie kolory dla sprajtów skoro np. RGB 17,$f,$f,$f powoduje błąd przez 16-kolorową paletę?


Może PalRGB zadziała?
[#71] Re: Nauka Blitz Basic

@forge, post #70

To chyba nie to
[#72] Re: Nauka Blitz Basic

@tukinem, post #71

myślę że jak ładujesz obrazek (od razu z paletą) to tam masz tylko 8 albo 16 kolorów. więc paleta któŸa tworzy się w tym przypadku automatycznie nie ma koloru o indeksie 17 i wyższych.
zainicjuj sobie paletę np o 32 kolorach wcześniej niż ładowanie obrazka i powinno zadziałać ustawianie kolorów dla indeksów wyższych niż 17.
[#73] Re: Nauka Blitz Basic

@c64portal, post #72

Udało się, ale pogmatwałem strasznie szeroki uśmiech
Najlepsze jest to, że użyłem czegoś takiego, co nie sądziłem że to możliwe:
Slice 0,44,320,200,$fff8,4,8,32,320,320

Tu jest Slice, który ma 4 bitplany i 32 kolory, czego nie potrafię pojąć dzięki temu wczytuje się IFF jako 16-kolorowy do 4 bitplanów, ale Slice ma 32 kolory, dzięki czemu mogę zmieniać kolory 16-31. Wpadłem na to, sprawdzając opis komendy Slice i nie dało mi spokoju to, że osobno ustawia się bitplany i osobno ilość kolorów. Ciężko mi to zrozumieć, że to działa.
[#74] Re: Nauka Blitz Basic

@tukinem, post #73

Soko_blitz

Udało mi się ustawić kolory i wstawić przemieszczanie sprajta po planszy tytułowej

Kolory są ustawione tylko po wciśnięciu "C". Resztę ustawień zostawię sobie na jutro. Nie wiem czemu, gdy wstawiłem mysz jako sprajt nr 0, to dopiero oprócz kursora wyświetlał się sprajt nr 4 i koniec. Po wyłączeniu "Mouse On" pokazuje się naraz sprajt nr 0, nr 2 i nr 4. Od 5 wzwyż wyskakuje błąd. A powinno być 8 sprajtów maksymalnie (4 16-kolorowe). Tu mi wyświetla albo 3 naraz bez myszy albo mysz i jeden sprajt. Dziwne.
[#75] Re: Nauka Blitz Basic

@pch, post #62

OK. Zacząłem powoli od początku. Przeszedłem ze Slice na Display i teraz tak:
1. Nie potrafię ręcznie wpisywać kolorów, bo nie działa komenda RGB nr,$R,$G,$B. Jaki jest zamiennik dla Display? Może DisplayRGB?
2. Nie mogę wczytać sprajta. Pisze, że shape musi mieć 4 lub 16 kolorów. Mam tak mniej więcej:
WBStartup
grafika$="plik_iff"
BitMap 3,320,200,4
LoadBitMap 3,grafika$,1

BLITZ
InitCopList 0,44,200,4,8,16,0
CreateDisplay 0,0
DisplayPalette 0,1
DisplayBitmap 0,3
BitMapOutput 0
;RGB 2,$f,$f,$f ->błąd chyba przez użycie Display zamiast Slice
GetaShape 12,..........
;GetaSprite 0,12 ->wychodzi błąd odnośnie ilości kolorów
;ShowSprite -> nie wiem czy zadziała na Display


chyba, że do wczytywania shape'ów użyć Slice, wczytać sprajty, a później zamknąć Slice i otworzyć CopList?

Ostatnia aktualizacja: 23.09.2022 18:59:06 przez tukinem
[#76] Re: Nauka Blitz Basic

@tukinem, post #75

zapomnij o Slice. PRzemęcz się raz z Display a potem już będzie łatwiej.
do ustawienia koloru jeśli się nie mylę jest PalRGB.
a ile kolorów ma plik_iff? bo może znowu tutaj jest problem jak próbujesz shape przerobić na sprite
[#77] Re: Nauka Blitz Basic

@c64portal, post #76

To ten sam plik iff. Tworząc Slice ustawiałem mu 32 kolory i 4 bitplany dzięki czemu wyciąłem sprajta z takiego shape'a. Tu w InitCopList również tak użyłem. Wyskoczył błąd. Zmieniłem ilość kolorów z 32 na 16 i dalej to samo. PalRGB nie sprawdzałem i jutro z chęcią to zrobię. Próbowałem za yo DisplayRGB, ale nie rozumiem tam niektórych parametrów. Przy kompilacji pisało mi że brakuje informacji w CopList pomimo że gdy nie użyję DisplayRGB to wtedy działa. Szkoda że mało kto używa Blitza a nie daje mi to ciągle spokoju.

Przeglądałem examples w folderze Blitz, ale nie ma tam żadnego przykładu w którym jednocześnie używany byłby Display i sprajty. Za to już mniej więcej wirm na czym tu polega Dual Playfield. Tworzy się dla jednego Display'a dwie CopListy o odpowiednich parametrach. Ale to kiedyś dojdziemy do tego. Teraz podstawą jest dla mnie użycie Display oraz bobów i sprajtów.
[#78] Re: Nauka Blitz Basic

@c64portal, post #76

Racja. To miało być PalRGB

Co do wyświetlania sprajta, zamiast komendy ze Slice ShowSprite należy użyć DisplaySprite.

Wycinanie shape'ów i sprajtów miałem ok, ale nie wpisałem komendy UseBitMap. Sądziłem, że jeśli mamy aktywny Coplist, Display i wyświetloną bitmapę, to już nie trzeba tej komendy. A jednak. Wpadłem na to przez sprawdzenie, czy zadziała pod Display komenda Blit. I odziwo nic nie rysowało.

Także sprajty już wycinam, mogę się zająć wdrażaniem komendy BBlit, którą ciężko mi trochę pojąć. Jak jeszcze rozumiem Buffer, aby wgrać do pamięci całą bitmapę, to nie bardzo rozumiem komendy UnBuffer, po co ona jest i dlaczego się jej używa przed komendą BBlit.
[#79] Re: Nauka Blitz Basic

@tukinem, post #78

z UnBuffer z grubsza chodzi o to że to jest buffor do którego zapisywane jest tło pod wklejanym "bobem". Potrzebne jest po to aby odtworzyć to tło jak bob się przesunie na inną pozycję. To w przykładach akurat jest ładnie pokazane.
[edit]
jeśli tło jest jednokolorowe (np czarne - kolor o indeksie 0) to w zasadzie wystarczy bblit bez konieczności zapamiętywania tła.

Ostatnia aktualizacja: 24.09.2022 12:09:41 przez c64portal
[#80] Re: Nauka Blitz Basic

@c64portal, post #79

Czyli komendą Buffer ładuję do pamięci bitmapę, a komendą UnBuffer wczytuję z pamięci?

Jeszcze właśnie jedno pytanie mnie ciekawi i tego będę bardzo potrzebować przy kolizji bobów ze sprajtem. W Amosie każdy bob jako obiekt miał swój nr, np. Bob nr,x,y,grafika. W Sokobanie, którego staram się przepisać z Amosa użyłem numerów porządkowych bobów do przesuwania konkretnej skrzyni. Tutaj BBlit nie ma numeru licznika obiektów, więc skąd będę wiedzieć, którą skrzynię program musi przesunąć?

Może trochę jaśniej: na ekranie są 3 skrzynie i chłopek. Chłopek wchodzi w jedną skrzynię, która ma się przesunąć. Jak program ma wczytać którą skrzynię ma przesunąć? W Amosie było to Bob Col (nr). Tutaj numerem jest grafika obiektu, więc będzie kilka obiektów o tej samej grafice, ale o innych współrzędnych ekranowych. Jak je rozróżniać?
[#81] Re: Nauka Blitz Basic

@c64portal, post #79

Mam nowe pytanie, bardziej systemowo.

Chciałem sprawdzić moje wypociny na prawdziwej Amidze i uruchomiłem na mojej A600 z kartą A630. Wiesza się podczas bootowania z adfa, a gdy wyłączę CPU Cache, to się uruchamia bez problemu.

Czy w kodzie w Blitzu da się jakoś wyłączyć CPU Cache? Chodzi mi o jakąś funkcję sprawdzającą, lub od razu zaraz za WBStartup wstawić mu komendę blokującą Cache. A może w startup-sequence ADFa trzeba dodać jakąś opcję CPU NoCache?
[#82] Re: Nauka Blitz Basic

@tukinem, post #81

CPU nocache powinno wystarczyc, tylko nie wiem czy ta procedura dziala na kick 1.3, chyba jest od 2.0 wzwyz. A tak to zwykle taki program sie wiesza z powodu cache jak jest spakowany jakims starym pakerem, albo jak uzywa Self Modyfying Code.
[#83] Re: Nauka Blitz Basic

@Don_Adan, post #82

Nie pakowałem go niczym. CPU nocache w s-s na df0 powoduje wyskakujący napis error, po czym gra się uruchamia. Potem usunąłem wpis ze s-s i działa teraz za każdym razem. Może jednorazowo nie ruszyło. Teraz już za każdym razem startuje.

Dzięki.

Użyłem BBlit i działa to całkiem fajnie. Tylko zauważyłem, że jak różnią się ilością bitplanów bitmapa i shape'y, to wyskakują chocki klocki. Ogólnie podoba mi się działanie tego. Odziwo nawet nie muszę używać podwójnego buforowania, a pamiętam, że w Amosie trzeba było przy większych obiektach.
[#84] Re: Nauka Blitz Basic

@c64portal, post #79

Następne pytanie mam. Wstawiam dwa shape'y na ekran. Jeden ma być bez maski (wstawiony z kolorem nr 0), a drugi z maską (kolor 0 przezroczysty). Nie widzę w podręczniku żadnej komendy NoMask, ani MakeMask. Za to znalazłem AutoCookie i MakeCookie. Jeśli to byłoby to, to jak jednym shape'ie wyłączyć maskę a w drugim zostawić?

Ostatnia aktualizacja: 24.09.2022 21:29:55 przez tukinem
[#85] Re: Nauka Blitz Basic

@tukinem, post #84

jeśli dobrze rozumiem to chcesz zrobić to: wstawić całego shape'a bez maski tak aby kolor 0 też nadpisał to co pod spodem?
ja do tego celu używałem komendy Block ale ona ma to ograniczenie że blok musi być rozmiarów szerokości 16 pixeli. Jest to też najszybsze stawianie shape'a i idealnie nadaje się do wstawiania kafelków (tiles)

Przy okazji polecam bo od niedawna została przywrócona strona z dokumentacją w formie klikalnej. Wg mnie 100 razy lepsze niż dostępne pdf'y
http://blitz.robthenerd.com/wiki/index.php?title=Main_Page

a konkretnie to:
http://docs.amiblitz.de/blitzprogrammers/0001.html
[#86] Re: Nauka Blitz Basic

@c64portal, post #85

Nie zależy mi na szybkości działania, bo to będzie element menu głównego. W samej rozgrywce będzie to inaczej ogarnięte. Z Block może być problem, bo raczej nie będzie wielokrotnością 16.
[#87] Re: Nauka Blitz Basic

@tukinem, post #67

Miałeś nie używać Slice-a

Edit:
A ok widzę że poprawiłeś potem ;)

Ogólnie Blitz to fajny język i ma spoko możliwości, np. Możliwością wstawienia kodu asm.

Pierwsze moje starcie z BB to jakoś w połowie lat 90, wcześniej coś się bawiłem z Amosem, i właściwie niczego nie byłem w stanie pojąć w BB. No troche za młody chyba byłem ;)
Natomiast jak jakoś 1.5 roku temu chciałem coś się znowu pobawić w BB to raz dwa go załapałem i muszę powiedzieć że jest fajnie wymyślony.

Ale prawda jest taka że powinno się rownolegle ogarnąć jak działa amigowy układ aga zeby móc lepiej to wszystko zrozumieć, a także poznać "sztuczki" oraz co do czego stosować. Najlepiej jest brać jakies tytuły np. Capital Punishment, Lion Heart itp. I dowiedzieć się jakimi metodami jest rysowany każdy element, np. Gdzie użyte sprajty i jak, czy są duplikowane, gdzie blitter wkleja boby, gdzie proc sam coś rysuje itp.. ja o takich rzeczach w latach 90 nie miałem pojęcia, wklejałem jakiegoś mega wielkiego bobka i się dziwiłem czemu jest wolno i miga

Ps. Jest też fajny proof of concept Syreet Fighter 2, gdzie koleś robi lepszy i szybszy port niż ten ci jest i omawia co i jak robi i za pomocą czego..



Ostatnia aktualizacja: 25.09.2022 13:34:08 przez mateusz_s

Ostatnia aktualizacja: 25.09.2022 13:38:29 przez mateusz_s
[#88] Re: Nauka Blitz Basic

@mateusz_s, post #87

No ja teraz akurat robię menu wyboru levelu i tam jest spory bobek nie miga bo zrozumiałem jak to działa w Blitzu i ominąłem ciągłe rysowanie BBlit poprzez użycie procedury.

A właśnie. Tu nie ma jak w Amosie, że procedurki wrzucę sobie na koniec kodu i je zwinę. Muszą być wczytane w kolejności uruchamiania kodu przed ich wywołaniem. Szkoda. Ale bardzo mi się podoba ten język.

Mam jeszcze jeden spory problem. W Amosie miałem tak:
If STER$="j"  and Joy(1)=16 or STER$="k" and KeyState(65) Then...


Po krótce jeśli klawiatura była jako sterowanie to enterem się wybierało. Jeśli joystick był jako sterowanie to fire. Tutaj nie działa mi jednocześnie w jednym warunku takie coś. Musiałem stworzyć osobno dla sterowania klawiaturą calą listę warunków i osobno dla sterowania joyem.

Czyli:
If ster$="k"
If RawStatus($44)
...
EndIf
EndIf
If ster$="j"
If JoyB(1)=1
...
EndIf
EndIf

Domyślam się że na pewno idzie to obejść. Widziałem jakieś funkcje o nazwie NEWTYPE ale to jeszcze nie teraz dla mnie. Póki co piszę po swojemu a gdy skończę to będę usprawniać.

Ostatnia aktualizacja: 25.09.2022 15:05:10 przez tukinem

Ostatnia aktualizacja: 25.09.2022 15:08:04 przez tukinem
[#89] Re: Nauka Blitz Basic

@tukinem, post #88

Co do procedur to możesz je mieć w oddzielnym pliku (jak tak robię) i w edytorze mieć je otwarte w, tak jakby kolejnym oknie (przełączasz się poprzez F9-F10 bodajże).

Co do warunków to w Blitzu normalnie działa AND i OR w sprawdzaniu warunków więc nie bardzo rozumiem w czym problem - powinno ci spokojnie działać.

NEWTYPE to nie funkcja, a sposób definiowania owych typów danych. Coś jak struct w języku C. Wydaje mi się że do sprawdzania Joya i klawiatury nie koniecznie się nadaje.
[#90] Re: Nauka Blitz Basic

@c64portal, post #89

Chodzi o to że coś takiego mi nie działa:
If Warunek1 AND warunek2 OR Warunek3 AND Warunek4

Jeśli mam spełniony warunek1 i warunek2 to się nie sprawdza. W Amosie to działało a tu nie. Może nawiasmi to pomogę zrozumieć:
If (War1 AND War2) OR (War3 AND War).
Właśnie tak rozumuję zapis tych komend logicznych i tak działało mi to w Amosie.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem