2015-12-26 1 views
0

Désolé, le code est trop long. Lorsque l'image du héros se trouve au maximum à 32 pixels de l'image de la mine ou du monstre, elle doit être ramenée au point d'apparition, qui est de 5 pixels sur l'axe des x et de 5 sur l'axe des y. L'image du héros est transportée correctement, l'alerte ne fonctionne tout simplement pas. Merci d'avance pour toute idée ou suggestion.objet se déplaçant seul dans la toile

<html> 
<style> 
</style> 
<body background="background.jpg"> 
<canvas id="canvas" width="1300" height="630"></canvas> 
<script> 
var canvas=document.getElementById("canvas"); 
var ctx = canvas.getContext("2d"); 
var H=canvas.height; 
var W=canvas.width; 
var x=10; 
var y=15; 
var rightPressed=false; 
var leftPressed=false; 
var upPressed=false; 
var downPressed=false; 
var heroX=20; 
var monsterX=200; 
var monsterY=200; 
var heroY=20; 
var dx= .68; 
var dy= .76; 
var score=0; 
var monstersCaught=0; 
var ballPX = 32 + (Math.random() * (canvas.width - 64)); 
var ballPY = 32 + (Math.random() * (canvas.height - 64)); 
var h=178; 
var i=333; 
var mineX=778; 
var mineY=178; 

Window.onload=dank(); 
function dank(){ 
alert("How to play: move your hero using the arrow keys, and collect colored  balls for powerups and points!Get the highest score you can without touching a  monster, which makes you start over!Collect the colored balls for more and   better special powerups."); 
} 
document.addEventListener("keydown", keyDownHandler, false); 
document.addEventListener("keyup", keyUpHandler, false); 

function draw(){ 
ctx.clearRect(0, 0, canvas.width, canvas.height); 
var heroImage=new Image(); 
heroImage.onload=function(){ 
ctx.drawImage(heroImage , heroX, heroY); 
} 
heroImage.src="hero.jpg"; 
dope(); 
checkMonster(); 
drawMines(); 
checkDeath(); 
} 
function keyDownHandler(e) { 
if(e.keyCode == 39) { 
rightPressed = true; 
} 
else if(e.keyCode == 37) { 
leftPressed = true; 
} 
else if(e.keyCode == 40) { 
downPressed = true; 
} 
else if(e.keyCode == 38) { 
upPressed = true; 
} 
} 
function keyUpHandler(e) { 
if(e.keyCode == 39) { 
rightPressed = false; 
} 
else if(e.keyCode == 37) { 
leftPressed = false; 
} 
else if(e.keyCode == 40) { 
downPressed = false; 
} 
else if(e.keyCode == 38) { 
upPressed = false; 
} 
} 
function dope(){ 
if(rightPressed) { 
heroX += 7; 
} 
else if(leftPressed) { 
heroX -= 7; 
} 
else if(upPressed){ 
heroY -= 7; 
} 
else if(downPressed){ 
heroY +=7; 
} 
} 
function checkMonster(){ 
var monsterImage=new Image(); 
monsterImage.onload=function(){ 
ctx.drawImage(monsterImage, monsterX, monsterY) 
} 
monsterImage.src="monster.jpg"; 
monsterX += dx; 
monsterY += dy; 
if(monsterX>canvas.width || monsterX<0){ 
monsterX = -dx; 
} 
else if(monsterY>canvas.height || monsterY<0){ 
monsterY = -dy; 
} 
if (
heroX <= (monsterX + 32) 
&& monsterX <= (heroX + 32) 
&& heroY <= (monsterY + 32) 
&& monsterY <= (heroY + 32) 
) { 

l'alerte qui ne fonctionne pas

alert("DEATH"); 
heroY=5; 
heroX=5; 
monsterX=100; 
monsterY=100; 
upPressed=false; 
downPressed=false; 
leftPressed=false; 
rightPressed=false; 


} 
} 
function drawMines(){ 
var rsz_mineImage=new Image(); 
rsz_mineImage.onload=function(){ 
ctx.drawImage(rsz_mineImage , mineX, mineY); 
} 
rsz_mineImage.src="rsz_mineimg.jpg"; 
if (
heroX <= (mineX + 32) 
&& mineX <= (heroX + 32) 
&& heroY <= (mineY + 32) 
&& mineY <= (heroY + 32) 
){ 
rightPressed=false; 
leftPressed=false; 
upPressed=false; 
downPressed=false; 
heroX=5; 
heroY=5; 

l'une des alertes ne fonctionne pas

alert("DEATH"); 

} 
} 





setInterval(draw, 10); 
</script> 
</body> 
</html> 
+0

Pouvez-vous poster le code _without_ couper avec vos explications? Et peut-être essayer de tout indenter un peu pour voir plus clair? Essayez de coller le JS là-bas: http://jsbeautifier.org/ –

Répondre

0

Il travaille pour moi. Vous aviez des images chargées dans la boucle d'animation qui créaient un effet de scintillement. Il est préférable de charger vos ressources sur une toile et lorsque les images les chargent, placez-les sur leur canevas. De cette façon, vous n'avez pas à vérifier si l'image est chargée et peut avoir une couleur d'arrière-plan en tant que stand-in. L'exécution de l'animation dans une boucle d'intervalle n'est pas aussi efficace que l'utilisation de requestAnimationFrame. Utilisez également preventDefault sur l'entrée clé pour empêcher le défilement.

