NukeBoards - Kreatywność przede wszystkim
FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  DownloadDownload
RejestracjaRejestracja  ZalogujZaloguj

Odpowiedz do tematu
Poprzedni temat :: Następny temat
[Ogólne] Drobne, ale częste i irytujące problemy
Autor Wiadomość
Minty 
Stwórczyni
omc dr fizyki


Pojedynki: być może
Pomogła: 259 razy
Posty: 3446

33789 Prestiż
Wysłany: 20-09-2009, 15:06   [Ogólne] Drobne, ale częste i irytujące problemy

Oto 10 drobnych, ale częstych i irytujących problemów, z którymi często trzeba się zmagać, bo ich rozwiązania, choć proste, szybko wylatują z głowy. Być może warto dodać tę stronę do zakładek :)

1. Kursor skokowy
Zaturas napisał/a:
Koledzy! mam wyjatkowo wkurzajacy problem... No tak chodzi o to ze znowu nie moge zrobic ruch myszka 32x32 jak w mmfie no wiecie przestawianie obiektow

Rozwiązanie: Należy ustawić pozycję X obiektu kursora na ((XMouse+16)/32)*32 i analogicznie ustawić pozycję Y.

2. Kąt obrotu (angle)
Obiekty takie jak obiekt aktywny, Active Picture czy Lens interpretują podawany kąt normalnie (zwiększa się przeciwnie do ruchu wskazówek zegara, a 0 jest na godzinie trzeciej).
Niestety, z nieznanego powodu obiekt Alpha Channel liczy to odwrotnie (trzeba podać przeciwny kąt, żeby obrócić poprawnie).
Co gorsza, trzeba pamiętać o tym, że zmienna Y rośnie w dół, a nie w górę, co sprawia, że żeby poprawnie poruszać obiektem za pomocą funkcji trygonometrycznych (ruch 360), trzeba podać przeciwny kąt (przynajmniej przy funkcji sinus).
Advaced Direction object z kolei już bierze tą odwrotność pod uwagę przy obliczaniu przesunięć w ruchu i należy tam normalnie podawać kąt.
W Lua jednostką miary kątowej jest radian. Kąt w stopniach należy pomnożyć przez 0.01745, aby uzyskać kąt w radianach.

3. Nieniszczone obiekty w pętli
Obiekty nie mogą być zniszczone w szybkiej pętli. Jeśli zrobisz taką akcję, zadziała ona dopiero po zakończeniu pętli. Jeśli np. uruchomisz pętlę 100 razy i w każdym cyklu będziesz przesuwał pocisk o 1 px w prawo, to jeśli w zasięgu 100px jest dwóch przeciwników, którzy są niszczeni po trafieniu (tak jak pocisk) - zginą obaj, bo pocisk zostanie zniszczony dopiero na końcu.
Rozwiązanie: należy przerwać pętlę (stop loop), a jeśli to niemożliwe (np. pocisków jest dużo i trafienie jednego nie powinno hamować ruchu reszty), to pocisk po trafieniu powinien być wykluczany z pętli, np. poprzez dodanie do zdarzeń pętli warunku sprawdzającego, czy flaga 0 pocisku jest wyłączona, a do zdarzenia kolizji dodatkowo (poza warunkiem) - przez dodanie akcji ustawiającej tę flagę na włączoną.

4. Licznik lub tekst nad obiektem aktywnym
Liczniki i tekst (String object) domyślnie sa traktowane jak tło i nie mogą zachowywać się jak normalny interfejs, bo nie mogą być wysunięte na przód.
Rozwiązanie: są dwa - wystarczy odznaczyć we właściwościach obiektu opcję "display as background"; drugie rozwiązanie jest o wiele skuteczniejsze, bo nowe obiekty też nie będą "wystawać", ale możliwe tylko w TGF2/MMF2. Należy skorzystać z warstw (Layers): stworzyć drugą (lub kolejną) i przenieść doń wszystkie elementy interfejsu.

5. Nieznikające wklejki do tła
Starsze kliki potrafią tylko wklejać obraz do tła (Paste image into Backdrop), co jest nietrwałe. Przewinięcie poza ekran i powrót, minimalizacja i maksymalizacja czy też specjalna do tego akcja "redraw frame" (Fast Loop) powodują zniknięcie takich wklejek. Nowsze kliki mają dodatkowo akcję dodającą obiekt tła (Add Backdrop) - wtedy efekt będzie permanentny.
(więcej)

6. Błędy przy chowaniu do zasobnika
Przy chowaniu okna do zasobnika systemowego mogą powstawać błędy, głównie w obiektach systemowych (edit box, przyciski, listy rozwijane). Można je ominąć korzystając z dodatku Tray Icon do stworzenia ikony w zasobniku i Window object do chowania okna. Przy kliknięciu ikony w zasobniku należy przełączyć flagę, której pozycja wyłączona oznacza widzialność okna, a włączona - niewidzialność. Uwaga: sam dodatek Tray Icon jest kłopotliwy i nawet bez chowania okna może powodować inne błędy. Używaj go tylko, jeśli nie ma innego wyjścia i sprawdź, czy nie pojawiają się błędy z obsługą m.in. combo boxów.
(więcej)

