Przejdź do zawartości

BasicC/Programy WWW

Z Wikibooks, biblioteki wolnych podręczników.

"Silnikiem" zwykłego BasicC jest C + SDL2, w przypadku wersji WWW jest to HTML + JavaScript + WebGL 2, czyli to, co oferują nowoczesne przeglądarki internetowe. W związku z tym obowiązują ogólne zasady JavaScript, można też bezpośrednio wywoływać większość komend JS, co jednak nie jest zalecane ze względu na kompatybilność. JavaScript, wbrew temu, co twierdzą niektórzy "eksperci", nie jest językiem synchronicznym (cokolwiek to znaczy), co wiąże się z dość kłopotliwymi dziwactwami do pokonania. W szczególności niektóre funkcje działają niezależnie od reszty programu, np. ładujące pliki lub tworzące animacje, czyli po wywołaniu takiej funkcji kolejne instrukcje są wykonywane nie czekając na zakończenie jej działania, np. ładujemy obrazek, następnie go wyświetlamy, ale nie zostanie on wyświetlony, bo komenda rysująca zostanie wywołana zanim obraz zostanie załadowany. W związku z tym w BasicC zaleca się, że jeśli program ma wyświetlać jakieś obrazy - powinien być tworzony wg jednakowego schematu - najpierw wykonywane są instrukcje inicjujące, a cała reszta działa w jednej, specjalnej pętli głównej:

LOOP ... ENDLOOP(Q)

[edytuj]

W wersji WWW nie jest to typowa pętla, tylko funkcja generująca obrazy animacji wywoływana cyklicznie. Zdarzenia systemowe są pobierane automatycznie, a po każdym przebiegu pętli kasowana jest zmienna InKey, dzięki czemu ta funkcja/zmienna działa podobnie jak w zwykłym BasicC, czyli występuje efekt autopowtarzania klawisza. Zmienna LOOPTIME zawiera czas, który możemy traktować jako czas wyświetlenia bieżącej klatki obrazu, co ułatwia obliczenie tzw. czasu dt (delta time), czyli odstępu w ms między poszczególnymi klatkami animacji, co można (i powinno się) wykorzystać do sterowania szybkością przesuwania obiektów np. w grze. Częstotliwość generowania klatek obrazu jest kontrolowana przez przeglądarkę, zwykle odpowiada częstotliwości odświeżania wyświetlacza, np. 60 Hz, i jest niezależna od ustawienia parametru VSYNC, czyli jest on zawsze włączony. Przykładem programu zrobionego wg. tego schematu jest gra Orbital War.

W BasicC ładowanie obrazów oraz tekstu odbywa się z wymuszeniem wstrzymania działania programu na czas ładowania, pod warunkiem że ładowanie odbywa się wewnątrz tzw. funkcji asynchronicznej (async), najlepiej bezpośrednio w MAIN. Ładowanie dźwięku nie wstrzymuje programu, więc najlepiej zainicjować ładowanie na samym początku programu.
Pętla LOOP również działa niezależnie, co oznacza, że również instrukcje znajdujące się po niej zostaną wykonane prawdopodobnie przed jej zakończeniem, co należy mieć na uwadze.