Bir HTML5 oyunu geliştiriyorum ve fare imlecini belirli bir olaydaki belirli bir kontrolün üzerine getirmeye çalışıyorum, böylece belirli bir yönde hareket etmek her zaman aynı sonucu verir. Mümkün mü?
Bir HTML5 oyunu geliştiriyorum ve fare imlecini belirli bir olaydaki belirli bir kontrolün üzerine getirmeye çalışıyorum, böylece belirli bir yönde hareket etmek her zaman aynı sonucu verir. Mümkün mü?
Yanıtlar:
Bu yüzden bunun eski bir konu olduğunu biliyorum ama önce bunun mümkün olmadığını söyleyeceğim. Şu anda en yakın şey fareyi tek bir konuma kilitlemek ve x ve y'deki değişikliği takip etmektir. Bu konsept - görünüşe göre - Chrome ve Firefox tarafından benimsenmiştir. Fare Kilidi denen şey tarafından yönetilir ve kaçışa basmak onu kırar. Benim itibaren kısa salt yukarı, ben fikir bir yere fareyi kilitler ve olayları ve sürükle-tıklayın benzer hareket olayları bildirir olduğunu düşünüyorum.
İşte sürüm belgeleri:
FireFox: https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API
Chrome: http://www.chromium.org/developers/design-documents/mouse-lock
Ve işte oldukça güzel bir gösteri: http://media.tojicode.com/q3bsp/
Fare işaretçisini javascript ile hareket ettiremezsiniz.
Yapabilirseniz, bir saniyeliğine sonuçlarını düşünün;)
Basit bir http çağrısı, AJAX, ne olursa olsun, fareyi hareket ettirmek istediğiniz koordinatlarla CGI-komut dosyası olarak çalıştırın, örneğin:
http://localhost:9876/cgi/mousemover?x=200&y=450
Not: Herhangi bir sorun için, neden ve nasıl - yapılamaz ve yapılmaması gerektiğine dair yüzlerce mazeret vardır .. Ama bu sonsuz evrende, bu gerçekten sadece bir belirleme meselesi - SİZİN bunu gerçekleştirecek.
Gerçek (sistem) fare imlecini kullanmadıysanız, fare imlecini ekranın belirli bir alanına yerleştirmeyi başarabileceğinizi hayal ediyorum.
Örneğin, imlecinizin yerine hareket etmesi için bir görüntü oluşturabilir, farenizin sahnenize girmesini algıladığınızda, sistem imlecindeki stili 'yok' ( sceneElement.style.cursor = 'none'
) olarak ayarlayan ve ardından hareket eden gizli bir görüntü öğesini ortaya çıkaran bir olayı işleyebilirsiniz. önceden tanımlanmış eksen / sınırlayıcı kutu çevirisine dayalı olarak sahnede istediğiniz herhangi bir yerde olmak için bir imleç olarak.
Bu şekilde, gerçek imleci nasıl hareket ettirdiğiniz önemli değil, çeviri yönteminiz görüntü imlecinizi ihtiyacınız olan her yerde tutacaktır.
edit: jsFiddle'da bir resim gösterimi ve zorla fare hareketi kullanan bir örnek
Harika soru. Bu gerçekten Javascript tarayıcı API'sinde eksik olan bir şeydir. Ayrıca ekibimle bir WebGL oyunu üzerinde çalışıyorum ve bu özelliğe ihtiyacımız var. Firefox'un bugzilla'sında bir sorunu açtım, böylece fare kilitlemesine izin veren bir API'ye sahip olma olasılığı hakkında konuşmaya başlayabiliriz. Bu, dışarıdaki tüm HTML5 / WebGL oyun geliştiricileri için faydalı olacak.
İsterseniz, geri bildiriminizle birlikte bir yorum bırakın ve sorunu destekleyin:
https://bugzilla.mozilla.org/show_bug.cgi?id=630979
Teşekkürler!
Fare işaretçisinin konumunu algılayabilir ve ardından web sayfasını (vücut konumu göreceli olarak) hareket ettirebilir, böylece tıklamalarını istediğiniz şeyin üzerine gelebilirler.
Örnek olarak, bu kodu tarayıcı konsolunuzun mevcut sayfasına yapıştırabilirsiniz (ve daha sonra yenileyebilirsiniz)
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();
Fareyi hareket ettiremezsiniz ama kilitleyebilirsiniz. Not: click olayında requestPointerLock'u aramanız gerekir.
Küçük Örnek:
var canvas = document.getElementById('mycanvas');
canvas.requestPointerLock = canvas.requestPointerLock || canvas.mozRequestPointerLock || canvas.webkitRequestPointerLock;
canvas.requestPointerLock();
Belgeler ve tam kod örneği:
https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API
Fare işaretçisini javascript kullanarak ve dolayısıyla bariz güvenlik nedenleriyle hareket ettiremezsiniz. Bu efekti elde etmenin en iyi yolu, kontrolü gerçekten fare imlecinin altına yerleştirmektir.
Bu basitçe, fare işaretçisinin gerçek konumunu alarak ve ardından bu telafiye bağlı olarak hareketli yazı / sahne fare eylemlerini hesaplayıp telafi ederek yapılamaz mı?
Örneğin, fare işaretçisinin alt orta olması gerekir, ancak sol üstte bulunur; imleci gizleyin, kaydırılmış bir imleç görüntüsü kullanın. İmleç hareketini kaydırın ve yeniden konumlandırılmış imleç hareketli grafik (veya 'kontrol') tıklamalarıyla eşleşecek şekilde harita fare girdisini kaydırın Sınırlara ulaşıldığında / varsa yeniden hesaplayın. İmleç gerçekte olmasını istediğiniz noktaya ulaştığında / olduğunda, telafiyi kaldırın.
Sorumluluk reddi beyanı, oyun geliştiricisi değil.
İlginç. Bu, daha önce belirtilen nedenlerle (spam tıklamaları ve kötü amaçlı yazılım yerleştirme) doğrudan mümkün değildir, ancak aynı izlenimi yaratan bu saldırıyı düşünün:
Bir div'iniz olduğunu varsayalım, gerçek imleci gizlemek için bu css özelliğini kullanabilirsiniz:
.your_div {
cursor: none
}
Basitçe bir görüntü, imleç benzer bir görünüm oluşturun ve bunu web sayfanıza position = 'absolute' ile yerleştirin.
Bu kolay. Gerçek fare konumunu nasıl elde edeceğinizi öğrenmek için interneti kontrol edin (X ve Y koordinatları).
Gerçek imleç hareket ettikçe, sözde imlecinizi aynı X & Y farkı kadar hareket ettirin. Benzer şekilde, javascript magic ile web sayfanızın herhangi bir yerinde her zaman bir tıklama etkinliği oluşturabilirsiniz (sadece internette nasıl yapılır konusunda arama yapın).
Şimdi bu noktada, sözde imleci istediğiniz şekilde kontrol edebilirsiniz ve kullanıcınız gerçek imlecin hareket ettiği izlenimini edinir.
====
Adil Uyarı: Yapmayın. Belirli bir kullanım durumunuz yoksa veya kullanıcılarınızı kaçırmaya kararlı değilseniz, kimse imlecinin veya bilgisayarının bu şekilde kontrol edilmesini istemez.