244 lines
6.8 KiB
Markdown
244 lines
6.8 KiB
Markdown
# CANVAS_OBSERVER
|
|
|
|
Punkt dostępu do operacji na kanwie — wspólnym obszarze rysowania, na którym silnik wyświetla wszystkie widoczne obiekty graficzne. Udostępnia metody do dodawania i usuwania grafik z ekranu, pobierania nazwy obiektu pod kursorem, ustawiania tła, robienia zrzutów ekranu oraz emitowania sygnałów przy zmianie fokusu okna gry.
|
|
|
|
Zazwyczaj w scenie istnieje pojedyncza instancja typu `CANVAS_OBSERVER`, do której wszystkie skrypty odwołują się jak do obiektu globalnego.
|
|
|
|
## Metody
|
|
|
|
### ADD
|
|
|
|
```
|
|
void ADD(STRING varName)
|
|
void ADD(STRING varName, INTEGER priority)
|
|
```
|
|
|
|
Dodaje na kanwę zmienną [`ANIMO`](ANIMO.md) lub [`IMAGE`](IMAGE.md) — ustawia jej widoczność na `TRUE` i opcjonalnie nadaje priorytet rysowania (domyślnie `1000`).
|
|
|
|
**Parametry**
|
|
|
|
- `varName` — nazwa zmiennej graficznej.
|
|
- `priority` — (opcjonalnie) priorytet rysowania (pozycja w osi Z).
|
|
|
|
**Przykłady**
|
|
|
|
```
|
|
CANVASOBSERVER^ADD("ANNMKORBA2");
|
|
CANVASOBSERVER^ADD("ANNMPRZEGRYZA");
|
|
```
|
|
|
|
### ENABLENOTIFY
|
|
|
|
```
|
|
void ENABLENOTIFY(BOOL enable)
|
|
```
|
|
|
|
Włącza lub wyłącza emitowanie sygnałów o zmianie fokusu okna gry ([`ONWINDOWFOCUSON`](#onwindowfocuson), [`ONWINDOWFOCUSOFF`](#onwindowfocusoff)).
|
|
|
|
**Parametry**
|
|
|
|
- `enable` — `TRUE` włącza notyfikacje, `FALSE` je wyłącza.
|
|
|
|
**Przykłady**
|
|
|
|
```
|
|
CANVASOBSERVER^ENABLENOTIFY(TRUE);
|
|
```
|
|
|
|
### GETBPP
|
|
|
|
```
|
|
INTEGER GETBPP()
|
|
```
|
|
|
|
Zwraca głębię koloru kanwy w bitach na piksel. Oryginalny silnik BlooMoo działa w trybie 16 bpp (RGB565) — metoda zawsze zwraca `16`.
|
|
|
|
**Zwraca**: [`INTEGER`](INTEGER.md) — głębia koloru w bitach (`16`).
|
|
|
|
### GETGRAPHICSAT
|
|
|
|
```
|
|
STRING GETGRAPHICSAT(INTEGER posX, INTEGER posY, BOOL onlyVisible, INTEGER minZ, INTEGER maxZ)
|
|
STRING GETGRAPHICSAT(INTEGER posX, INTEGER posY, BOOL onlyVisible, INTEGER minZ, INTEGER maxZ, BOOL ignoreAlpha)
|
|
```
|
|
|
|
Zwraca nazwę zmiennej graficznej znajdującej się pod punktem `(posX, posY)`. Przeszukuje wyłącznie bieżącą scenę. Wyszukiwanie zaczyna od grafik o najwyższym priorytecie. Jeśli żaden obiekt nie spełnia warunków, zwracane jest `"NULL"`.
|
|
|
|
**Parametry**
|
|
|
|
- `posX`, `posY` — koordynaty sprawdzanego punktu.
|
|
- `onlyVisible` — gdy `TRUE`, brane są pod uwagę tylko widoczne grafiki.
|
|
- `minZ`, `maxZ` — zakres priorytetu (osi Z) ograniczający wyszukiwanie.
|
|
- `ignoreAlpha` — (opcjonalnie) gdy `TRUE`, sprawdzany jest tylko prostokąt grafiki; gdy `FALSE` (lub pominięte), test uwzględnia kanał alfa piksela.
|
|
|
|
**Zwraca**: [`STRING`](STRING.md) — nazwa znalezionego obiektu lub `"NULL"`.
|
|
|
|
**Przykłady**
|
|
|
|
```
|
|
CANVASOBSERVER^GETGRAPHICSAT(MOUSE^GETPOSX(),MOUSE^GETPOSY(),TRUE,2998,2998,FALSE);
|
|
CANVASOBSERVER^GETGRAPHICSAT(VARICURSORX,VARICURSORY,TRUE,40,40,TRUE);
|
|
```
|
|
|
|
### GETGRAPHICSAT2
|
|
|
|
```
|
|
STRING GETGRAPHICSAT2(INTEGER posX, INTEGER posY, BOOL onlyVisible, INTEGER minZ, INTEGER maxZ)
|
|
STRING GETGRAPHICSAT2(INTEGER posX, INTEGER posY, BOOL onlyVisible, INTEGER minZ, INTEGER maxZ, BOOL ignoreAlpha)
|
|
```
|
|
|
|
Wariant [`GETGRAPHICSAT`](#getgraphicsat) przeszukujący nie tylko bieżącą scenę, ale również nadrzędne kontenery (epizod, root).
|
|
|
|
### MOVEBKG
|
|
|
|
```
|
|
void MOVEBKG(INTEGER deltaX, INTEGER deltaY)
|
|
```
|
|
|
|
Przesuwa tło o zadane wartości w osiach X i Y (względem aktualnej pozycji).
|
|
|
|
**Parametry**
|
|
|
|
- `deltaX`, `deltaY` — wektor przesunięcia w pikselach.
|
|
|
|
**Przykłady**
|
|
|
|
```
|
|
CANVASOBSERVER^MOVEBKG(0,ARRAYDY^GET(0));
|
|
CANVASOBSERVER^MOVEBKG(ISCROLLMOVEX,ISCROLLMOVEY);
|
|
```
|
|
|
|
### PASTE
|
|
|
|
```
|
|
void PASTE(STRING varName, INTEGER posX, INTEGER posY)
|
|
```
|
|
|
|
Wkleja na kanwę kopię bieżącej zawartości grafiki [`ANIMO`](ANIMO.md) lub [`IMAGE`](IMAGE.md) w postaci statycznej, niemodyfikowalnej tekstury w punkcie `(posX, posY)`. Operacja nie wpływa na samą zmienną źródłową.
|
|
|
|
**Parametry**
|
|
|
|
- `varName` — nazwa zmiennej graficznej.
|
|
- `posX`, `posY` — pozycja wklejenia.
|
|
|
|
**Przykłady**
|
|
|
|
```
|
|
CANVASOBSERVER^PASTE("ANNBUM",[I1-IPLANPOSX],[I2-IPLANPOSY]);
|
|
CANVASOBSERVER^PASTE("IMG1",0,0);
|
|
```
|
|
|
|
### REDRAW
|
|
|
|
```
|
|
void REDRAW()
|
|
```
|
|
|
|
W oryginalnym silniku oznacza kanwę jako wymagającą ponownego rysowania. W praktyce silnik i tak rysuje całość każdą klatkę, więc metoda zachowuje się jak no-op.
|
|
|
|
### REFRESH
|
|
|
|
```
|
|
void REFRESH()
|
|
```
|
|
|
|
Wymusza ponowne narysowanie wszystkich obiektów [`IMAGE`](IMAGE.md) w bieżącej scenie — wewnętrznie wywołuje na nich metodę [`INVALIDATE`](IMAGE.md#invalidate).
|
|
|
|
### REMOVE
|
|
|
|
```
|
|
void REMOVE(STRING varName1, [STRING varName2, ...])
|
|
```
|
|
|
|
Ukrywa wymienione obiekty graficzne na kanwie (ustawia ich widoczność na `FALSE`). Metoda przyjmuje dowolną liczbę argumentów.
|
|
|
|
**Parametry**
|
|
|
|
- `varName1, varName2, …` — kolejne nazwy zmiennych graficznych do ukrycia.
|
|
|
|
**Przykłady**
|
|
|
|
```
|
|
CANVASOBSERVER^REMOVE("ZLY");
|
|
CANVASOBSERVER^REMOVE("ANNAUTOR","ANNAUTOL","ANNAUTORMASK","ANNAUTOLMASK");
|
|
```
|
|
|
|
### SAVE
|
|
|
|
```
|
|
void SAVE(STRING imgFileName, DOUBLE xScaleFactor, DOUBLE yScaleFactor)
|
|
void SAVE(STRING imgFileName, DOUBLE xScaleFactor, DOUBLE yScaleFactor, INTEGER xLeft, INTEGER yTop, INTEGER xRight, INTEGER yBottom)
|
|
```
|
|
|
|
Zapisuje aktualny widok kanwy do pliku `.IMG`. Forma siedmioargumentowa pozwala wyciąć prostokąt kanwy przed skalowaniem.
|
|
|
|
**Parametry**
|
|
|
|
- `imgFileName` — ścieżka docelowego pliku `.IMG`.
|
|
- `xScaleFactor`, `yScaleFactor` — współczynniki skalowania w osiach X i Y.
|
|
- `xLeft`, `yTop`, `xRight`, `yBottom` — (opcjonalnie) prostokąt do wycięcia przed skalowaniem.
|
|
|
|
**Przykłady**
|
|
|
|
```
|
|
CANVASOBSERVER^SAVE("$COMMON\PAGE.IMG",1,1);
|
|
CANVASOBSERVER^SAVE("$COMMON\ZOOM.IMG",2,2,$1,$2,$3,$4);
|
|
CANVASOBSERVER^SAVE(["$COMMON\SAVE_BD\BD_SCR"+VARISLOTNO+".IMG"],0.5,0.5);
|
|
```
|
|
|
|
### SETBACKGROUND
|
|
|
|
```
|
|
void SETBACKGROUND(STRING imageName)
|
|
```
|
|
|
|
Ustawia obraz tła kanwy. Argument może być nazwą istniejącej zmiennej [`IMAGE`](IMAGE.md) albo ścieżką do pliku `.IMG` — w drugim przypadku silnik utworzy ukryty obiekt [`IMAGE`](IMAGE.md) z plikiem.
|
|
|
|
**Parametry**
|
|
|
|
- `imageName` — nazwa zmiennej [`IMAGE`](IMAGE.md) lub ścieżka do pliku `.IMG`.
|
|
|
|
**Przykłady**
|
|
|
|
```
|
|
CANVASOBSERVER^SETBACKGROUND(SOBJECT|NAME);
|
|
CANVASOBSERVER^SETBACKGROUND("LOGO.IMG");
|
|
```
|
|
|
|
### SETBKGPOS
|
|
|
|
```
|
|
void SETBKGPOS(INTEGER posX, INTEGER posY)
|
|
```
|
|
|
|
Ustawia bezwzględną pozycję tła w osiach X i Y.
|
|
|
|
**Parametry**
|
|
|
|
- `posX`, `posY` — nowa pozycja tła.
|
|
|
|
**Przykłady**
|
|
|
|
```
|
|
CANVASOBSERVER^SETBKGPOS([VARI_BKGX-VARI_BKGXOFFSET],[VARI_BKGY-VARI_BKGYOFFSET]);
|
|
CANVASOBSERVER^SETBKGPOS(VARI_TMPX,0);
|
|
```
|
|
|
|
## Sygnały
|
|
|
|
### ONINIT
|
|
|
|
Wywoływany w momencie inicjalizacji obiektu.
|
|
|
|
### ONWINDOWFOCUSON
|
|
|
|
Wywoływany po uzyskaniu fokusu przez okno gry (np. powrót z minimalizacji). Emisja działa tylko, gdy notyfikacje są włączone metodą [`ENABLENOTIFY`](#enablenotify).
|
|
|
|
### ONWINDOWFOCUSOFF
|
|
|
|
Wywoływany po utracie fokusu przez okno gry (np. przełączenie na inną aplikację). Emisja działa tylko, gdy notyfikacje są włączone.
|
|
|
|
### ONSIGNAL
|
|
|
|
Wywoływany po otrzymaniu sygnału (zobacz [Zdarzenia i sygnały](../engine/events.md#onsignal)).
|