我正在尝试找到一种干净、易读的方法,在Phaser类中跨函数管理变量,但出于各种原因,我对已找到的解决方案不满意。
我所知道的选择有:
全局变量
我不太喜欢这种实现方式,因为变量可能会被其他文件访问。
我所知道的选择有:
全局变量
我不太喜欢这种实现方式,因为变量可能会被其他文件访问。
var heroes = [];
var play = new Phaser.Class({
Extends: Phaser.Scene,
initialize: function(){
Phaser.Scene.call(this, {key: 'play'});
},
create: function () {
for(var i = 0; i < 5; i++){
heroes.add(new Hero())
}
},
update: function(){
if(!heroes.length){
heroes.add(new Hero())
}
heroes.forEach(function(hero){
if(hero.hp <= 0){
hero.destroy();
}
});
}
});
DataManager类(实现为注册表)
我更喜欢这种方式,因为它更加可控。但是对我而言,DataManager感觉像是用于配置,而不是作为在类方法之间处理/共享数据的手段;另外,访问和更新变量需要使用特定的服务来获取和设置其值,感觉非常笨重。
var play = new Phaser.Class({
Extends: Phaser.Scene,
initialize: function(){
this.registry.set('heroes', []);
Phaser.Scene.call(this, {key: 'play'});
},
create: function () {
var heroes = this.registry.get('heroes');
for(var i = 0; i < 5; i++){
heroes.add(new Hero())
}
this.registry.set('heroes', heroes);
},
update: function(){
var heroes = this.registry.get('heroes');
if(!heroes.length){
heroes.add(new Hero())
}
heroes.forEach(function(hero){
if(hero.hp <= 0){
hero.destroy();
}
});
this.registry.set('heroes', heroes);
}
});
使用'this'
对我来说这是目前最简洁的方法,因为'this'指的是类对象,很容易更新和检索值,但在这种情况下,'this'与一些内部Phaser特定变量共享,我想将我的变量与其分开。除了使用'this'进行命名空间外,还有其他替代方案吗?
var play = new Phaser.Class({
Extends: Phaser.Scene,
initialize: function(){
this.heroes = [];
Phaser.Scene.call(this, {key: 'play'});
},
create: function () {
for(var i = 0; i < 5; i++){
this.heroes.add(new Hero())
}
},
update: function(){
if(!heroes.length){
this.heroes.add(new Hero())
}
this.heroes.forEach(function(hero){
if(hero.hp <= 0){
hero.destroy();
}
});
}
});