2016-06-16 13 views
2

私のコードの再生機能を追加するのに苦労しているし、何が間違っているのかわからない。どんな助け?プレイヤーがゲームで死んだ後は私のgameAreaを更新しないようです。javascriptのゲームにもう一度再生機能を追加する方法

また、ディスプレイにテキストの代わりにイメージを使用した後、私のスコアは表示されなくなりました。私のコードで画像を表示しながら、どのように私は

<!DOCTYPE html> 
<html> 
<head> 


<style> 
canvas { 
    border:1px solid #d3d3d3; 
    background-image: url("http://i.stack.imgur.com/WHu9Z.png"); 
} 
</style> 
</head> 
<body> 
<script> 

var myGamePiece; 
var myObstacles = []; 
var myScore; 

function startGame() { 
    myGamePiece = new component(40, 40, "http://orig15.deviantart.net/a436/f/2012/101/1/c/mario_sprite_by_flamingdragon5000-d4vt57a.png", 10, 120, "image"); 
    myGamePiece.gravity = 0.05; 
    myScore = new component("30px", "Consolas", "black", 280, 40, "text"); 
    myGameArea.start(); 
} 

var myGameArea = { 
    canvas : document.createElement("canvas"), 
    start : function() { 
     this.canvas.width = 480; 
     this.canvas.height = 350; 
     this.context = this.canvas.getContext("2d"); 
     document.body.insertBefore(this.canvas, document.body.childNodes[0]); 
     this.frameNo = 0; 
     this.interval = setInterval(updateGameArea, 20); 
     }, 
    clear : function() { 
     this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); 
    } 
} 

function component(width, height, color, x, y, type) { 
    this.type = type; 
    if (type == "image") { 
     this.image = new Image(); 
     this.image.src = color; 
    } 
    this.score = 0; 
    this.width = width; 
    this.height = height; 
    this.speedX = 0; 
    this.speedY = 0; 
    this.x = x; 
    this.y = y; 
    this.gravity = 0; 
    this.gravitySpeed = 0; 
    this.update = function() { 
     ctx = myGameArea.context; 
     if (this.type == "image") { 
      ctx.drawImage(this.image, 
       this.x, 
       this.y, 
       this.width, this.height); 
     } else { 
      ctx.fillStyle = color; 
      ctx.fillRect(this.x, this.y, this.width, this.height); 
     } 
    } 
    this.newPos = function() { 
     this.gravitySpeed += this.gravity; 
     this.x += this.speedX; 
     this.y += this.speedY + this.gravitySpeed; 
     this.hitBottom(); 
    } 
    this.hitBottom = function() { 
     var rockbottom = myGameArea.canvas.height - this.height -23; 
     if (this.y > rockbottom) { 
      this.y = rockbottom; 
      this.gravitySpeed = 0; 
     } 
    } 
    this.crashWith = function(otherobj) { 
     var myleft = this.x; 
     var myright = this.x + (this.width); 
     var mytop = this.y; 
     var mybottom = this.y + (this.height); 
     var otherleft = otherobj.x; 
     var otherright = otherobj.x + (otherobj.width); 
     var othertop = otherobj.y; 
     var otherbottom = otherobj.y + (otherobj.height); 
     var crash = true; 
     if ((mybottom < othertop) || (mytop > otherbottom) || (myright < otherleft) || (myleft > otherright)) { 
      crash = false; 
     } 
     return crash; 
    } 
} 

function updateGameArea() { 
    var x, height, gap, minHeight, maxHeight, minGap, maxGap; 
    for (i = 0; i < myObstacles.length; i += 1) { 
     if (myGamePiece.crashWith(myObstacles[i])) { 
      return; 
     } 
    } 
    myGameArea.clear(); 
    myGameArea.frameNo += 1; 
    if (myGameArea.frameNo == 1 || everyinterval(150)) { 
     x = myGameArea.canvas.width; 
     minHeight = 20; 
     maxHeight = 200; 
     height = Math.floor(Math.random()*(maxHeight-minHeight+1)+minHeight); 
     minGap = 90; 
     maxGap = 200; 
     gap = Math.floor(Math.random()*(maxGap-minGap+1)+minGap); 
     myObstacles.push(new component(50, height, "green", x, 0)); 
     myObstacles.push(new component(50, x - height - gap, "green", x, height + gap)); 
    } 
    for (i = 0; i < myObstacles.length; i += 1) { 
     myObstacles[i].x += -1; 
     myObstacles[i].update(); 
    } 
    myScore.text="SCORE: " + myGameArea.frameNo; 
    myScore.update(); 
    myGamePiece.newPos(); 
    myGamePiece.update(); 
} 

function everyinterval(n) { 
    if ((myGameArea.frameNo/n) % 1 == 0) {return true;} 
    return false; 
} 

function accelerate(n) { 
    myGamePiece.gravity = n; 
} 

function clickPlayagain() { 
    myGameArea.stop(); 

    // myGameArea2.stop(); 
    startGame(); 


} 
startGame(); 
</script> 
<br> 
<button onmousedown="accelerate(-0.15)" onmouseup="accelerate(0.08)">ACCELERATE</button> 
<button id="playagain" onclick="clickPlayagain()">Play again</button> 

