构造函数不起作用?? P5.JS

时间:2017-03-15 19:27:11

标签: javascript p5.js

所以我试图找出为什么它说display()不是函数,我觉得这可能是完全错误的代码......

另外,我对图像的x和y位置感到困惑?我在哪里定义它们。

这段代码的目的是让一个Stormtrooper png漂浮在屏幕上,我最终希望他在点击时发出声音,并让他旋转(我也难倒) - 现场版可以是在这里看到:https://benjamingibbsportfolio.000webhostapp.com/(这是我的半成品组合,请不要苛刻)

我以不同的方式正确完成了这段代码,我只是学习构造函数atm。我最初很兴奋,因为我以为我终于抓住了'this'关键字,然后一切都崩溃了!

function preload() {

img = loadImage("stormy3.png");

}

function storm(x,y,xSpeed,ySpeed,img) {
 this.x = x;
 this.y = y;
 this.xSpeed = xSpeed;
 this.ySpeed = ySpeed;
 this.img = img;

 this.display = function() {
  image(this.img,this.x,this.y);
}

this.move = function() {
  this.x = this.x + this.xSpeed;
  this.y = this.y + this.ySpeed;
}
this.bounce = function() {
  if(this.x > width || this.x < 0) {
    this.xSpeed = this.xSpeed * -1;
  }
  if(this.y > height || this.y < 0) {
    this.ySpeed = this.ySpeed * -1;
  }
}
}

function setup() {
 // TRANSPARENT BACKGROUND*
  background(255, 0, 0, 0.4);
//
var myCanvas = createCanvas(1440, 4000);
myCanvas.position(0, 0);
}

function draw() {
 // TRANSPARENT BACKGROUND*
 clear();
 //
 storm.display();
 storm.move();
 storm.bounce();
}

1 个答案:

答案 0 :(得分:1)

您已经创建了一个名为storm的构造函数,它定义了一个名为storm类型。但是您还没有创建该类型的实例

现在,当你这样做时:

storm.display();
storm.move();
storm.bounce();

此代码中的storm引用了类型,而不是特定实例。这就是您收到错误的原因。你不能使用这样的类型来调用函数,你必须经历一个实例。

要创建实例,您应该使用 new 关键字:

var myStorm =新风暴(100,200 1,2,yourImageHere);

然后您可以使用该实例调用您的函数:

myStorm.display();
myStorm.move();
myStorm.bounce();

一些随机的注释:你的构造函数应该以大写字母开头,这样就可以更容易地区分类型和持有实例的变量。此外,您无法定义img变量,因此会给您带来问题。

无耻的自我推销:我已经编写了一个关于可用构造函数的教程here