我正在建造一個簡單的Javascript重擊鼴鼠遊戲。我相信這個問題是在讀取鼠標的「座標」時,圖片的X和Y值發生變化。重擊遊戲瑕疵
玩遊戲時,您點擊圖片,當您成功點擊時應該出現的文字不會出現。這不會允許我將圖片更改爲「點擊」圖片,讓玩家知道他們擊中了該物體。
這是代碼:
$(document).ready(function() {
document.body.onmousedown = function() {
return false;
} //so page is unselectable
//Canvas stuff
var canvas = $("#canvas")[0];
var ctx = canvas.getContext("2d");
var w = $("#canvas").width();
var h = $("#canvas").height();
var mx, my;
var player;
var mC;
var mR;
var smackSound = new Audio("audio/boing.wav");
var smackSound2 = new Audio("audio/boing2.wav");
var smackSound3 = new Audio("audio/boing3.wav");
var mel = new Image();
var melHit = new Image();
var melX;
var melY;
var melXref;
var melYref;
/////////////////////////////////
////////////////////////////////
//////// GAME INIT
/////// Runs this code right away, as soon as the page loads.
////// Use this code to get everything in order before the game starts
//////////////////////////////
/////////////////////////////
function init() {
//////////
///STATE VARIABLES
mel.src = "images/mel.jpg";
melHit.src = "images/melCrazy.jpg";
//////////////////////
///GAME ENGINE START
// This starts the game/program
// "paint is the piece of code that runs over and over again.
// "60" sets how fast things should go
if (typeof game_loop != "undefined") clearInterval(game_loop);
game_loop = setInterval(paint, 1000);
}
init();
function generate() {
var random;
random = Math.floor(Math.random() * 4);
while (random == 3) {
random = Math.floor(Math.random() * 4);
}
return random;
}
function posDisplay() {
ctx.fillStyle = "black"
ctx.fillText("Mouse Column: " + mC, 10, 10);
ctx.fillText("Mouse Row: " + mR, 10, 20);
}
///////////////////////////////////////////////////////
//////////////////////////////////////////////////////
//////// Main Game Engine
////////////////////////////////////////////////////
///////////////////////////////////////////////////
function paint() {
ctx.clearRect(0, 0, w, h);
melX = generate() * w/3;
melY = generate() * h/3;
//melXref = generate()/w/3;
//melYref = generate()/h/3;
//ctx.fillStyle = 'white';
posDisplay()
ctx.drawImage(mel, melX, melY, 200, 200);
if (melXref == mR && melYref == mC && clicker = true) {
ctx.fillStyle = "black";
ctx.fillText("It works!!!!!", 200, 200);
}
if (melX < w/3 && clicker = true) { // First Column (Mel)
if (melY < h/3) {
melXref = 1
melYref = 1
// clicker = true;
} else if (melY > h/3 && melY < h/1.5) {
melXref = 1
melYref = 2
// clicker = true;
} else if (melY > h/1.5) {
melXref = 1
melYref = 3
// clicker = true;
}
} else if (melX > w/3 && melX < w/1.5 && clicker = true) { // Second Column (Mel)
if (melY < h/3) {
melXref = 2
melYref = 1
// clicker = true;
} else if (melY > h/3 && melY < h/1.5) {
melXref = 2
melYref = 2
// clicker = true;
} else if (melY > h/1.5) {
melXref = 2
melYref = 3
// clicker = true;
}
} else if (melX > w/1.5 && clicker = true) { // Third Column (Mel)
if (melY < h/3) {
melXref = 3
melYref = 1
// clicker = true;
} else if (melY > h/3 && melY < h/1.5) {
melXref = 3
melYref = 2
// clicker = true;
} else if (melY > h/1.5) {
melXref = 3
melYref = 3
// clicker = true;
}
if (melXref == mR && melYref == mC) {
ctx.fillStyle = "black";
ctx.fillText("IT WORKS", 200, 200);
}
ctx.drawImage(mel, melX, melY, 200, 200);
if (melX == mx && melY == my) {
ctx.fillStyle = "black";
ctx.fillText("YESSSSSSSSS", 250, 250);
//ctx.drawImage(melHit,(generate()*200),(generate()*200),200,200);
}
} ////////////////////////////////////////////////////////////////////////////////END PAINT/ GAME ENGINE
}
////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///// MOUSE LISTENER
//////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/////////////////
// Mouse Click
///////////////
canvas.addEventListener('click', function(evt) {
if (mx < w && my < h) {
clicker = true;
} else {
clicker = false;
}
if (clicker = true && mx < w && my < h) { // Randomizes the sound && only allows audio to be played if it is within the canvas
if (generate() == 1) {
smackSound.play();
} else if (generate() == 2) {
smackSound2.play();
} else if (generate() == 3) {
smackSound3.play();
}
}
}, false);
canvas.addEventListener('mouseout', function() {
pause = true;
}, false);
canvas.addEventListener('mouseover', function() {
pause = false;
}, false);
canvas.addEventListener('mousemove', function(evt) {
var mousePos = getMousePos(canvas, evt);
mx = mousePos.x;
my = mousePos.y;
if (mx < w/3) { // First Column
if (my < h/3) {
mC = 1
mR = 1
// clicker = true;
} else if (my > h/3 && my < h/1.5) {
mC = 1
mR = 2
//clicker = true;
} else if (my > h/1.5) {
mC = 1
mR = 3
// clicker = true;
}
} else if (mx > w/3 && mx < w/1.5) { // Second Column
if (my < h/3) {
mC = 2
mR = 1
// clicker = true;
} else if (my > h/3 && my < h/1.5) {
mC = 2
mR = 2
// clicker = true;
} else if (my > h/1.5) {
mC = 2
mR = 3
// clicker = true;
}
} else if (mx > w/1.5) { // Third Column
if (my < h/3) {
mC = 3
mR = 1
// clicker = true;
} else if (my > h/3 && my < h/1.5) {
mC = 3
mR = 2
// clicker = true;
} else if (my > h/1.5) {
mC = 3
mR = 3
// clicker = true;
}
}
}, false);
function getMousePos(canvas, evt) {
var rect = canvas.getBoundingClientRect();
return {
x: evt.clientX - rect.left,
y: evt.clientY - rect.top
};
}
///////////////////////////////////
//////////////////////////////////
//////// KEY BOARD INPUT
////////////////////////////////
window.addEventListener('keydown', function(evt) {
var key = evt.keyCode;
//p 80
//r 82
//1 49
//2 50
//3 51
}, false);
})
我假設你在談論你的畫布'點擊「聽衆?我沒有看到任何會導致文本「出現」的代碼。 –
在繪製函數中,第一個if語句將打印「它的工作原理!!!」到畫布時,鼠標位置的X和Y值與圖像相同(並且clicker爲true)。 – user3352167