Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在基于javascript的游戏中初始化全局变量_Javascript_Variables_Global Variables_Phaser Framework - Fatal编程技术网

无法在基于javascript的游戏中初始化全局变量

无法在基于javascript的游戏中初始化全局变量,javascript,variables,global-variables,phaser-framework,Javascript,Variables,Global Variables,Phaser Framework,我有一个基于flappy bird的克隆游戏,我需要为它制作一个高分功能。高分会在一瞬间消失,因为游戏会重新加载,我不知道如何将高分设置为全局变量。如果你想查看它,这里有一个链接。(警告:降低耳机音量) //初始化移相器,并创建一个400x490px游戏 var game=new Phaser.game(400490,Phaser.AUTO,'gameDiv'); //创建包含游戏的新“主”状态 var主状态={ //首先调用函数以加载所有资产 预加载:函数(){ //更改游戏的背景色 //g

我有一个基于flappy bird的克隆游戏,我需要为它制作一个高分功能。高分会在一瞬间消失,因为游戏会重新加载,我不知道如何将高分设置为全局变量。如果你想查看它,这里有一个链接。(警告:降低耳机音量)

//初始化移相器,并创建一个400x490px游戏
var game=new Phaser.game(400490,Phaser.AUTO,'gameDiv');
//创建包含游戏的新“主”状态
var主状态={
//首先调用函数以加载所有资产
预加载:函数(){
//更改游戏的背景色
//game.stage.backgroundColor='#71c5cf';
//背景图像
game.load.image('woods','woods.jpg');
//装上鸟精灵
game.load.image('bird','whiteWolf2.png');
//加载管道精灵
game.load.image('pipe','pipe.png');
},
//在“预加载”后调用函数来设置游戏
创建:函数(){
//设置物理系统
游戏。物理。启动系统(相位器。物理。拱廊);
game.add.tileSprite(0,040490,'woods');
//在屏幕上显示鸟
this.bird=this.game.add.sprite(100245,'bird');
//给鸟加上重力使它坠落
游戏。物理。街机。启用(this.bird);
this.bird.body.gravity.y=1000;
//按下空格键时调用“跳跃”功能
var spaceKey=this.game.input.keyboard.addKey(Phaser.keyboard.SPACEBAR);
spaceKey.onDown.add(this.jump,this);
//创建一组20个管道
this.pipes=game.add.group();
this.pipes.enableBody=true;
this.pipes.createMultiple(20,'pipe');
//每1.5秒调用“addRowOfPipes”的计时器
this.timer=this.game.time.events.loop(1500,this.addrowof管道,this);
//在屏幕左上角添加分数标签
这个分数=0;
this.hiScore=0;
this.scoreLabel=this.game.add.text(20,20,“分数:”,{font:“30px Arial”,fill:“#ffffffff”});
this.labelScore=this.game.add.text(120,20,0,{font:“30px Arial”,fill:#ffffff});
this.hiScoreLabel=this.game.add.text(200,20,“Hi-Score:”,{font:“30px Arial”,fill:#ffffff“});
labelHiScore=this.game.add.text(340,20,0,{font:“30px Arial”,fill:#ffffff});
/*
暂停菜单的代码
*/
},
//此函数每秒调用60次
更新:函数(){
//如果鸟不在世界上(过高或过低),调用“重启游戏”功能
if(this.bird.inWorld==false)
这个.restartGame();
//如果鸟与任何管道重叠,请调用“restartGame”
game.physics.arcade.overlap(this.bird,this.pipes,this.restartGame,null,this);
},
//使鸟跳跃
跳转:函数(){
//向鸟添加垂直速度
this.bird.body.velocity.y=-350;
},
//重新开始游戏
restartGame:函数(){
//启动“主”状态,重新启动游戏
if(this.score>this.hiScore){
labelHiScore.text=this.score;
}                
game.state.start('main');
},
//在屏幕上添加管道
addOnePipe:函数(x,y){
//拿到我们小组的第一根死管子
var pipe=this.pipes.getFirstDead();
//设置管道的新位置
管道复位(x,y);
//向管道添加速度,使其向左移动
管道体速度x=-200;
//当管道不再可见时,将其杀死
pipe.checkWorldBounds=true;
pipe.outOfBoundsKill=true;
},
加一排6根管子,中间有个洞。
addRowOfPipes:function(){
var-hole=Math.floor(Math.random()*5)+1;
对于(变量i=0;i<8;i++)
如果(i!=孔和&i!=孔+1)
这个.addOnePipe(400,i*60+10);
这是一个分数+=1;
this.labelScore.text=this.score;
},
};
//添加并启动“主”状态以启动游戏
game.state.add('main',mainState);
//document.getElementById(“#开始按钮”).onclick(function(){
//警报(“Hi”);
labelHiScore=0;
game.state.start('main');
// }); 

尝试以下更改:

在restartGame方法中:

restartGame: function() {
    if(this.score > localStorage.getItem("hiScore") ){
            localStorage.setItem("hiScore", this.score); 
            this.labelHiScore.text = localStorage.getItem("hiScore");  
    }        
    game.state.start('main');
},
在“labelHiScore”可变声明中:

this.labelHiScore = this.game.add.text(340, 20, ("hiScore" in localStorage ? localStorage.getItem("hiScore") : "0"), { font: "30px Arial", fill: "#ffffff" });  
我希望你明白了,简言之,问题出在哪里

在restartGame方法中,您试图将分数分配给窗口范围的变量,而不是函数范围。 添加“this.”将导致在当前对象中查找变量


还将分数添加到本地存储以保留高分,并且在重新加载游戏时从本地存储中选取值。

您需要将此值存储在cookie、localStorage或其他新的HTML5持久存储方法中。
game.state.start('main')怎么做?游戏从头开始。我从一些开源的地方获取了这段代码,我正在根据需要修改它。我是phaser.io游戏引擎的新手,并不完全了解它@jfriend00@jeff嗯。。有没有一种方法可以在同一个文件中的某个地方声明变量,而不必使用cookie或将变量存储在本地存储器中?有没有
game.state.start('main')重新加载页面?我想知道它实际上做了什么,不仅仅是在概念上,还有代码实际上做了什么。如果它重新加载页面,那么所有Javascript变量都会重置,因此如果它们只存储在Javascript变量中,那么您的高分就会消失。如果你想让它们比单页加载时间更长,那么你必须将它们放在本地存储、cookie或服务器上。非常感谢!这正是我想要的。
this.labelHiScore = this.game.add.text(340, 20, ("hiScore" in localStorage ? localStorage.getItem("hiScore") : "0"), { font: "30px Arial", fill: "#ffffff" });