2013-10-08 2 views
1

Я строю игру с использованием canvas и EaselJS, но есть проблема при выполнении чего-либо внутри onclick, который удаляет фокус окна, т.е. prompt, alert, window.open.EaselJS onclick занимает весь холст

Это происходит в FireFox и на некоторых мобильных устройствах Android из того, что я видел.

Я думаю, что я понимаю, почему это, но я не знаю, как это исправить (я не знаю, как объяснить в одном предложении, так что название этого вопроса не совсем верно)

Если у меня есть предупреждение в пределах OnClick как так

_t.container.on('click', function(e) { 
    alert('test'); 
    //end 
    e.preventDefault(); 
    e.nativeEvent.preventDefault(); 
    return false; //all of these added when trying to find a work around 
}); 

// кАК ВОПРОИЗВЕДЕНИЕ Issue

если нажать на цель, огни предупреждения, переместите мышь везде, где (еще над холстом, хотя) нажать кнопку ввода для закрытия предупреждения, а затем независимо от того, где расположена мышь, il он перемещается, нажатие кнопки запускает одно и то же событие, а затем снова появляется предупреждение.

Это действительно проблема на мобильных устройствах, так как «мышь» не может быть перемещена/коснуться позиции, а затем нажать экран всегда запускает второй onclick, тогда как на настольных компьютерах он делает это только в том случае, если мышь не перемещается с момента закрытия предупреждения.

Я думаю, что это проблема с самой библиотекой CreateJS, так как любые примеры событий click и с ними содержат эту проблему.

Я думал, что там может быть способ заставить createjs установить mouseposition в 0,0

вот пример, где вопрос может быть найден ..

http://www.ajohnstone.com/test/hackday/CreateJS-EaselJS-b262a85/tutorials/Mouse%20Interaction/

+0

Если вы должны использовать оповещения или фокусировать потери функций, то, возможно, вы можете использовать функцию hitTest в вашем обработчике, чтобы проверить, действительно ли щелчок находится на контейнере. –

+0

Разве это не даст тот же результат, что и createjs, все еще думает, что мышь находится в исходном положении. И это не так много предупреждений, так как window.open – rorypicko

+0

hitTest принимает аргументы x и y в качестве аргумента, вы можете передавать координаты событий. Но я не тестировал (должен построить тестовый пример). –

ответ

3

Там, очевидно, ошибка или ограничение в stage.js из-за того, что положение мыши на сцене не пересчитывается, когда мышь не работает, но только при перемещении мыши (что может быть обнаружено только при фокусировке окна).

Я мог бы это исправить, добавив следующее:

stage._handleMouseDown = function(e) { 
    this._handlePointerDown(-1, e, e.pageX, e.pageY); 
}; 

Идея заключается в том, чтобы переопределить стандартную _handleMouseDown функцию, чтобы передать координаты _handlePointerDown, так что положение пересчитывается. Я не думаю, что это изменение будет препятствовать производительности (после того, как все эти же вычисления уже сделаны для каждого шага, и мы просто сделаем это при щелчке).

Demonstration

Update:The fix I suggested был в библиотеке incorporated, эта ошибка в настоящее время нет (но некоторые онлайн демонстрации до сих пор используют старую версию библиотеки).

+0

Рори, если вы подтвердите, что это сработает для вас, мы можем предложить изменить код, с вескими причинами, о которых я думаю. –

+0

идеальное решение! это отлично работает! спасибо – rorypicko

+0

@ RoryPicko92 Я отправил вопрос: https://github.com/CreateJS/EaselJS/issues/375 –

Смежные вопросы