gpt4 book ai didi

Javascript:为什么这个实例变量未定义?

转载 作者:行者123 更新时间:2023-11-28 12:06:50 25 4
gpt4 key购买 nike

我是 Javascript 新手,正在使用 WebGL 并收到错误,“self.starshipVertexPositionBuffer 未定义”。当尝试访问 itemSize 属性时,它看起来像是崩溃了(请参阅下面的评论),但在执行该语句之前它正在初始化(请参阅下面的评论),所以我不明白为什么它会因该错误而崩溃。你的想法?

    var starship;
function initstarship()
{
starship = new starship();
starship.initBuffers();
}

function starship()
{
this.angle = 0;
this.speed = 0;
this.xDir = 0;
this.yDir = 0;
this.xPos = 0.0;
this.yPos = 0.0;
this.starshipVertexPositionBuffer = null;
this.starshipVertexTextureCoordBuffer = null;
this.starshipVertexIndexBuffer = null;
}

starship.prototype.updatePosition = function(timeElapsed){
this.xPos += this.xDir * this.speed;
this.yPos += this.yDir * this.speed;
}

starship.prototype.initBuffers = function () {
this.starshipVertexPositionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, this.starshipVertexPositionBuffer);
vertices = [
-0.15, -0.15, 0.15,
0.15, -0.15, 0.15,
0.15, 0.15, 0.15,
-0.15, 0.15, 0.15,

];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);

//INITIALIZED HERE
this.starshipVertexPositionBuffer.itemSize = 3;
this.starshipVertexPositionBuffer.numItems = 4;

this.starshipVertexTextureCoordBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, this.starshipVertexTextureCoordBuffer);
var textureCoords = [
0.0, 0.0,
1.0, 0.0,
1.0, 1.0,
0.0, 1.0,

];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(textureCoords), gl.STATIC_DRAW);
this.starshipVertexTextureCoordBuffer.itemSize = 2;
this.starshipVertexTextureCoordBuffer.numItems = 4;

this.starshipVertexIndexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.starshipVertexIndexBuffer);
var starshipVertexIndices = [
0, 1, 2, 0, 2, 3,
]
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(starshipVertexIndices), gl.STATIC_DRAW);
this.starshipVertexIndexBuffer.itemSize = 1;
this.starshipVertexIndexBuffer.numItems = 6;
}

starship.prototype.draw = function()
{
mvPushMatrix();

mat4.translate(mvMatrix, [this.xPos, this.yPos, z]);

mat4.rotate(mvMatrix, degToRad(this.angle), [0, 0, 1]);

gl.bindBuffer(gl.ARRAY_BUFFER, self.starshipVertexPositionBuffer);

//CRASHING ON THIS NEXT LINE
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, self.starshipVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);

gl.bindBuffer(gl.ARRAY_BUFFER, self.starshipVertexTextureCoordBuffer);
gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, self.starshipVertexTextureCoordBuffer.itemSize, gl.FLOAT, false, 0, 0);

gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, starshipTexture);
gl.uniform1i(shaderProgram.samplerUniform, 0);

gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, self.starshipVertexIndexBuffer);
setMatrixUniforms();
gl.drawElements(gl.TRIANGLES, self.starshipVertexIndexBuffer.numItems, gl.UNSIGNED_SHORT, 0);

mvPopMatrix();
}

function webGLStart() {
initstarship();
tick();
}

非常感谢您的智慧!

最佳答案

您没有在该代码中的任何地方定义self。您可能会将其与 this 混淆。 .

关于Javascript:为什么这个实例变量未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8205201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com