Mercurial > hg > Members > e085711
view webGL/dandy/resources/Player.js @ 6:881478004f18
update Bullet.js
author | NOBUYASU Oshiro |
---|---|
date | Mon, 21 Jun 2010 17:37:26 +0900 |
parents | 7f615f5f5220 |
children | 4343c1feedb5 |
line wrap: on
line source
function Pad() { this.up=0; this.down=0; this.right=0; this.left=0; this.count=0; this.state=0; this.k0=0; this.k1=0; this.k2=0; this.k3=0; this.k4=0; this.r2=0; this.r1=0; this.r2=0; this.l1=0; this.l2=0; this.l3=0; this.se=0; this.st=0; //勝手につけた this.quit=0; return this; } function makePlayer( object ) { this.x = 0; this.y = 0; this.z = 10; this.dx = 0; this.dy = 0; this.idle = object["player_idle"]; this.rightmove = object["player_rightmove"]; this.leftmove = object["player_leftmove"]; this.turntoright = object["player_turntoright"]; this.turntoleft = object["player_turntoleft"]; this.image = this.idle; return this; } function movePlayer( player, pad ) { pad.right = Math.min(pad.right, 0.7); pad.left = Math.min(pad.left, 0.7); pad.up = Math.min(pad.up, 0.7); pad.down = Math.min(pad.down, 0.7); player.x -= pad.right; player.x += pad.left; player.y += pad.up; player.y -= pad.down; player.x = Math.min(player.x, 100); player.x = Math.max(player.x, -100); player.y = Math.min(player.y, 70); player.y = Math.max(player.y, -70); if( pad.count == 1) pad.state=0; if( pad.count > 0) pad.state=1; if( pad.count > 10 ) pad.state=2; if( pad.state == 0 ) player.image = player.idle; if( pad.state == 1 ) { if( pad.right > 0 ) player.image = player.turntoright; if( pad.left > 0 ) player.image = player.turntoleft; } if( pad.state == 2 ) { if( pad.right > 0 ) player.image = player.rightmove; if( pad.left > 0 ) player.image = player.leftmove; } } function drawPlayer(ctx, player, scale) { // setup VBOs ctx.enableVertexAttribArray(0); ctx.enableVertexAttribArray(1); ctx.enableVertexAttribArray(2); ctx.bindBuffer(ctx.ARRAY_BUFFER, player.image.vertexObject); ctx.vertexAttribPointer(2, 3, ctx.FLOAT, false, 0, 0); ctx.bindBuffer(ctx.ARRAY_BUFFER, player.image.normalObject); ctx.vertexAttribPointer(0, 3, ctx.FLOAT, false, 0, 0); ctx.bindBuffer(ctx.ARRAY_BUFFER, player.image.texCoordObject); ctx.vertexAttribPointer(1, 2, ctx.FLOAT, false, 0, 0); ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, player.image.indexObject); // generate the model-view matrix var mvMatrix = new CanvasMatrix4(); mvMatrix.scale(scale, scale, scale); mvMatrix.rotate(180, 0,0,1); mvMatrix.translate(player.x, player.y, player.z); // construct the normal matrix from the model-view matrix var normalMatrix = new CanvasMatrix4(mvMatrix); normalMatrix.invert(); normalMatrix.transpose(); ctx.uniformMatrix4fv(ctx.getUniformLocation(ctx.program, "u_normalMatrix"), false, normalMatrix.getAsWebGLFloatArray()); // construct the model-view * projection matrix var mvpMatrix = new CanvasMatrix4(mvMatrix); mvpMatrix.multRight(ctx.perspectiveMatrix); ctx.uniformMatrix4fv(ctx.getUniformLocation(ctx.program, "u_modelViewProjMatrix"), false, mvpMatrix.getAsWebGLFloatArray()); ctx.bindTexture(ctx.TEXTURE_2D, player.image.texture); ctx.drawElements(ctx.TRIANGLES, player.image.numIndices, ctx.UNSIGNED_SHORT, 0); } function Player(ctx, player, pad ) { pad.right = Math.min(pad.right, 0.7); pad.left = Math.min(pad.left, 0.7); pad.up = Math.min(pad.up, 0.7); pad.down = Math.min(pad.down, 0.7); player.x -= pad.right; player.x += pad.left; player.y += pad.up; player.y -= pad.down; player.x = Math.min(player.x, 100); player.x = Math.max(player.x, -100); player.y = Math.min(player.y, 70); player.y = Math.max(player.y, -70); if( pad.count == 1) pad.state=0; if( pad.count > 0) pad.state=1; if( pad.count > 10 ) pad.state=2; if( pad.state == 0 ) player.image = player.idle; if( pad.state == 1 ) { if( pad.right > 0 ) player.image = player.turntoright; if( pad.left > 0 ) player.image = player.turntoleft; } if( pad.state == 2 ) { if( pad.right > 0 ) player.image = player.rightmove; if( pad.left > 0 ) player.image = player.leftmove; } drawPlayer(ctx, player, 1.2);//自機の描画(一先ずここでしておく) //玉レベル1登録 if ((pad.k4 % 3 == 1) && (pad.k3 % 3 == 0)){ pad.k4 = 1; tama_lv1_end++; // if(tama_lv1_end > 19) tama_lv1_end = 0; var i = tama_lv1_end; var tama = new Tama1(); tama.x = player.x; tama.y = player.y; tama.r = 1; tama.l = 1; tama_lv1[i] = tama; } //玉レベル1表示 for (i = 0; i < tama_lv1_end + 1; i++) { tama_lv1[i].y += 10; if (tama_lv1[i].r == 1) { PutSpriteBullet(ctx, tama_lv1[i], bullets[1]); } if (tama_lv1[i].y < -70) { if(tama_lv1_end == i){ tama_lv1_end--; break; } if(tama_lv1_end > i){ tama_lv1[i] = tama_lv1[tama_lv1_end]; tama_lv1_end--; break; } } } } function PutSpriteBullet( ctx, tama, glObj) { // setup VBOs ctx.enableVertexAttribArray(0); ctx.enableVertexAttribArray(1); ctx.enableVertexAttribArray(2); ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.vertexObject); ctx.vertexAttribPointer(2, 3, ctx.FLOAT, false, 0, 0); ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.normalObject); ctx.vertexAttribPointer(0, 3, ctx.FLOAT, false, 0, 0); ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.texCoordObject); ctx.vertexAttribPointer(1, 2, ctx.FLOAT, false, 0, 0); ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, glObj.indexObject); // generate the model-view matrix var mvMatrix = new CanvasMatrix4(); mvMatrix.scale(1, 1, 1); mvMatrix.translate(0,0,0); mvMatrix.rotate(180, 0,0,1); mvMatrix.translate(tama.x,tama.y,10); // construct the normal matrix from the model-view matrix var normalMatrix = new CanvasMatrix4(mvMatrix); normalMatrix.invert(); normalMatrix.transpose(); ctx.uniformMatrix4fv(ctx.getUniformLocation(ctx.program, "u_normalMatrix"), false, normalMatrix.getAsWebGLFloatArray()); // construct the model-view * projection matrix var mvpMatrix = new CanvasMatrix4(mvMatrix); mvpMatrix.multRight(ctx.perspectiveMatrix); ctx.uniformMatrix4fv(ctx.getUniformLocation(ctx.program, "u_modelViewProjMatrix"), false, mvpMatrix.getAsWebGLFloatArray()); ctx.bindTexture(ctx.TEXTURE_2D, glObj.texture); ctx.drawElements(ctx.TRIANGLES, glObj.numIndices, ctx.UNSIGNED_SHORT, 0); }