/ Published in: JavaScript
Expand |
Embed | Plain Text
/* * Created May 26, 2010 * Licensed under CC-by-2.0 */ var newSprite, currentSprite; function get(elmnt) { return document.getElementById(elmnt); } function removeUnits(str, unitsLength) { return parseInt(str.substring(0, str.length-unitsLength)); } function addSprite(spriteName, movable) { newSprite = document.createElement('img'); newSprite.id = 'sprite'+spriteName; newSprite.src = 'sprites/'+spriteName+'.png'; newSprite.onclick = function() { currentSprite = this.id.substring(6); }; newSprite.style.left = '0px'; newSprite.style.top = '0px'; newSprite.title = movable; get('canvas').appendChild(newSprite); if(!currentSprite) currentSprite = spriteName; } function moveSprite(spriteName, incrementLeft, incrementTop) { if(incrementLeft) getSprite(spriteName).style.left = (getSpriteLeft(spriteName) + incrementLeft).toString() + 'px'; if(incrementTop) getSprite(spriteName).style.top = (getSpriteTop(spriteName) + incrementTop).toString() + 'px'; } function getSprite(spriteName) { return get('sprite'+spriteName); } function getSpriteLeft(spriteName) { return removeUnits(getSprite(spriteName).style.left, 2); } function getSpriteTop(spriteName) { return removeUnits(getSprite(spriteName).style.top, 2); } function getSpriteWidth(spriteName) { return getSprite(spriteName).offsetWidth; } function getSpriteHeight(spriteName) { return getSprite(spriteName).offsetHeight; } function initialize() { get('canvas').onkeydown = function() { if(currentSprite&&getSprite(currentSprite).title.split('_')[0]=='true') { respondToKeyPress(currentSprite, event.keyCode); if(currentSprite=='person') changeMessage('spriteInside', checkIfSpriteInsideAnother('person', 'house')); } }; } function respondToKeyPress(spriteName, key) { switch(key) { case 37: // left arrow key moveSprite(spriteName, -10, 0); break; case 38: // up arrow key moveSprite(spriteName, 0, -10); break; case 39: // right arrow key moveSprite(spriteName, 10, 0); break; case 40: // down arrow key moveSprite(spriteName, 0, 10); break; } } function checkIfSpriteInsideAnother(spriteName, insideSprite) {if(getSpriteLeft(spriteName)<=(getSpriteLeft(insideSprite)+getSpriteWidth(insideSprite))&&getSpriteLeft(spriteName)>=getSpriteLeft(insideSprite)&&getSpriteTop(spriteName)<=(getSpriteTop(insideSprite)+getSpriteHeight(insideSprite))&&getSpriteTop(spriteName)>=getSpriteTop(insideSprite)) return spriteName + ' is inside ' + insideSprite; else return ''; } function changeMessage(messageName, newMessage) { get(messageName).innerHTML = newMessage; } function animateSprite(spriteName, images, image_id, interval, repeat) { if(getSprite(spriteName).title.split('_').length==2) clearTimeout(getSprite(spriteName).title.split('_')[1]); if(image_id==images.length) image_id = 0; getSprite(spriteName).src = 'sprites/'+images[image_id]+'.png'; image_id++; if(repeat==true||image_id!=images.length) getSprite(spriteName).title = getSprite(spriteName).title.split('_')[0] + '_' + setTimeout('animateSprite(\''+spriteName+'\', [\''+images.join('\', \'')+'\'], '+image_id+', '+interval+', '+repeat+');', interval); }
You need to login to post a comment.