var canvas = document.getElementById("canvas"); 
 
var ctx = canvas.getContext("2d"); 
 
var H = canvas.height; 
 
var W = canvas.width; 
 
var x = 10; 
 
var y = 15; 
 
var rightPressed = false; 
 
var leftPressed = false; 
 
var upPressed = false; 
 
var downPressed = false; 
 
var heroX = 20; 
 
var monsterX = 200; 
 
var monsterY = 200; 
 
var heroY = 20; 
 
var dx = .68; 
 
var dy = .76; 
 
var score = 0; 
 
var monstersCaught = 0; 
 
var ballPX = 32 + (Math.random() * (canvas.width - 64)); 
 
var ballPY = 32 + (Math.random() * (canvas.height - 64)); 
 
var h = 178; 
 
var i = 333; 
 
var mineX = 778; 
 
var mineY = 178; 
 

 
Window.onload = dank(); 
 

 
function dank() { 
 
    alert("How to play: move your hero using the arrow keys, and collect colored  balls for powerups and points!Get the highest score you can without touching a  monster, which makes you start over!Collect the colored balls for more and   better special powerups."); 
 
} 
 
document.addEventListener("keydown", keyDownHandler, false); 
 
document.addEventListener("keyup", keyUpHandler, false); 
 

 
function loadImage(w,h,color,url) { 
 
    var can = document.createElement('canvas'); 
 
    can.width = w; 
 
    can.height = h; 
 
    var ctx = can.getContext('2d'); 
 
    ctx.fillStyle=color; 
 
    ctx.fillRect(0,0,w,h); 
 
    var img = document.createElement('image'); 
 
    img.onLoad = function() { 
 
    ctx.clearRect(0,0,w,h); 
 
    ctx.drawImage(img, 0, 0); 
 
    }; 
 
    img.src=url; 
 
    return can; 
 
} 
 

 
// load assets 
 
var heroImage = loadImage(32,32,'#FF9900',"hero.jpg"); 
 
var monsterImage = loadImage(32,32,'purple',"monster.jpg"); 
 
var rsz_mineImage = loadImage(32,32,'#FF3300',"rsz_mineimg.jpg"); 
 

 
function draw() { 
 
    ctx.clearRect(0, 0, canvas.width, canvas.height); 
 
    ctx.drawImage(heroImage, heroX, heroY); 
 
    dope(); 
 
    checkMonster(); 
 
    drawMines(); 
 
    //checkDeath(); 
 
    requestAnimationFrame(draw); 
 
} 
 

 
function keyDownHandler(e) { 
 
    if (e.keyCode == 39) { 
 
    rightPressed = true; 
 
    } else if (e.keyCode == 37) { 
 
    leftPressed = true; 
 
    } else if (e.keyCode == 40) { 
 
    downPressed = true; 
 
    } else if (e.keyCode == 38) { 
 
    upPressed = true; 
 
    } 
 
    e.preventDefault(); 
 
} 
 

 
function keyUpHandler(e) { 
 
    if (e.keyCode == 39) { 
 
    rightPressed = false; 
 
    } else if (e.keyCode == 37) { 
 
    leftPressed = false; 
 
    } else if (e.keyCode == 40) { 
 
    downPressed = false; 
 
    } else if (e.keyCode == 38) { 
 
    upPressed = false; 
 
    } 
 
    e.preventDefault(); 
 
} 
 

 
function dope() { 
 
    if (rightPressed) { 
 
    heroX += 7; 
 
    } else if (leftPressed) { 
 
    heroX -= 7; 
 
    } else if (upPressed) { 
 
    heroY -= 7; 
 
    } else if (downPressed) { 
 
    heroY += 7; 
 
    } 
 
} 
 

 
function checkMonster() { 
 
    
 
    ctx.drawImage(monsterImage, monsterX, monsterY) 
 
    monsterX += dx; 
 
    monsterY += dy; 
 
    if (monsterX > canvas.width || monsterX < 0) { 
 
    monsterX = -dx; 
 
    } else if (monsterY > canvas.height || monsterY < 0) { 
 
    monsterY = -dy; 
 
    } 
 
    if (
 
    heroX <= (monsterX + 32) && monsterX <= (heroX + 32) && heroY <= (monsterY + 32) && monsterY <= (heroY + 32) 
 
) { 
 
    alert("DEATH"); 
 
    heroY = 5; 
 
    heroX = 5; 
 
    monsterX = 100; 
 
    monsterY = 100; 
 
    upPressed = false; 
 
    downPressed = false; 
 
    leftPressed = false; 
 
    rightPressed = false; 
 

 

 
    } 
 
} 
 

 
function drawMines() { 
 

 
    ctx.drawImage(rsz_mineImage, mineX, mineY); 
 
    
 
    if (
 
    heroX <= (mineX + 32) && mineX <= (heroX + 32) && heroY <= (mineY + 32) && mineY <= (heroY + 32) 
 
) { 
 
    rightPressed = false; 
 
    leftPressed = false; 
 
    upPressed = false; 
 
    downPressed = false; 
 
    heroX = 5; 
 
    heroY = 5; 
 
    alert("DEATH"); 
 

 
    } 
 
} 
 

 
draw();
#canvas { 
 
    width:100%; 
 
    background-color:#eff0de; 
 
} 
 
body { 
 
    background-color:#AADDFF; 
 
}
<canvas id="canvas" width="1300" height="630"></canvas>