Javascript 使用函数参数作为值?

Javascript 使用函数参数作为值?,javascript,function,2d,game-physics,collision,Javascript,Function,2d,Game Physics,Collision,最近我开始学习JavaScript,我正在尝试制作一个小型平台。我有一些基本的功能,比如重力、运动和物体创造。但是我想让worldbuilding变得更容易一些,所以我做了一个创建块的函数。一切都很好,但要在玩家和区块之间创建碰撞,我希望能够从这些特定区块中获取变量,并使用这些变量来停止我的角色。现在我将块设置为一个变量,并尝试调用该变量,但结果显示为红色。有什么我能解决的吗?还是有更好的方法来进行碰撞 这里并不是所有的代码都显示出来,只是相关的东西 var-b1; 功能块(x、y、w、h、颜

最近我开始学习JavaScript,我正在尝试制作一个小型平台。我有一些基本的功能,比如重力、运动和物体创造。但是我想让worldbuilding变得更容易一些,所以我做了一个创建块的函数。一切都很好,但要在玩家和区块之间创建碰撞,我希望能够从这些特定区块中获取变量,并使用这些变量来停止我的角色。现在我将块设置为一个变量,并尝试调用该变量,但结果显示为红色。有什么我能解决的吗?还是有更好的方法来进行碰撞

这里并不是所有的代码都显示出来,只是相关的东西

var-b1;
功能块(x、y、w、h、颜色){
c、 填充样式=颜色;
c、 fillRect(x,y,w,h);
}
函数更新(){
如果((pX>=b1.x-pW)和&(pY>=b1.y-pH)){
pX=b1.x-pW;
}
}
函数绘图(){
b1=块(500350100100,“灰色”);

}
您可以使用函数来创建

这不是创建对象的唯一方法,有很多种方法,但是它与您的代码最为匹配

是JavaScript的基本构建块(如Java的类),在开始使用它们之前,深入了解它们是值得的

基本例子 或


或者一打或更多创建对象的方法。

谢谢您告诉我这非常有用。但我也在想,是否有一种方法可以使碰撞全球化。因此b1.x将只是一个对象,但是有没有一种方法可以为每个对象调用变量,或者我是否需要为我生成的任何块编写冲突代码?@Loaphs是一个涵盖几乎所有语言的通用编程技巧。如果你发现自己在重复任何代码,那就是你做错了,还有更好的方法。使用两个参数创建函数
update
,其中
p
引用封装
pX
pW
等的obj。。。例如
p.x,p.w
等,而
b
是一个
Block
类对象,函数将看起来像
函数更新(p,b){if((p.x>=b.x-p.w)和&(p.y>=b.y-p.h)){p.x=b.x-p.w;}
,并且可以用于任何
块和
p
(无论是什么)你再也不用写那个函数了。
// It is customary for object instantiated via new to have capitalized names
function Block(x, y, w, h, color) {
    this.x = x;
    this.y = y;
    this.w = w;
    this.h = h;
    this.color = color;
}
var b1 = new Block(500, 350, 100, 100, 'gray');
drawBlock(b1);

function drawBlock(block) {
    ctx.fillStyle = block.color;
    ctx.fillRect(block.x, block.y, block.w, block.h);
}

function update() {
  if((pX >= b1.x - pW) && (pY >= b1.y - pH)) {
        pX = b1.x - pW;
  }
}
// It is customary for object instantiated via new to have capitalized names
function Block(x, y, w, h, color) {
    this.x = x;
    this.y = y;
    this.w = w;
    this.h = h;
    this.color = color;
}
Block.prototype = {
    draw() {
        ctx.fillStyle = this.color;
        ctx.fillRect(this.x, this.y, this.w, this.h);
    },
};

var b1 = new Block(500, 350, 100, 100, 'gray');
b1.draw();
const Block = (x, y, w, h) => ({x, y, w, h});// this method does not require new operator
var b1 = Block(500, 350, 100, 100, 'gray');
drawBlock(b1);
function drawBlock(block) {
    ctx.fillStyle = block.color;
    ctx.fillRect(block.x, block.y, block.w, block.h);
}
const blockCommon = {
    draw() {
        ctx.fillStyle = this.color;
        ctx.fillRect(this.x, this.y, this.w, this.h);
    },
};
const Block = (x, y, w, h) => ({x, y, w, h, ...blockCommon});
var b1 = Block(500, 350, 100, 100, 'gray');
b1.draw();