Javascript 引用存储在另一个类的数组中的类实例
如果标题没有意义,我会道歉。我把自己搞糊涂了,但我将试着详细说明下面的问题 我有三个Javascript类: js包含类映射 B js包含类mapObject 用于MapMaker的C js逻辑 在C类中,我创建了一个map实例,它是一个带有网格布局的画布 用户可以单击地图并使用热键添加mapObject的实例 现在,我正试图显示mapObject图标,但对于如何显示,我完全感到困惑: 地图创建和地图对象创建代码C js:Javascript 引用存储在另一个类的数组中的类实例,javascript,class,this,Javascript,Class,This,如果标题没有意义,我会道歉。我把自己搞糊涂了,但我将试着详细说明下面的问题 我有三个Javascript类: js包含类映射 B js包含类mapObject 用于MapMaker的C js逻辑 在C类中,我创建了一个map实例,它是一个带有网格布局的画布 用户可以单击地图并使用热键添加mapObject的实例 现在,我正试图显示mapObject图标,但对于如何显示,我完全感到困惑: 地图创建和地图对象创建代码C js: case 13: // Enter Key (Submit)
case 13: // Enter Key (Submit)
unhighlightTools();
currentMap.drawMap();
if(currentFloor != null){
currentFloor.hasFloor = true;
if(currentFloor.tileName == "Guild"){
createGuildObject(currentFloor.position.x,currentFloor.position.y,currentFloor);
}
console.log("Map object created at - X:"+currentFloor.position.x+" Y:"+currentFloor.position.y);
createMapObject(currentFloor.position.x,currentFloor.position.y,currentFloor);
}
currentFloor = null;
highlightTools();
break;
}
// Create a Map Object and push it to the currentMap with its position.
function createMapObject(x,y,floor){
currentMap.objects.push(new MapObject(x,y,floor));
}
// Create a Guild Object (extension of Map Object) and push it to the currentMap with its position.
function createGuildObject(x,y,floor){
currentMap.objects.push(new Guild(x,y,floor));
}
在MapObject b js中定义地图图标
class MapObject {
constructor(x,y,floor) {
this.position = {x, y};
this.icon = this.wallFloorIcons(floor);
}
wallFloorIcons(floor) {
var self = this;
self.img = new Image();
self.name = <code that creates the name>
self.name = 'wall-'+self.name+'.png';
if(self.name == 'wall-.png'){
self.img.src = "../images/mapSprites/floor.png";
}else {
self.img.src = "../images/mapSprites/"+self.name;
}
console.log(self.img);
return self.img;
}
总之
我正在创建一个类的实例,将其推送到另一个类的数组中。然后,在尝试从第一个类的实例中获取第二个类的图标时陷入困境
我的console.logj.icon返回undefined,我似乎无法从MapObject中获取任何细节,但是如果我是console.logj,那么我确实可以在控制台中看到MapObject及其所有细节
我在这方面还是新手,我确信我把事情搞得一团糟,所以请对我放松点:p
谢谢!
LemongrabobjectsAtPosition正在返回一个对象数组,而数组没有图标属性。也许您想迭代self.objectsAtPosition{x:floor.position.x,y:floor.position.y}:
其他一些建议:
您可以使用floor.position代替{x:floor.position.x,y:floor.position.y}。
objectsAtPosition可以更简单地使用Array.filter编写:返回this.objects.filtero=>o.position.x==position.x&&o.position.y==position.y
无需执行var self=this,除非您希望能够在方法中的匿名函数中访问该值。
非常感谢你。现在觉得很尴尬,我看的是数组而不是对象>。
fillMap(){
var self = this;
self.c.lineWidth = 1;
self.c.strokeStyle = 'black';
self.c.fillStyle = "rgba(255, 255, 255, 0.2)";
for (var row = 0; row < self.boxes; row++) {
for (var column = 0; column < self.boxes; column++) {
var x = column * self.boxSize;
var y = row * self.boxSize;
self.c.beginPath();
self.c.rect(x, y, self.boxSize, self.boxSize);
self.c.stroke();
self.c.closePath();
for (var i=0; i<self.objects.length; i++) {
var floor = self.objects[i];
if (floor.position.x == column && floor.position.y == row) {
if (self.objectsAtPosition({x:floor.position.x, y:floor.position.y}) != null) {
var j = self.objectsAtPosition({x:floor.position.x, y:floor.position.y});
console.log(j.icon);
this.c.drawImage(self.objectsAtPosition({x:floor.position.x, y:floor.position.y}).getIcon(),x,y, self.boxSize, self.boxSize);
}
}
}
}
}
objectsAtPosition(position) {
var objs = [];
for (var o of this.objects) {
if (o.position.x == position.x && o.position.y == position.y) {
objs.push(o);
}
}
return objs;
}
const mapObjects = self.objectsAtPosition({x:floor.position.x, y:floor.position.y})
for (const mapObject of mapObjects) {
this.c.drawImage(mapObject.getIcon(), x, y, self.boxSize, self.boxSize);
}