took a bit of a different approach, using css animations instead:


EDIT: This may be closer to what you're going for:
#holder{
overflow:hidden;
width:600px;
height:500px;
padding:25px;
background: url('http://www.backgroundlabs.com/wp-content/uploads/2013/02/clouds-seamless-background.jpg') repeat;
animation: bground 4s linear infinite;
}
#plane {
position: relative;
animation: fly 2s 0s infinite;
animation-timing-function: ease-in-out;
}
.pln {
width:100px;
position:relative;
}
.blt {
position: absolute;
margin-top:-15px;
width:10px;
height:5px;
background:red;
border-radius: 0px 30px 30px 0px;
animation: bullets 0.4s 0s 1;
animation-timing-function: ease-in;
}
@keyframes bullets {
from { left: 55px; }
to { left: 510px; }
}
@keyframes fly {
from { transform: translate(0%, 0%);}
50% { transform: translate(0%, 8%) }
to { transform: translate(0%, 0%); }
}
@keyframes bground {
to { background-position: 0 0; }
from { background-position: 500px 0; }
}
jquery
$(function() {
var $pln = $('#plane');
$(document).on('click', function(){
var $div = $('<div class="blt" />')
.appendTo($pln);
setTimeout(function() {
$div.fadeOut(100, function() {
$div.remove();
})
}, 300);
})
.on('keydown', function(e) {
var animationProps;
e.preventDefault();
switch(e.which) {
case 37:
animationProps = { left: "-=10px" }
break;
case 38:
animationProps = { top: "-=45px" }
break;
case 39:
animationProps = { left: "+=45px" }
break;
case 40:
animationProps = { top: "+=45px" }
break;
}
$pln.stop()
.animate(animationProps, { duration: 150, queue: false });
});
});