Troman - tworzenie gier
Logo serwisu Troman.pl
Panel Logowania

Controllery

napisał : maniek
21
września
2012
Kolejny artykuł na temat kostek logiki w Blenderze. Tym razem zajmiemy się drugą kolumną w Logic Editor czyli Controllerami.
tagi : cotrollery logic bricks python and or xnor xor nand nor module script

1. Wprowadzenie

Controllery to kolejny rodzaj kostek logiki, które zbierają dane z sensorów, a także określają ich stan. Po wykonaniu operacji logicznych wykrytych przez sensory, wysyłają sygnały do actuatorów, które są podłączone do controllerów. Kiedy sensor wykryje zdarzenie, wysyła pozytywny impuls, a kiedy nie wysyła impuls negatywny. Zadaniem controllerów jest przetworzenie tych impulsów napływających z sensorów do niego podłączonych, aby wyzwolić odpowiednią akcję.

Bloki logiki dla wszystkich typów sensorów mogą być budowane oraz edytowane używając okna Logic Editor. Dostępne typy controllerów :

  • AND
  • OR
  • XOR
  • NAND
  • NOR
  • XNOR
  • Expression
  • Python

 

Poniższa tabela pokazuje nam szybki podgląd operacji logicznych wykonywanych przez różne typy controllerów. Pierwsza kolumna reprezentuje liczbę pozytywnych impulsów wysłanych przez podłączone sensory. Kolejne kolumny reprezentuję każdy rodzaj controllera, oraz rodzaj generowanego przez nich impulsów. Impuls pozytywny oznacza że warunki danego controllera zostały spełnione, co skutkuje uruchomieniem podłączonych actuatorów. Zakładamy że do controllera podłączone jest kilka sensorów :

 

 

2. Edycja Controllera

Controllery mogą być ustawiane oraz edytowane w centralnej kolumnie okna Logic Editor. Ten rozdział opisuje ogólną kontrolę kolumny controllerów, a także  parametry, które są wspólne dla wszystkich poszczególnych typów Controllerów.

Nagłówek kolumny

Kontrolki w nagłówku kolumny określają, które z controllerów i z jaką szczegółowością mają pojawiać się w kolumnie. Jest to przydatne do ukrywania nieużywanych controllerów, aby wprowadzić czytelność w kostkach logiki.

Kontrolka Controllers :

  •  Show Objects - rozwija controllery wszystkich obiektów
  •  Hide Objects - ukrywa controllery wszystkich obiektów
  •  Show Controllers - rozwija wszystkie controllery obiektu
  •  Hide Controllers - ukrywa wszystkie controllery obiektu

 Jest też możliwość filtrowania wyświetlania określonych controllerów za pomocą 4 opcji :

  • Sel - Pokazuje wszystkie controllery wybranych obiektów
  • Act - pokazuje tylko controllery należące do aktywnego obiektu
  • Link - pokazuje controllery które są zlinkowane z sensorami/actuatorami

Nagłówek obiektu

 

W kolumnie controllerów, controllery są pogrupowane według obiektu. Domyślnie controllery pojawią się w kolumnie dla każdego zaznaczonego obiektu, ale to może być zmienione poprzez opcje filtrów.

  • + - State Button - pokazuje, które stany są w użyciu dla obiektu
  • Cube - nazwa obiektu
  • Add Controller - po kliknięciu pojawi się lista dostępnych typów controllerów. Wybranie spowoduje dodanie controllera do obiektu

 

3. Wspólne opcje Controllerów

Controllery mają zestaw przycisków wspólne dla wszystkich typów controllerów :

  • "Trójkąt" - zwija lub rozwija controller
  • Typ Controllera - informacja o typie controllera. Po kliknięciu ten typ można zmienić
  • Nazwa Cotrollera - może być edytowana przez użytkownika. Jest ona używana do dostępu z poziomu Pythona. Musi być unikalna.
  • 1 - indeks stanu
  • - zaznacz, aby uruchomić controller przed innymi nie zaznaczonymi controllerami
  • "X" - usuwa controller z listy

 

4. Expression Controller

Controller ten ocenia wyrażenie logiczne wpisane przez użytkownika, jeśli jest ono prawdziwe wysyła pozytywny impuls do actuatorów.

Expression - Wyrażenie, które jest napisane w polu, może składać się z zmiennych, stałych i operatorów. Te muszą być zgodne z zasadami określonymi poniżej.


Zmienne

Można używać nazw sensorów, oraz właściwości. Nie może zawierać spacji.


Operacje Matematyczne

  • Operatory: *, /, +, -
  • Zwraca: liczbę
  • Przykłady: 3+2, 35/5

 

Operacje Logiczne

  • Operatory porównania: <, >, >=, <=, ==, !=
  • Operatory logiczne: AND, OR, NOT
  • Zwraca: True lub False
  • Przykłady: 3>2(True), 1 AND 0(False)

 

Instrukcja warunkowa(if)

Stosowanie

if( wyrażenie, pulse_if_expression_is_true, pulse_if_expression_is_false )

 

Jeśli controller uzna wyrażenie za prawdziwe :

  • jeżeli pulse_if_expression_is_truejest True, controller wysyła pozytywny impuls do podłączonych actuatorów
  • jeżeli pulse_if_expression_is_true jest Flase, controller wysyła negatywny impuls do podłączonych actuatorów

