Необходимо будет препятствовать тому, чтобы форма была отправлена, пока reCAPTCHA маркер не вставляется в форму. Можно достигнуть этого при помощи глобальной переменной, которая установлена после загрузки reCAPTCHA и проверена прежде, чем отправить форму:
<script src='https://www.google.com/recaptcha/api.js?render={{config("recaptcha.key")}}'></script>
<script>
// Whether the reCAPTCHA token is loaded into the form
var recaptchaLoaded = false;
// Whether the user already attempted submitting the form
var attemptedSubmit = false;
grecaptcha.ready(function () {
grecaptcha.execute('{{config("recaptcha.key")}}', {action: '{{$action}}'}).then(function (token) {
$('<input />').attr('type', 'hidden')
.attr('name', 'recaptcha')
.attr('value', token)
.appendTo('form');
window.recaptchaLoaded = true;
if(window.attemptedSubmit) {
// As the user already attempted a submit,
// trigger the "submit" mechanism
// Note that this doesn't trigger the JS "submit" event
$("#form").submit();
}
});
});
// Add an event listener for "submit"
$("#form").submit(function(event) {
window.attemptedSubmit = true;
if(!window.recaptchaLoaded) {
// The reCAPTCHA token has not been inserted
// Prevent submission of the form
event.preventDefault();
// Your button animation logic here...
}
});
</script>
Я бы посмотрел на JigLibX . Это порт C # движка JigLib, который поддерживает все, что вам нужно. Он также поставляется с довольно большим количеством примеров, и если у вас есть опыт работы с физическими движками, работать с ним не должно быть слишком сложно.
Кроме того, вы можете посмотреть этот поток на форумах Creators Club, где обсуждаются некоторые физические движки XNA.
РЕДАКТИРОВАТЬ Кроме того, я забыл упомянуть, что сам использовал JigLibX для пары проектов, и он отлично работает, даже если довольно тяжелые физические симуляции.