1

No właśnie. Pisałem gierkę na ggj i coś mi nie szło... https://globalgamejam.org/2018/games/te … ansmission - całkiem mi się rozjeżdżają kolizje z tłem (chodzi o pocisk). Piszę w turbo basicu xl i mam pytanie do znawców - jak ten aspekt poprawić? Czy to kwestia precyzji czy czegoś jeszcze?
Po prostu w pewnym momencie utknąłem, a chciałbym to dokończyć. Jak poprawiam działanie - w jednej części wychodzi lepiej, w drugiej się psuje i już nie wiem, czy to moja wina (złe warunki) czy zle założenia wykrycia kolizji. Ktoś miałby chęć wytłumaczenia tego łopatologicznie?
@mono, jeszcze nie próbowałem <wiesz czego> - za mały projekt do tego ;) Ale na 100% wykorzystam, muszę się jeszcze tylko nieco douczyć, a czasu brak. Będziesz na grawitacji?

Sikor umarł...

2

podejrzyj kod gry jump http://atariage.com/forums/blog/387/entry-10826-jump/

jeśli nie wyczyścisz dolnego okna edytora to będą z nim kolizje

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

3

Kolizje z zapalonymi (1) pikselami hires są sygnalizowane jako kolizje z PF2.

https://www.youtube.com/watch?v=jofNR_WkoCE

4

@fox, dzięki. To może pomóc, bo niby kolizje wykrywa, ale coś jest nie tak. Sprawdzę.
@tebe, to nie to...

Sikor umarł...

5

o.k. Póki co utknąłem, mam taką konstrukcję:

"kod ggj2018 napisał/a:

IF ((PEEK(53250)<>0) AND (XL<>0)):XL=-XL:ENDIF

Kolizje wykrywa (wartość 4 zamiast o), ale... Nie działa jak bym chciał? Jakieś pomysły? <oczywiście potem czyszczę kolizje, kolizja jest z pociskiem nr 2, jak piszę - kolizje wykrywa>? Pewnie mam jakiś "głupi, czeski błąd". Jakieś sugestie?

Sikor umarł...

6

1. Powyższy IF może się wykonać wiele razy. Jeśli wykona się dwa razy, to efekt masz podobny, jakby się wcale nie wykonał.
2. Kiedy czyścisz kolizje? Może czyszcząc je czasami je przegapiasz?
3. Sprawdź, czy oprócz wartości 0 i 4 nie masz innych - może pocisk dotyka czegoś poza zapalonymi pikselami hires.

https://www.youtube.com/watch?v=jofNR_WkoCE

7

Mam tylko 0 i 4 - to już sprawdzałem. Piszesz, że powyższy if może się wykonać wiele razy? Hmm, możesz rozwinąć - przyda się na przyszłość... Kolizje czyszczę bezpośrednio po blokach if.
Aha, XL to kierunek poziomy (-1 i 1), jeśli dam w kodzie XL=-1 i innego if- XL=1 dzieje się to samo.
@Fox, czy myślisz, że jak bym sprawdzał peek(53250) i "wyskoczył" do procedury sprawdzającej inne warunki (oddzielnie) ma szanse działać lepiej? Bo mi się pomysły skończyły, stąd wpis na forum... Z góry dziękuję za jakąkolwiek odpowiedź.

Sikor umarł...

8

Skoro to gra, to IF jest pewnie w pętli. Jeśli zaszła kolizja, IF się wykona. Jeśli w kolejnym obiegu pocisk się nie przesunął lub przesunął tylko tyle, że wciąż jest kolizja, to IF się wykona znowu.

Rzuciłem okiem na grę. Na oko pocisk jest wielkości jednego piksela GR.15 i porusza się z prędkością większą od jednego piksela na ramkę. To powoduje, że może przelecieć przez małe elementy pola gry nie kolidując z nimi.

Jeśli to jedyna kolizja do sprawdzenia, to czyść ją tylko w IFie stwierdzającym jej wystąpienie. W przeciwnym przypadku kolizja może być sygnalizowana po IFie a przed POKE do czyszczenia kolizji.

https://www.youtube.com/watch?v=jofNR_WkoCE

9

ooo, to może być to. Na pewno czyszczę po ifach od razu, ale może być kwestia prędkości. Dziękuję, pouczające i przyda się - powalczę z tym dalej.

Sikor umarł...