Jako, że dyskusja będzie zawierała w sobie elementy języka php, js, mysql, oraz technologie takie jak ajax nie pasowała do żadnego działu prócz tego.
Od jakiegoś czasu, po pracy, dla przyjemności rozważam stworzenie gry przeglądarkowej. Na razie sam projekt, rozwiązania czysto techniczne. Gra miła by się opierać o grafikę 2D.
W chwili obecnej doszedłem do następujących ustaleń:
Mapa złożona z grafik (pixel art) 32x32 px oparta o współrzędne układu kartezjańskiego, płaszczyzny x, y, z. Gdzie z odpowiada za poziom powierzchni na którym obecnie się znajdujemy.
Okno gry panoramiczne, 30x14 kratek, co daje nam odpowiednio 420 kratek na obraz (licząc jedynie wypełnienie gruntu) oraz wymiary okna 960x448 px.
Mapa zapisana w bazie MySQL o następującej strukturze:
Kod
+-----------+-----------------+--------+-----------+-----------+---------------+
| Field | Type | NULL | Key | Default | Extra |
+-----------+-----------------+--------+-----------+-----------+---------------+
| x | smallint | NO | PRIM. | | |
| y | smallint | NO | PRIM. | | |
| z | smallint | NO | PRIM. | | |
| item_id | smallint | NO | PRIM. | | |
| index | tinyint | NO | | 0 | |
| step_on | bool | NO | | 0 | |
+-----------+-----------------+--------+-----------+-----------+---------------+
| Field | Type | NULL | Key | Default | Extra |
+-----------+-----------------+--------+-----------+-----------+---------------+
| x | smallint | NO | PRIM. | | |
| y | smallint | NO | PRIM. | | |
| z | smallint | NO | PRIM. | | |
| item_id | smallint | NO | PRIM. | | |
| index | tinyint | NO | | 0 | |
| step_on | bool | NO | | 0 | |
+-----------+-----------------+--------+-----------+-----------+---------------+
item_id => id grafiki w danej pozycji
index => z-index dla pozycjonowania wyświetlenia
step_on => 0 bohater nie może wejść na to pole / 1 może wejść na to pole
Dzięki Sephirus-owi mamy pomysł na buforowanie w celu płynności przewijania:
Kod
OOOOOOOOO
OOOOOOOOO
OOOOOOOOO
OOOAAAOOO
OOOAAAOOO
OOOAAAOOO
OOOOOOOOO
OOOOOOOOO
OOOOOOOOO
OOOOOOOOO
OOOOOOOOO
OOOAAAOOO
OOOAAAOOO
OOOAAAOOO
OOOOOOOOO
OOOOOOOOO
OOOOOOOOO
Cytat
Gdzie A to widoczna część - wówczas ten nadmiar "O" pozwala na przewinięcie mapki odrobinę w każdym kierunku bez czekania na doładowanie... jeśli odpowiednio dobierze się szybkość pobierania/generacji mapki i przewijania to można uzyskać płynne przewijanie i brak oczekiwania na ładowanie
I teraz nad czym się zastanawiam:
Jak optymalnie pobrać z bazy wszystkie elementy dla danej pozycji w jednym zapytaniu ?
Oraz logikę pobierania nowego kawałka mapy - czyli jeżeli gracz przesunie się o y->y+1 czyli kratkę do góry to należy pobrać jedynie wiersz 30 kratek na samej górze widocznej przez gracza mapy.
Może ktoś ma doświadczenie w tej materii, albo gdzieś już o tym słyszał

Zapraszam do dyskusji !