我用nodejs和javascript写了一个客户端。当我调试代码时,控制台说没有定义坐标的X1变量,但是我之前初始化它。谁能为我解释一下?
位于“localPlayer = new Player(X1,Y1)”的变量;“ var canvas = document.getElementById(“painting”);
var socket; //Socket connection
var localPlayer, remotePlayers; // local and remote players
var context2D = canvas.getContext("2d");
var lifecount = 3; // frogger has three life values
var score = 0; // when frogger accross a line successfully it will get 10 points
//initialized the coordinates
function initcoordinates(){
var pipe0X=0,pipe0Y=110;
var spider1X= 0,spider1Y=140;
var spider2X= 0,spider2Y=230;
var X1=300,Y1=450; // frogger's ordinary coordinate
var pipe1X=0,pipe1Y=170;
var pipe2X= 0,pipe2Y=200;
var rocketX = 0,rocketY=300;
var carX = 0, carY =330;
var wheelX= 0,wheelY=360;
var car1X= 0, car1Y=390;
var car2X= 0, car2Y=420;
};
function initimage(){
var picpipe0 = new Image();
var pic1=new Image();
var picpipe1 = new Image(); // pipe image
var picpipe2 = new Image();
var spider1 = new Image();
var spider2 = new Image();
var gresp1 = new Image();
var gresp2 = new Image();
var rocket = new Image();
var car = new Image();
var wheel = new Image();
var car1 = new Image();
var car2 = new Image();
//load image
picpipe0.src = "pipe.jpg";
pic1.src = "qingwa.jpg";
picpipe1.src = "pipe.jpg";
picpipe2.src = "pipe.jpg";
spider1.src="spider.jpg";
spider2.src="spider.jpg";
gresp1.src = "gresp.jpg";
gresp2.src = "gresp.jpg";
rocket.src = "rocket.jpg";
car.src = "car.jpg";
wheel.src = "wheel.jpg";
car1.src = "car1.jpg";
car2.src = "car2.jpg";
};
/**************************************************
** GAME INITIALISATION
**************************************************/
function init(){
initcoordinates();
initimage();
// Initialise socket connection
socket = io.connect("http://localhost", {port: 8000, transports: ["websocket"]});
// Initialise remote players array
remotePlayers = [];
// Initialise the local player
localPlayer = new Player(X1, Y1);
// Start listening for events
setEventHandlers();
}
答案 0 :(得分:3)
您的X1变量在initcoordinates函数中是本地作用域的,init函数无法访问它。不仅X1变量是局部的,而且您在initcoordinates函数中设置的所有坐标只能在此函数中可见。我建议你把这些变量声明在外面,在一个围绕其他变量的直接函数中,如下所示:
(function(){
var X1;
function initcoordinates(){
X1 = ...
}
function init(){
//do something with the X1 variable here...
}
})();
这样,所有函数都将共享对立即函数范围内声明的变量的访问。