Jeśli controller uzna wyrażenie za fałszywe :

  • jeżeli pulse_if_expression_is_false jest True, controller wysyła pozytywny impuls do podłączonych actuatorów
  • jeżeli pulse_if_expression_is_false jest Flase, controller wysyła negatywny impuls do podłączonych actuatorów

 

Przykłady

Dany obiekt posiada właściwość coins = 30 :

coins > 20

zwraca True(controller wysyła pozytywny impuls do podłączonych actuatorów)

 

Dany obiekt posiada:

  • sensor o nazwie Key_inserted równy True
  • właściwość o nazwie Fuel równy False

Key_inserted AND Fuel
zwraca False(controller wysyła negatywny impuls do podłączonych actuatorów)

Tak samo działa jak :

if(Key_inserted AND Fuel, True, False)

Zamiast tego można zrobić :

if(Key_inserted AND Fuel, False, True)

zwraca pozytywny impuls kiedy Key_inserted AND Fuel zwraca False

Można też :

 if((Key_inserted AND Fuel) OR (coins > 20), True, False)

wyrażenie zwraca True, w takim wypadku wysyła pozytywny impuls do podłączonych actuatorów

 

5. Python Controller

Python Controller jest controllerem sprawdza impulsy wejściowe za pomocą napisanego przez użytkownika skryptu Pythona lub innego pliku, który zawiera kod Pythona. Controller ten posiada dwa tryby(modes) : Script i Module. Przy obu podajemy nazwę pliku napisanego w edytorze tekstu(chodzi o typ okna w Blenderze) przechowywanego wewnątrz pliku .Blend lub pliku zewnętrznego.

Tryb Script

Controller jest połączony ze skryptem, który jest uruchomiany w całości. Wszystko co zawarte w skrypcie wykonuje się w tej samej klatce logiki, jeżeli ta sama wartość lub atrybut została zmieniona więcej niż raz, tylko ostatnia zmiana będzie widoczna w grze. Jeżeli np.: pozycja obiektu została zmieniona na [ 100.0, 100.0, 100.0 ] ale później w tym samym skrypcie zostanie zmieniona [ 0.0, 0.0, 0.0 ] to widoczna będzie pozycja [ 0.0, 0.0, 0.0 ] obiektu, ponieważ zmiana pozycji na [ 100.0, 100.0, 100.0 ] zdarzyła się w tej samej klatce.

 

Tryb Module

Tryb Module odpowiedzialny jest za uruchomienie konkretnej funkcji w skrypcie zamiast całego skryptu. Po wybraniu tej opcji w puste pole wpisuje się : nazwa_skryptu.nazwa_funkcji np.: playerMovement.mouseLook.

W ten oto sposób w jednym skrypcie możemy mieć zbiór funkcji, a uruchamiać tylko jedną. Jest to użyteczne też ze względu na to, że w pierwszym parametrze wywoływanej funkcji zwracany jest controller. Przycisk [D] powoduje, że skrypt jest zczytywany bezpośrednio z pliku gdzie jest zapisany(musi być zapisany na dysku). Dzięki temu można uruchomić grę i w czasie jej trwania modyfikować zawartość skryptu, a zmiany będą widoczne dynamicznie w czasie trwania gry.

 

6. States(Stany)

W BGE, obiekt może mieć różne "stany". W każdym momencie uruchomionej gry, bieżący stan obiektu określa jego zachowanie. Na przykład, postać w grze może mieć stan reprezentujący ruch bohatera, jego bezruch lub śmierć. Może inny przykład: dziwne by było kiedy odtwarzana jest animacja śmierci bohatera, ale dalej klikając klawisz myszy słyszymy dźwięk wystrzału, prawda?? Właśnie z pomocą przychodzą nam stany ;)

Jak operować Stanami

Stany są tworzone i wykorzystywane przez controllery. Każdy obiekt może posiadać 30 możliwych  stanów (domyślny jest pierwszy). Controller musi zawsze określić stan w którym będzie działał - będzie generował impuls wyjściowy jeśli a) jego warunki logiczne są spełnione, b) obiekt znajduje się w obecny stanie. Stany są tworzone i edytowane w obiekcie w ustawieniach controllerów.

W prostych grach nie ma potrzeby manipulować stanami, więc automatycznie przypisany jest jeden stan, a domyślnie wszystkie controllery są ustawione na korzystanie stanu 1. Tak więc jeśli gra nie potrzebuje stanów, wszystko będzie działać bez ich edycji - nie trzeba się w ogóle o nie martwić.



Edycja Stanów

Stany można ustawiać i edytować używając kolumny controllerów w panelu Logic Editor. Aby otworzyć panel stanów, należy kliknąć w znak "+" znajdującego się obok nazwy obiektu. Pokażą nam się dwa obszary z 30 stanami : Visible States i  Initial States. Konfiguracja stanów gry odbywa się poprzez wybór odpowiedniego stanu dla obiektu. Initial States różnią się od Visible States tym że one uruchamiają się przed Visible. Idealnie do zainicjowania pewnym zdarzeń zaraz po uruchomieniu gry.

 

7. Zakończenie

Tak więc mamy opisane zagadnienia związane controllerami. Powyższe opisy nie są kompletne, ponieważ próbowałem przetłumaczyć manual najlepiej jak się dało, do tego poparłem to swoim doświadczeniem. Nie mniej jednak jeśli widzicie jakieś błędy lub coś wyjaśniłem nie tak to proszę o korektę.

Brak komentarzy
Dodaj komentarz
Aby dodać komentarz do newsa, musisz być zalogowany w Serwisie.. Zaloguj