我正在使用javascript pong模拟器,我希望尽可能使其面向对象。你可以在这里看到代码:
Codepen showing how the paddle is not rendering
您可以看到我注释掉的用于桨尺寸调整的变量。我将大小调整移到了Paddle和Player对象构造函数上,使其更加面向对象。
我有一个Paddle对象构造函数:
function Paddle(x, y) {
this.x = x;
this.y = y;
this.width = width/8;
this.height = this.width/5;
this.center = width/2 - this.width/2;
this.x_speed = 0;
this.y_speed = 0;
};
一个Player对象构造函数:
function Player() {
this.startX = Paddle.center;
this.startY = height - Paddle.height;
this.paddle = new Paddle(this.startX, this.startY);
this.score = 0;
};
我也有类似的计算机播放器构造函数。
在脚本结束时,我创建了我的对象并开始游戏:
var player = new Player();
var computer = new Computer();
var ball = new Ball(ballStartPositionX,ballStartPositionY);
我的拨片没有被创建,我认为这是由于我使用this.startX = Paddle.center;
和this.paddle = new Paddle(this.startX, this.startY);
的方式,特别是我在新的Paddle参数中使用'this'选择器的方式。有任何想法吗?
答案 0 :(得分:1)
你在哪里:
function Player() {
this.startX = Paddle.center;
this.startY = height - Paddle.height;
this.paddle = new Paddle(this.startX, this.startY);
this.score = 0;
};
您正在尝试阅读 Paddle 构造函数的 center 属性,但这是 Paddle 实例的属性。您需要将初始 x 和 y 坐标传递给 Player 构造函数,因此:
function Player(x, y) {
// create paddle instance first
this.paddle = new Paddle(x, y);
// Use the paddle instance, not the constructor
this.startX = this.paddle.center;
this.startY = height - this.paddle.height; // height is a global
this.score = 0;
};
当您创建 Player 实例时,您必须说出它们的位置:
var player = new Player(xCoord, yCoord);
所以它可以在构造 Paddle 实例时使用coords。