2012-12-19 11 views
5

Witam Rozwinąłem grę przy użyciu Construct2 i włączyłem AdControl wewnątrz głównej strony html, która pochodziła z eksportowanego projektu. Zauważyłem, że po przeciągnięciu z obszaru roboczego gry na reklamę i jej zwolnieniu nigdy nie wypuszcza dotyku. Moja gra jest zależna od konkretnego dotyku, więc naprawdę potrzebuję tego przycisku, aby zresetować, jeśli użytkownik przestanie dotykać ekranu. Czy brakuje mi tutaj czegoś, czy może istnieje obejście tego problemu? Wypróbowałem to samo w języku C#, używając kontrolki WebBrowser i nie doświadczyłem tego samego problemu.Wykrywanie, kiedy użytkownik ściąga kontrolkę reklamową w aplikacji HTML5/JavaScript?

Próbowałem kilka rzeczy, takich jak fragmenty HTML i oddzielenie div od płótna z marginesami, ale zawsze działa tak samo. Próbowałem też dołączyć reklamę za pomocą komponentu środowiska wykonawczego systemu Windows, ale nie wygląda na to, że pozwala przekazywać elementy interfejsu użytkownika, takie jak AdControl. Czy ktoś ma jakieś sugestie. Dzięki.

+0

Mówiąc o dotknie prawdopodobnie trzeba przeczytać: http://www.html5rocks.com/en/mobile/touch/ Jakie wydarzenia ty jesteś za pomocą ? używasz mouseClick, mouseOver ...? –

Odpowiedz

3

Oto przykład roboczych, które uwalnia dotyk, gdy ręka znajdzie się nad AD: http://jsfiddle.net/ChaitanyaMunipalle/jn3kZ/

można zobaczyć wszystkie wydarzenia dotykowych poniżej płótna w tym jsfiddle.

Sprawdź HammerJs pod kątem gestów przeciągania, uwalniania i innych gestów dotykowych. Można użyć zdarzenia dotykowe jak normalnych zdarzeń jquery jak

$('#canvasId').on('dragstart drag dragend release ....',callback); 
2

Niektóre potencjalnie powiązane problemy i rozwiązania.

AdControl takes control over Focus - dwa możliwe rozwiązania.

  1. spróbować ustawić właściwość IsEnabled false.

  2. Znaleziony nieco bardziej skuteczne obejście (który pozwala opuścić AdControl pełni włączona).

    1. Utwórz pole typu Boolean, aby wywołać "_advertRefreshed".
    2. Podczas ApplyTemplates przechwyć zdarzenie AdControl.Refreshed, ustawiając wartość _advertRefreshed prawdziwą.
    3. Dodaj OnLostFocus wydarzenie, które implementuje logikę „jeśli fokus jest WebView i _advertRefreshed prawda zestaw skupić się z powrotem do oryginału, a następnie po ten test zawsze set _advertRefreshed fałszywego ponownie”.

KeyPress swallowed by AdControl? - dyskusja w tej sprawie i potwierdzenie na Rozwiązanie nr 1 powyżej.

Microsoft AdControl stealing focus - Windows 8 MonoGame

+0

Dziękuję za odpowiedź, niestety to rozwiązanie dotyczy tylko aplikacji XAML, a nie szablonu HTML5/JavaScript, którego używam obecnie w mojej grze. Sprawdziłem jednak AdControl dla HTML, ale nie było włączonej właściwości. – loyalpenguin

+0

Czy oglądałeś wydarzenie 'IsEngagedChanged'? http://msdn.microsoft.com/en-us/library/advertising-mobile-windows-phone-adcontrol-silverlight-isengagedchanged-event(v=msads.20).aspx – JSuar

+0

Mam. Nie wiem, jak mogę tego użyć. Jakieś pomysły? Sądzę, że prawdopodobnie spróbowalibyśmy anulować wydarzenie. – loyalpenguin

2

że muszę zobaczyć swój kod, aby dać Ci najlepszą możliwą odpowiedź, ale ten problem jest dość powszechne.

Jeśli masz konfigurację tak (przy użyciu jQuery dla koncepcji demonstracji):

var mDown = false; 

$("#myDiv").mouseDown(function(){ 
    mDown = true; 
}).mouseMove(function(e){ 
    if (mDown) 
     // do stuff 
}).mouseUp(function(){ 
    mDown = false; 
}); 

Co się dzieje, jeśli mousedown wewnątrz div, ale mouseup poza nim, flaga nigdy nie jest wyczyszczone, ponieważ ten div nigdy nie otrzyma zdarzenia mouseup.

Co trzeba zrobić, to podłączyć zamiast zdarzenie mouseUp do okna lub dokumentu:

$(window).mouseUp(function(){ 
    mDown = false; 
}); 

Będzie on następnie wyczyścić swój „stan”, niezależnie od tego, gdzie po zwolnieniu przycisku myszy.

Powiązane problemy