1

nodejs と javascript を使用してクライアントを作成します。コードをデバッグすると、座標の X1 変数が定義されていないとコンソールに表示されますが、以前に初期化しました。誰が説明してくれますか?

「localPlayer = new Player(X1, Y1);」にある変数 var canvas = document.getElementById("絵画");

  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();



}
4

1 に答える 1

3

X1 変数は initcoordinates 関数でローカルにスコープされているため、init 関数からアクセスすることはできません。X1 変数がローカルであるだけでなく、initcoordinates 関数で設定しているすべての座標は、この関数内でのみ表示されます。次のように、これらの変数を外部で、他の変数を囲む即時関数で宣言することをお勧めします。

(function(){
  var X1;

  function initcoordinates(){
    X1 = ...
  }

  function init(){
    //do something with the X1 variable here...
  }

})();

このように、すべての関数は、即時関数のスコープで宣言された変数へのアクセスを共有します。

于 2013-05-24T03:26:13.297 に答える