我来自C#/ Java背景,我正在尝试学习如何在HTML5中制作游戏。我碰到了一个令我难以置信的问题,虽然通常我会问朋友,但他是MIA。创建一个帐户来询问社区我感觉很糟糕,但我一直在寻找答案无济于事。
问题是这个...... 我想创建一个可以容纳塔楼实例的游戏对象。另外,我想创建一个塔的数组列表作为一种后端存储库。基本上,我希望这些是外部js文件,我可以在我的主游戏中引用。我不确定这是否可能在js或这将如何工作。
我试图做的是...... 创建一个外部JS文件并声明一个塔对象。这是我迷路的地方。我想创建另一个对象,它只是第一个类型的列表,一个是TowerList。在这个外部JS文件中,我打算用一堆塔属性填充列表。然后,在带有canvas元素的主文件中,我将遍历列表并绘制图形。我不知道该怎么做。
function Tower (type, texture, cost, damage, speed, range, health, Xpos, Ypos)
{
this.type = type;
this.texture = new Image();
this.texture.src = texture;
this.cost = 0;
this.damage = 0;
this.speed = 0;
this.range = 0;
this.health = 0;
this.Xposition = 0;
this.Yposition = 0;
this.target = false;
}
var TowerList = [Tower("Basic", "tower.png", 0, 0, 0, 0, 0, 0, 0), Tower(), Tower()];
我怀疑我是否正常工作,但我希望能够在主项目中创建塔列表的实例,像数组一样随机访问它,并按我认为合适的方式打印其内容。在JS中实现这一目标的最佳方式是什么?我希望以后能够在主代码中分配列表中的塔
var tL = new TowerList();
var tower = new Tower();
tower = tL[0];
我今天刚开始这样做,所以我意识到有很多学习要做。我想我需要重新定义函数作为一个var我可以实例化它(我确定我之前读过)。如果有人可以帮助我或指出我的方向,我可以从中学到一些例子,我将非常感激。
答案 0 :(得分:1)
TowerList
不一定是新类型的对象,只需要Array
即可:
var towerList = [];
towerList.push(new Tower("Basic", "tower.png", 0, 0, 0, 0, 0, 0, 0));
// ^^^
// use 'new' to instantiate a new Tower
towerList.push(...);
迭代TowerList
:
var tower;
for (var i = 0, n = towerList.length; i < n; ++i) {
tower = towerList[i];
// do stuff with tower
}
您也可以TowerList
继承Array
:
function TowerList()
{
}
TowerList.prototype = [];
TowerList.prototype.yourFunction = function() {
}
var towerList = new TowerList();
towerList.push(new Tower(...));
towerList.yourFunction();
答案 1 :(得分:0)
//your towers should be called using new here, assuming you actually
//want a list of towers
var TowerList = [Tower("Basic", "tower.png", 0, 0, 0, 0, 0, 0, 0), Tower(), Tower()];
//TowerList needs to be a function to be called with new. This will error out.
var tL = new TowerList();
//This should work correctly
var tower = new Tower();
//this would overwrite the new Tower() with tl[0]
tower = tL[0];
如果你想创建TowerList对象,你可能想要这样的东西
function TowerList(){
this.list = [];
}
TowerList.prototype.addTower(tower){
list.push(tower);
}
TowerList.prototype.getList(){
return this.list;
}
然后你可以这样做
var tL = new TowerList();
tL.addTower(new Tower("Basic", "tower.png", 0, 0, 0, 0, 0, 0, 0));
tL.addTower(new Tower());
var tower = tL[0];
答案 2 :(得分:0)
我可能会让塔返回一个对象然后创建它的实例。 (避免“这个”)
考虑采用模块化方法:这有助于我:http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html
粗略的想法:
function Tower(type, texture, cost, damage, speed, range, health, Xpos, Ypos) {
var obj = {};
obj.type = type;
obj.texture = new Image();
obj.texture.src = texture;
obj.cost = cost;
obj.damage = 0;
obj.speed = 0;
obj.range = 0;
obj.health = 0;
obj.Xposition = 0;
obj.Yposition = 0;
obj.target = false;
return obj;
}
var TowerList = [Tower("Basic", "r", 5, 0, 0, 0, 0, 0, 0), Tower(), Tower()];
var mytower = TowerList[1];