|
[TGF] Ograniczenie liczby zdarzeń |
| Autor |
Wiadomość |
bmatrix
Starszy sierżant
 
Główny edytor: 
Pomógł: 4 razy Posty: 204
2055 Prestiż
|
Wysłany: 29-12-2008, 11:27 [TGF] Ograniczenie liczby zdarzeń
|
|
|
Witam,
Doświadczam pewnej niedogodności podczas tworzenia mini-gry. Może pokrótce opiszę sytuację: na poziomie mam osiem kwadratów (obiektów aktywnych) - każdy z nich po kliknięciu użytkownika (kliknięciu myszą na kwadrat) tworzy wokół siebie cztery detektory, które sprawdzają czy obok kwadratu jest puste pole (nie zajęte przez inny obiekt). Jeśli po jednej z czterech stron figury jest wolna przestrzeń, to kwadrat przemieszcza się w to miejsce (np. lewy detektor kwadratu wykrywa puste pole - kwadrat "przeskakuje" w lewo).
Problem jest taki, iż dla każdego z ośmiu kwadratów muszę robić osobne cztery zdarzenia (dla czterech detektorów) co daje w sumie 32 zdarzenia. Jeszcze gorsza sytuacja wyniknie, kiedy będę chciał stworzyć mapę z 15 kwadratami. Zatem, w jaki sposób można wykonać to w 4 zdarzeniach? Warunek jest zawsze taki sam "Jeśli detektor_lewy NIE wykrywa innego obiektu to..." (dla każdego detektora), zmienia się tylko obiekt dla którego wykonywana jest akcja (zawsze jest to przemieszczenie o taką samą ilosć px). Myślałem, aby zrobić jakieś wykrywanie, na którą figurę użytkownik kliknął i na tej podstawie opracować ruch odpowiedniej, nie mam jednak pomysłu jak się za to zabrać. |
|
|
|
 |
Fanotherpg
Porucznik I'm livin' proof
 
Główny edytor: 
Drugi edytor: 
Pojedynki: tak
Skype: 
Pomógł: 8 razy Posty: 821
14370 Prestiż
|
Wysłany: 29-12-2008, 11:34
|
|
|
| Spread Value jako indentyfikator obiektu i wtedy każdy obiekt mimo bycia tym samym OA ma swoje własne unikalne właściwości? |
_________________ Indie since 1997. |
|
|
|
 |
Slawo
Legenda
 
