Skocz do zawartości
Bobkowy

Android czujnik ruchu

Rekomendowane odpowiedzi

Mam za zadanie zrobić prostą grę na androida z wykorzystaniem czujnika ruchu.

Sterowanie zrobiłem łopatologiczne, niestety obiekt porusza się prawidłowo tylko w osi x natomiast jeśli chce poruszać się w osi y os x musi być wyzerowana czyli idealnie poziomo co jest prawie niemożliwe. Wygląda to tak:

74947114.jpg

Prosiłbym o nakierowanie co jest źle lub wskazówkę jak można to zrobić porządnie.

Szukałem już na różnych stronach o wykorzystaniu funkcji YoYo_GetTiltX() lecz jedyne co udało mi się odnaleźć to zmiana orientacji obrazu z poziomego na pionowy i odwrotnie .

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Co to za wersja programu?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Wygląda jak HTML5, ale tam nie było chyba Androida.... a funkcje YoYo_* były wywalone praktycznie na równi z premierą prawie rok temu... obecnie nie działają. Używasz jakiegoś pirata czy coś?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Wersja to Game Maker Studio 1.1 MiPS ściągnięta przedwczoraj ze stronki producenta więc żaden pirat :)

Po wejściu w zakładkę scripts -> show build in functions wyświetliło mi ponad 20 funkcji YoYo_*

Oczywiście mam darmową wersję bo nie opłaca mi się kupować pro żeby zrobić jedna gierkę na zaliczenie która i tak nie pójdzie na sprzedaż.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Po zmianie tych funkcji gra niestety działa identycznie dalej mogę poruszać się bezproblemowo tylko w jednej osi.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Musisz przyjąć, że pozycja w jakiej tablet się znajduje w momencie odpalenia gry to pozycja wyjściowa i teraz względem niej sprawdzać odchył. Do tego jakiś margines wg. którego się nie rusza. Nalezy też pamiętać, że:

 

w pozycji poziomej:

lewo-prawo: Y, góra-dół: Z

w pozycji pionowej:

lewo-prawo: X, góra-dół: Z

 

(co zresztą wynika z obrazków w dokumentacji)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Widzę że nie rozumiesz o co mi chodzi. Jeśli dam tylko odczytywanie pozycji z osi x to w osi x porusza się idealnie, jeśli w osi y to znowu porusza się idealnie ale jeśli dam zczytywanie pozycji w obu osiach jednocześnie to tylko jedna oś działa dobrze a druga już nie. Obiekt zaczyna drżeć i muszę telefon trzymać idealnie pomiędzy górą a dołem żeby w danej osi funkcja zwracała 0 oraz przechylony w któryś bok żeby obiekt poruszał się w daną stronę.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

No cóż, nakazujesz iść postaci na raz w dwa różne kierunki... są dwie opcje:

 

a) wyliczasz średnią pomiędzy kierunkami i idziesz na skos

b ) zwiększasz margines przechylenia tabletu (martwą strefę) w kodzie i pozwalasz iść tylko w jedną stronę, stosując odpowiednio if/else zależnie czy bardziej jesteś wychylony w poziomie czy w pionie

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Opcja a odpada ponieważ gra to labirynt więc raczej opcja b ;)

Tylko że nie mam bardzo pomysłu jak to wykonać :unsure:

Wiem że muszę użyć 2 zmiennych które będą incrementowane o wartość device_get_tilt_*() czyli -1,0,1 w podanym przeze mnie zakresie.

Tylko gdzie muszę umieścić taki skrypt ?

Wiem że są 3 możliwe miejsca 1 to ogólny skrypt programu w menu po lewej, 2 to skrypt pokoju ale to odpada bo nie będę do każdego pokoju wklejał tych samych skryptów oraz 3 to skrypt który można umieścić nad blokami w obiekcie. Którą opcję lepiej wybrać 1 czy 3?

Następne pytanie to zmienne: mogę użyć jakichś wbudowanych czy sam muszę jakieś zadeklarować?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

GML
//create

/// zakładam poziome ułożenie

nachylenie = device_get_tilt_z();

martwaStrefa = 0.3;

 

GML
//step

if (abs(device_get_tilt_y()) > martwaStrefa) {

// poziomo

speed = 2;

direction = -180 * sign(device_get_tilt_y());

} else if (abs(device_get_tilt_z() - nachylenie) > martwaStrefa) {

// pionowo

speed = 2;

direction = 90 * sign(device_get_tilt_z());

}

 

jakoś tak chyba, może przy kierunku trzeba zmienić znaki na -, sprawdź

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Wkleiłem to co napisałeś wywaliłem moją łopatologię i obiekt porusza się tylko do góry i w w lewo aż do krawędzi i potem brak jakiegokolwiek odzewu.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Spróbuję zerknąć na to wieczorem w domu, bo pisałem z głowy.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Po małych modyfikacjach wszystko chodzi idealnie :)

Dzięki wielkie za pomoc.

Wklejam kod dla potomnych

if (abs(device_get_tilt_y()) > martwaStrefa) {
// poziomo
speed = 2;
direction =90 - (90 * sign(device_get_tilt_y()));
} 

else if (abs(device_get_tilt_x()) > martwaStrefa) {
// pionowo
speed = 2;
direction = -90 * sign(device_get_tilt_x());
}

 

Mam jeszcze jeden problem otóż jak dam kompiluj to aplikacja wyświetla się normalnie na moim telefonie natomiast jak dam create application to wyświetla mi 2 ostrzeżenia

 [javac] Note: Some input files use or override a deprecated API.
   [javac] Note: Recompile with -Xlint:deprecation for details.

Kompilacja tra około 2 minut daje wynik success zaczyna ładować na telefon i od razu dostaję komunikat aplikacja została zatrzymana

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Hm, to może być zła wersja Javy, może brak czegoś z Android SDK - ciężko stwierdzić, może jakiś niezgłoszony bug.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Wydaje mi się że problem wynika z tego że mam wersję GameMaker Studio: MiPS i w ustawieniach aplikacji w zakładce Android nie mogę zaznaczyć architektur Armv5 Armv7 i x86.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×