<p>Use the ACCELERATE button to stay in the air</p> 
</body> 
</html> 

答えて

2

はそれが役に立てば幸いスコアを追加することができます。

<!DOCTYPE html> 
<html> 
<head> 


<style> 
canvas { 
    border:1px solid #d3d3d3; 
    background-image: url("http://i.stack.imgur.com/WHu9Z.png"); 
} 
</style> 
</head> 
<body> 
<script> 

var myGamePiece; 
var myObstacles = []; 
var myScore; 
var myGameArea; 

function startGame() { 
    myGamePiece = new component(40, 40, "http://orig15.deviantart.net/a436/f/2012/101/1/c/mario_sprite_by_flamingdragon5000-d4vt57a.png", 10, 120, "image"); 
    myGamePiece.gravity = 0.05; 
    myScore = new component("30px", "Consolas", "black", 280, 40, "text"); 
    if(myGameArea){ 
     document.removeChild(myGameArea.canvas); 
    } 
    myGameArea = { 
     canvas : document.createElement("canvas"), 
     start : function() { 
      this.canvas.width = 480; 
      this.canvas.height = 350; 
      this.context = this.canvas.getContext("2d"); 
      document.body.insertBefore(this.canvas, document.body.childNodes[0]); 
      this.frameNo = 0; 
      this.interval = setInterval(updateGameArea, 20); 
      }, 
     clear : function() { 
      this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); 
     } 
    } 
    myGameArea.start(); 
} 

function reset(){ 
    myGamePiece = undefined; 
    myObstacles = []; 
    myScore = ""; 
} 

function component(width, height, color, x, y, type) { 
    this.type = type; 
    if (type == "image") { 
     this.image = new Image(); 
     this.image.src = color; 
    } 
    this.score = 0; 
    this.width = width; 
    this.height = height; 
    this.speedX = 0; 
    this.speedY = 0; 
    this.x = x; 
    this.y = y; 
    this.gravity = 0; 
    this.gravitySpeed = 0; 
    this.update = function() { 
     ctx = myGameArea.context; 
     if (this.type == "image") { 
      ctx.drawImage(this.image, 
       this.x, 
       this.y, 
       this.width, this.height); 
     } else { 
      ctx.fillStyle = color; 
      ctx.fillRect(this.x, this.y, this.width, this.height); 
     } 
    } 
    this.newPos = function() { 
     this.gravitySpeed += this.gravity; 
     this.x += this.speedX; 
     this.y += this.speedY + this.gravitySpeed; 
     this.hitBottom(); 
    } 
    this.hitBottom = function() { 
     var rockbottom = myGameArea.canvas.height - this.height -23; 
     if (this.y > rockbottom) { 
      this.y = rockbottom; 
      this.gravitySpeed = 0; 
     } 
    } 
    this.crashWith = function(otherobj) { 
     var myleft = this.x; 
     var myright = this.x + (this.width); 
     var mytop = this.y; 
     var mybottom = this.y + (this.height); 
     var otherleft = otherobj.x; 
     var otherright = otherobj.x + (otherobj.width); 
     var othertop = otherobj.y; 
     var otherbottom = otherobj.y + (otherobj.height); 
     var crash = true; 
     if ((mybottom < othertop) || (mytop > otherbottom) || (myright < otherleft) || (myleft > otherright)) { 
      crash = false; 
     } 
     return crash; 
    } 
} 

function updateGameArea() { 
    var x, height, gap, minHeight, maxHeight, minGap, maxGap; 
    for (i = 0; i < myObstacles.length; i += 1) { 
     if (myGamePiece.crashWith(myObstacles[i])) { 
      return; 
     } 
    } 
    myGameArea.clear(); 
    myGameArea.frameNo += 1; 
    if (myGameArea.frameNo == 1 || everyinterval(150)) { 
     x = myGameArea.canvas.width; 
     minHeight = 20; 
     maxHeight = 200; 
     height = Math.floor(Math.random()*(maxHeight-minHeight+1)+minHeight); 
     minGap = 90; 
     maxGap = 200; 
     gap = Math.floor(Math.random()*(maxGap-minGap+1)+minGap); 
     myObstacles.push(new component(50, height, "green", x, 0)); 
     myObstacles.push(new component(50, x - height - gap, "green", x, height + gap)); 
    } 
    for (i = 0; i < myObstacles.length; i += 1) { 
     myObstacles[i].x += -1; 
     myObstacles[i].update(); 
    } 
    myScore.text="SCORE: " + myGameArea.frameNo; 
    myScore.update(); 
    myGamePiece.newPos(); 
    myGamePiece.update(); 
} 

function everyinterval(n) { 
    if ((myGameArea.frameNo/n) % 1 == 0) {return true;} 
    return false; 
} 

function accelerate(n) { 
    myGamePiece.gravity = n; 
} 

function clickPlayagain() { 
    reset(); 
    startGame(); 

} 
startGame(); 
</script> 
<br> 
<button onmousedown="accelerate(-0.15)" onmouseup="accelerate(0.08)">ACCELERATE</button> 
<button id="playagain" onclick="clickPlayagain()">Play again</button> 

<p>Use the ACCELERATE button to stay in the air</p> 
</body> 
</html> 
+0

それは動作します!!!あなたは素晴らしいです、ありがとう:) –