Tworzę grę HTML5 i próbuję ustawić kursor myszy na określonej kontrolce na określonym wydarzeniu, aby poruszanie się w określonym kierunku zawsze dawało ten sam rezultat. czy to możliwe?
Tworzę grę HTML5 i próbuję ustawić kursor myszy na określonej kontrolce na określonym wydarzeniu, aby poruszanie się w określonym kierunku zawsze dawało ten sam rezultat. czy to możliwe?
Odpowiedzi:
Więc wiem, że to stary temat, ale najpierw powiem, że nie jest to możliwe. Obecnie najbliższą rzeczą jest zablokowanie myszy w jednej pozycji i śledzenie zmian w jej X i Y. Ta koncepcja została przyjęta przez - wygląda na to - Chrome i Firefox. Jest zarządzany przez tak zwaną blokadę myszy , a uderzenie w ucieczkę ją złamie. Z moich krótkich informacji wynika, że pomysł polega na tym, że blokuje on mysz w jednym miejscu i raportuje zdarzenia ruchu podobne do zdarzeń typu „kliknij i przeciągnij”.
Oto dokumentacja wydania:
FireFox: https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API
Chrome: http://www.chromium.org/developers/design-documents/mouse-lock
A oto całkiem zgrabna demonstracja: http://media.tojicode.com/q3bsp/
Nie możesz przesuwać wskaźnika myszy za pomocą JavaScript.
Pomyśl przez chwilę o konsekwencjach, jeśli możesz;)
Uruchom go jako skrypt CGI za pomocą prostego wywołania http, AJAX, cokolwiek - ze współrzędnymi, na które chcesz przesunąć mysz, np .:
http://localhost:9876/cgi/mousemover?x=200&y=450
PS: W przypadku każdego problemu istnieją setki wymówek, dlaczego i jak - nie można i nie powinno się - zrobić. Ale w tym nieskończonym wszechświecie to tak naprawdę tylko kwestia determinacji - czy TY sprawi, że to się stanie.
Wyobrażam sobie, że możesz umieścić kursor myszy w danym obszarze ekranu, jeśli nie użyjesz prawdziwego (systemowego) kursora myszy.
Na przykład, możesz stworzyć obraz, który będzie działał w miejscu kursora, obsłużyć zdarzenie, które po wykryciu wejścia myszy w scenę, ustawić styl kursora systemowego na „none” ( sceneElement.style.cursor = 'none'
), a następnie wywołać ukryty element obrazu działający jako kursor, który ma być w dowolnym miejscu sceny w oparciu o predefiniowane tłumaczenie osi / obwiedni.
W ten sposób bez względu na to, jak przesunąłeś rzeczywisty kursor, Twoja metoda tłumaczenia utrzymywałaby kursor obrazu tam, gdzie jej potrzebujesz.
edit: przykład w jsFiddle wykorzystujący reprezentację obrazu i wymuszony ruch myszy
Świetne pytanie. Tego naprawdę brakuje w interfejsie API przeglądarki Javascript. Pracuję też z moim zespołem nad grą WebGL i potrzebujemy tej funkcji. Otworzyłem problem w bugzilli Firefoksa, abyśmy mogli zacząć mówić o możliwości posiadania interfejsu API umożliwiającego blokowanie myszy. Będzie to przydatne dla wszystkich twórców gier HTML5 / WebGL.
Jeśli chcesz, przyjdź i zostaw komentarz ze swoją opinią i zagłosuj za problemem:
https://bugzilla.mozilla.org/show_bug.cgi?id=630979
Dzięki!
Możesz wykryć położenie wskaźnika myszy, a następnie przesunąć stronę internetową (z względną pozycją ciała), aby najechali na to, co chcesz, aby kliknęli.
Na przykład możesz wkleić ten kod na bieżącej stronie w konsoli przeglądarki (a następnie odświeżyć)
var upvote_position = $('#answer-12878316').position();
$('body').mousemove(function (event) {
$(this).css({
position: 'relative',
left: (event.pageX - upvote_position.left - 22) + 'px',
top: (event.pageY - upvote_position.top - 35) + 'px'
});
});
document.getElementByID('thingtoclick').click();
Nie możesz poruszać myszą, ale możesz ją zablokować. Uwaga: musisz wywołać requestPointerLock w zdarzeniu click.
Mały przykład:
var canvas = document.getElementById('mycanvas');
canvas.requestPointerLock = canvas.requestPointerLock || canvas.mozRequestPointerLock || canvas.webkitRequestPointerLock;
canvas.requestPointerLock();
Dokumentacja i przykład pełnego kodu:
https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API
Nie możesz przesuwać wskaźnika myszy za pomocą JavaScript, a więc z oczywistych względów bezpieczeństwa. Najlepszym sposobem osiągnięcia tego efektu byłoby umieszczenie kontrolki pod wskaźnikiem myszy.
Ciekawy. Nie jest to bezpośrednio możliwe z powodów wskazanych wcześniej (kliknięcia spamu i wstrzyknięcie złośliwego oprogramowania), ale rozważ ten hack, który stwarza wrażenie tego samego:
Załóżmy, że masz element div, możesz użyć tej właściwości css, aby ukryć prawdziwy kursor:
.your_div {
cursor: none
}
Po prostu utwórz obraz, podobny do kursora i umieść go na swojej stronie za pomocą position:absolute
.
To jest łatwe. Sprawdź w Internecie, jak uzyskać rzeczywistą lokalizację myszy (współrzędne X i Y).
Gdy porusza się rzeczywisty kursor, przesuń pseudo kursor o taką samą różnicę X i Y. Podobnie, zawsze możesz wygenerować zdarzenie kliknięcia w dowolnym miejscu na swojej stronie za pomocą magii javascript (po prostu przeszukaj internet, aby dowiedzieć się, jak to zrobić).
Teraz w tym momencie możesz sterować kursorem pesudo tak, jak chcesz, a twój użytkownik będzie miał wrażenie, że prawdziwy kursor się porusza.
Uczciwe ostrzeżenie: nie rób tego. Nikt nie chce, aby jego kursor lub komputer były kontrolowane w ten sposób, chyba że masz jakiś konkretny przypadek użycia lub jesteś zdeterminowany, aby uciec od użytkowników.
Czy nie można tego po prostu zrobić, uzyskując rzeczywistą pozycję wskaźnika myszy, a następnie obliczając i kompensując działania myszy sprite / sceny na podstawie tej kompensacji?
Na przykład potrzebujesz, aby wskaźnik myszy znajdował się na dole pośrodku, ale znajduje się w lewym górnym rogu; ukryj kursor, użyj przesuniętego obrazu kursora. Przesuwaj ruch kursora i mapuj wejście myszy, aby dopasować przesunięte kursorowe kliknięcia sprite (lub „control”). Kiedy / jeśli granice zostaną osiągnięte, przelicz ponownie. Jeśli / kiedy kursor rzeczywiście dotrze do punktu, który chcesz, usuń kompensację.
Zastrzeżenie, a nie twórca gier.