7. Flaga blokująca
Powiedzmy, że chcesz, aby na wciśnięcie klawisza X główny bohater-wampir zamieniał się w nietoperza i odwrotnie. Pierwsze zdarzenie będzie sprawdzać, czy wciśnięto X i czy bohater jest wampirem, po czym zamieni go w nietoperza. Drugie zdarzenie sprawdzi, czy wciśnięto X i czy bohater jest nietoperzem - i zamienia go w wampira. Tu pojawia się problem - spełnione warunki pierwszego zdarzenia spowodują akcje, które sprawią, że spełnione będą warunki drugiego. Wampir natychmiast dwukrotnie się przemieni i zostanie wampirem. No i dostanie kołkiem, nieszczęśnik.
Aby uratować wampira przed śmiercią, możesz zastosować jedno zdarzenie, które przy wciśnięciu X przełącza flagę (np. 0), której wartość dopiero w dwóch kolejnych zdarzeniach decyduje o postaci bohatera. Niestety, to rozwiązanie działa tylko wtedy, gdy postaci są dwie (bo flaga posiada tylko 2 wartości - może być włączona lub wyłączona) - gdy wampir chce zamieniać się kolejno w nietoperza i ducha, to ma problem. Można też wykorzystać zmienną, ale co będzie, jak ich zabraknie? Z pomocą przybywa flaga blokująca.
Rozwiązanie polega na tym, aby zrobić 3 zdarzenia sprawdzające, czy wciśnięto X, czy bohater ma postać kolejno wampira, nietoperza i ducha oraz, dodatkowo, czy flaga 0 jest wyłączona (ten warunek nie musi być obecny przy pierwszym zdarzeniu, bo jest właśnie pierwsze i na pewno flaga jest dobrze ustawiona). Akcje to odpowiednie przemiany, ale dodatkowo ustawianie flagi 0 na włączoną (ponownie, tej akcji nie musi być w ostatnim zdarzeniu). Na samym końcu trzeba zrobić zdarzenie wyłączające flagę 0. Voila!
(więcej)

8. Losowość
Kilka ważnych zasad obowiązujących przy losowaniu:
Minimalna wylosowana wartość to 0. Aby wylosować liczbę 0 lub 1: random(2)
Aby wylosować liczby z jakiegoś zakresu, np. 10-30, trzeba dodać jego dolną granicę do funkcji random od różnicy między granicami plus jeden, np. 10+random(21); bez dodania jedynki maksymalną wylosowaną wartością byłoby 19, co dałoby zakres 10-29.
Aby wylosować liczbę zmiennoprzecinkową z danego zakresu, trzeba wyobrazić ją sobie jako ułamek zwykły. Np. chcemy wylosować wartość od 0,1 do 0,3: są to odpowiednio ułamki 1/10 oraz 3/10 lub też 10/100 oraz 30/100 (dla większej dokładności). Wystarczy więc wylosować liczbę od 10 do 30 i podzielić ją przez 100.0 (jeśli nie dodamy ".0", to klik uzna to jako dzielenie liczb całkowitych i wyjdzie zero :) ). Czyli w naszym przykładzie: (10+random(21))/100.0

9. Wojna z artefaktami
Jeśli zauważasz, że niszczone obiekty zostawiają po sobie "ślad", to możesz spróbować dwóch rozwiązań:
a) przenoś obiekt poza planszę i tam je niszcz - ślad poza planszą to nie problem,
b) nadawaj obiektom ruch i uruchamiaj go przy niszczeniu - obiekt jest wtedy "aktywizowany" i traktowany inaczej, przez co ślady nie zostają.
Jeżeli prolem sprawiają liczniki, to odznacz w ich właściwościach opcję "display as background".

10. {tu wpisz swój problem}
Sprawdź na klikowym FAQ, czy ktoś już nie poruszał problemu. Dobrym pomysłem jest też zerknąć na Klikipedię. Jeśli to się nie powiedzie, spytaj - w końcu po to tu jesteśmy :)

Podziękowania dla: Big Smoke, Cremmy, Don Sotto, Fadex, Kodek
 
     
Aleks 
Moderator
Wilczek


Skype:
Pomógł: 78 razy
Posty: 636

28588 Prestiż
Wysłany: 25-12-2009, 14:57   

Sprawdzanie odległości między obiektami w MMF2


Kod:
Sqr((Abs(X( "Active" )-X( "Active 2" )))*(Abs(X( "Active" )-X( "Active 2" )))+Abs((Y( "Active" )-Y( "Active 2" )))*Abs((Y( "Active" )-Y( "Active 2" ))))
 
     
Minty 
Stwórczyni
omc dr fizyki


Pojedynki: być może
Pomogła: 259 razy
Posty: 3446

33789 Prestiż
Wysłany: 25-12-2009, 16:49   

Znacznie lepiej użyć dodatku, np. Advanced Direction - działa szybciej i jest prostsze w obsłudze.

http://romanx.webd.pl/nb/viewtopic.php?t=2599
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

PSK Cytaty Klikibaza - kopia wszystkich klików Klikipedia - encyklopedia o tworzeniu gier Discord KlikCzat Zaproszenie
Daj piniondza Wielkie Muzeum Klikowe

Powered by phpBB modified by Przemo © 2003 phpBB Group