# Enemy x keeps equaling nan

I’m trying to create a tower defense game, but atm my enemy keeps vanishing & it’s x keeps showing up nan. Can anyone tell me why?

sketch.js

``````var wall = [35];
var bs = 25;
var enemy;

}
function setup() {
createCanvas(600, 600);
for (var i = 0; i < wallT.getColumnCount(); i++){
var tn = wallT.getNum(0,i);
wall[i] = new Wall(tn);
}
enemy = new Enemy(50);
}

function draw() {
background(0);
for (var i = 0; i < wall.length; i++){
wall[i].show();
}
enemy.show();
enemy.move();
}
``````

Enemy.js

``````class Enemy extends Block{

constructor(n) {
super(n);
var xspd = 1;
var yspd = 0;
}

show() {
fill(0,255,0);
rect(this.x,this.y,bs,bs);
}

move() {
this.x += this.xspd;
//this.y += this.yspd;
//print(this.x);
}
}
``````

wall.js

``````class Wall extends Block{

constructor(n) {
super(n);
}

show() {
fill(255);
rect(this.x,this.y,bs,bs);
}

}
``````

block.js

``````class Block{

constructor(n) {
this.x = n;
this.y = 0;
while (this.x > 23){
this.y += 1;
this.x -= 24;
}
this.y *= bs;
this.x *= bs;
}

}
``````

wall.csv

``````0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,47,48,71,72,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,119,120,143,144,167,168,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,215,216,239,240,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,287,288,311,312,335,336,359,360,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,407,408,431,432,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,479,480,503,504,527,528,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575
``````
2 Likes

This is the statement that makes property x become `NaN`: `this.x += this.xspd;`

It is so b/c property xspd does’t exist!

Instead you declare a local variable named xspd inside Enemy’s constructor: `var xspd = 1;`

2 Likes

I tried making it above constructor it gave me an error saying it expected a module. & if creating variables in constructor make them only local why does this.x & this.y work how I want them to? I declared them the same way.

1 Like

Properties x & y are inherited by class Enemy from class Block: `class Enemy extends Block {`

Also they’re both initialized by calling super(): `super(n);`

Obviously if you need a property named xspd you’re gonna need to use keyword `this`:
`var xspd = 1;``this.xspd = 1;`

1 Like

that doesn’t answer why I made both the same way & only x y work & I alrdy knew where x y came from I made it in block constructor like I tried to declare xspd & yspd.

I got it working I switched var with this.

Enemy.js

``````class Enemy extends Block{

constructor(n) {
super(n);
this.xspd = 1;
this.yspd = 0;
}

show() {
fill(0,255,0);
rect(this.x,this.y,bs,bs);
}

move() {
this.x += this.xspd;
//this.y += this.yspd;
//print(this.x);
}
}
``````
1 Like

I don’t get what you mean b/c object properties aren’t the same thing as local variables & parameters.

Declaring a variable like this `var xspd = 1;` or this `let x = n;`
isn’t the same as appending another property to an object as `this.xspd = 1;` or `this.x = n;`

2 Likes

earlier i meant i made both in constructor, but now I get why it didn’t work.

2 Likes