Główny edytor: 
Pojedynki: nie
Pomógł: 16 razy Posty: 706
25566 Prestiż
|
Wysłany: 29-12-2008, 12:17
|
|
|
Zobacz sobie np. z wytwórni nukesoft przykład grav+, albo u Bedzia na www.bedziu.webd.pl/ffg przykład by Omenski pt. multinakładanie (bo mi się nie chce tego robić a zastosowałem już w kilku grach, np. Kreciku, Szalonych Autobusach).
O co chodzi ?
Musisz zrobić jeden rodzaj tych obiektów "kwadrat" i dać im spread values A tuż przed loopem oraz stworzyć detektory.
Następnie w loopie jako kolejna iteracja (wielkość loopa = ilości obiektów "kwadrat) ustawiasz kolejno przy "kwadratach" detektory (ustaw przy kwadracie, dla którego numer loopa=alterable A "kwadratu" ) i sprawdzasz (tak jak to jest w dwóch wyżej wspomnianych przykładach).
Możesz sprawdzać na setkach obiektów "kwadrat". |
_________________ http://pograjmy.webd.pl - gry z rankingami graczy i turniejami - miejsce również na Twoje gry klikowe
Ponad 150 gier wydanych
Od 2003 w klikach
Od 2001 w hiscoresach na www
http://pograjmy.webd.pl/typer/ (typuj wyniki Mundialu)
Czytam: http://kontrowersje.net |
|
|
|
 |
jarlfenrir
Generał brygady
 
Główny edytor: 
Drugi edytor: 
Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 29-12-2008, 18:25
|
|
|
| W 4 zdarzeniach tego nie zrobisz raczej, ale nie sądzę, byś znalazł lepszy sposób niż ten opisany przez Sława. Warto się jeszcze zastanowić, czy kwadraty będą dodawane w czasie, gry bedą usuwane. Bo jeśli nie zamierzasz usuwać istniejących kwadratów, zamiast spread value wystarczy przy tworzeniu nadać jakiś identyfikator (np. set alt.val.A to value ("licznik"). Nie rozdzielasz identyfikatora za każdym razem, dzięki czemu ciutkę oszczędzasz czas procesora. |
|
|
|
 |
bmatrix
Starszy sierżant
 
Główny edytor: 
Pomógł: 4 razy Posty: 204
2055 Prestiż
|
Wysłany: 29-12-2008, 21:28
|
|
|
Wielkie dzięki za odpowiedzi - otrzymałem mniej więcej to, o co mi chodziło (no i odkryłem, że TGF przesuwa zawsze jeden obiekt a nie wszystkie o tej nazwie - dlatego wcześniej stworzyłem 8 obiektów aktywnych, z czego wyniknął problem ) |
|
|
|
 |
jarlfenrir
Generał brygady
 
Główny edytor: 
Drugi edytor: 
Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 29-12-2008, 21:40
|
|
|
| bmatrix napisał/a: | | (no i odkryłem, że TGF przesuwa zawsze jeden obiekt a nie wszystkie o tej nazwie | To, ile przesunie, zależy od tego, jak skonstruowana jest akcja i co się aktualnie w grze dzieje. Ale zwykle przesuwa albo jeden albo wszystkie. |
|
|
|
 |
bmatrix
Starszy sierżant
 
Główny edytor: 
Pomógł: 4 razy Posty: 204
2055 Prestiż
|
Wysłany: 30-12-2008, 12:23
|
|
|
Jako, że nie chciałbym tworzyć nowego tematu, a pytanie jest zbliżone, pozwolę sobie napisać tutaj: czy w TGF'ie możliwe jest porównywanie wartości dwóch obiektów aktywnych, które występują na mapie w większej liczbie? Tzn. jeśli mam te 8 kwadratów (ale jako jeden obiekt aktywny), to chciałbym sprawdzić czy detektory na które się nakładają mają taką samą wartość A (detektor też jest jednym obiektem, ale utworzonym 8 razy). Teoretycznie zdarzenie, przedstawione poniżej powinno działać:
>Wartość A(detektor)=Wartość A(kwadrat)
+Detektor nakłada się na kwadrat
Niestety jednak, w tym wypadku akcja się odbywa zawsze gdy choćby jeden odpowiedni detektor (np. o A=1) pokrywa się z odpowiednim kwadratem (o A=1). Chciałbym aby akcja (w tym wypadku koniec gry) następowała tylko wtedy, gdy WSZYSTKIE detektory nakładają się na odpowiadające im obiekty "kwadrat". Czy coś takiego jest wykonalne przy użyciu wartości, czy należy zabrać się za to w inny sposób? |
|
|
|
 |
jarlfenrir
Generał brygady
 
Główny edytor: 
Drugi edytor: 
Pomógł: 82 razy Posty: 1731
37283 Prestiż
|
Wysłany: 30-12-2008, 16:44
|
|
|
Może spróbuj tak:
* Zawsze ustaw liczik na 0
* numer pętli = ID obiektu
+ detektor zachodzi na obiekt
+ Id obiektu = ID detektora
--> dodaj do licznika 1
* Wartość licznika = ilość obiektów
--> koniec gry |
|
|
|
 |
Slawo
Legenda
 
Główny edytor: 
Pojedynki: nie
Pomógł: 16 razy Posty: 706
25566 Prestiż
|
Wysłany: 30-12-2008, 16:48
|
|
|
| bmatrix napisał/a: | | Chciałbym aby akcja (w tym wypadku koniec gry) następowała tylko wtedy, gdy WSZYSTKIE detektory nakładają się na odpowiadające im obiekty kwadrat. Czy coś takiego jest wykonalne przy użyciu wartości, czy należy zabrać się za to w inny sposób? |
No to właśnie rozwiązuje przykład "multinakładanie" chyba.
Bez multinakładania z loopem możesz zrobić tak, że gdy detektor 1 zachodzi na obiekt A - ustaw obiektowi A alterable A=1, gdy detektor 2 zachodzi na A - ustaw obiektowi A alterable B=1 ...itp. Gdy nie zachodzi det. 1 - ustaw alterable A=0.
I teraz by sprawdzić czy 8 detektorów zachodzi musisz zrobić always ustaw alterable Z obiektu A=alterable A+B+C+D+E+F+G+H (8 detektorów).
Gdy alterable Z obiektu A=8 - wszystkie detektory zachodzą na A.
Ale lepiej zrobić multinakładanie by Omenski. |
_________________ http://pograjmy.webd.pl - gry z rankingami graczy i turniejami - miejsce również na Twoje gry klikowe
Ponad 150 gier wydanych
Od 2003 w klikach
Od 2001 w hiscoresach na www
http://pograjmy.webd.pl/typer/ (typuj wyniki Mundialu)
Czytam: http://kontrowersje.net |
|
|
|
 |
bmatrix
Starszy sierżant
 
Główny edytor: 
Pomógł: 4 razy Posty: 204
2055 Prestiż
|
Wysłany: 30-12-2008, 20:14
|
|
|
Rozumiem, zrobiłem wszystko zgodnie z "multinakładaniem" i teraz gra FL sprawdza mi tylko pierwszy detektor (z 8):
*Zawsze > Start loop#1 Number("kwadrat") loopów
*Loop #1
+"kwadrat" nakłada się na "detektor"
+Wartość A "kwadrat"=Numer kroku loop#1
+Wartość A "kwadrat"=Wartość A "detektor"
-->Zakończ grę
Gdy pierwszy jakikolwiek blok jest nad pierwszym detektorem, gra kończy się (inne detektory w ogólę nie reagują na nachodzenie kwadratów - sprawdzałem licznikami).
Dodam jeszcze, że każdemu z utworzonych detektorów przyporządkowałem wartości A (od numeru 1 poczynając, tak samo jak wartości kwadratów), w tym samym zdarzeniu, w którym są one tworzone.
EDIT:
Może, dla zobrazowania sytuacji, umieszczę przykład nakładania się kwadratów i detektorów: PRZYKŁAD |
|
|
|
 |
Fadex
Legenda #4; #12; #18; #20; #21; #27
 
Główny edytor: 
Pojedynki: nie
Pomógł: 105 razy Posty: 1773
51612 Prestiż
|
Wysłany: 02-01-2009, 12:30
|
|
|
Zamiast "+Wartość A "kwadrat"=Numer kroku loop#1" spróbuj "flaga 0 obiektu kwadrat jest wyłączona", a podczas akcji włącz tę flagę.
Jeżeli to wyżej nie zadziała, to jest to jakaś pułapka klików, często w nią wpadam i nigdy nie pamiętam, jak było dobrze |
_________________ If it doesn't have to work, I can optimize any code to a runtime of zero. What's your superpower?
wat |
|
|
|
 |
bmatrix
Starszy sierżant
 
Główny edytor: 
Pomógł: 4 razy Posty: 204
2055 Prestiż
|
Wysłany: 02-01-2009, 13:28
|
|
|
Nie jestem pewien, czy zrobiłem wszystko tak jak sugerujesz, ale mnie nie działa .
Hmm, zauważyłem, że może niedokładnie wytłumaczyłem o co mi chodzi. Obrazek:
OBRAZEK
Gra ma zakończyć się tylko wtedy, gdy zajdzie właśnie taka sytuacja - tj. kwadrat o wart. A=1 nałoży się na detektor o wart. A=1 + kwadrat o wart. A=1, nałoży się na detektor o wart. A=1... itd. itd.
Samo sprawdzanie, czy obiekty się nakładają to nie problem, ale jednocześnie TGF ma sprawdzać czy każdy z nałożonych kwadratów ma taką samą wartość, jak detektor, leżący pod nim - co już jest dla mnie przeszkodą nie do pokonania. Robiłem to na milion sposobów i póki co żaden nie daje zadowalających wyników.
Gdybym miał do wykonania tylko tych 8 obiektów, zrobiłbym to zdarzenie, po zdarzeniu (pomimo nieefektywności takiej metody), ale jako że w ostatecznej wersji obiektów ma być kilkadziesiąt, nie jest to możliwe. |
|
|
|
 |
Fadex
Legenda #4; #12; #18; #20; #21; #27
 
Główny edytor: 
Pojedynki: nie
Pomógł: 105 razy Posty: 1773
51612 Prestiż
|
Wysłany: 02-01-2009, 13:41
|
|
|
http://www.speedyshare.com/857132670.html
Sorry, nie chciało mi się wcześniej ściągać przykładu, z lenistwa |
_________________ If it doesn't have to work, I can optimize any code to a runtime of zero. What's your superpower?
wat |
|
|
|
 |
bmatrix
Starszy sierżant
 
Główny edytor: 
Pomógł: 4 razy Posty: 204
2055 Prestiż
|
Wysłany: 02-01-2009, 14:52
|
|
|
Dzięki Ci wielkie za to - jak teraz widzę przeoczyłem kilka istotnych rzeczy i dlatego gra nie działała . |
|
|
|
 |
|
|