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