Mercurial > hg > Members > e085711
view webGL/dandy/resources/collision.js @ 27:e3a50cb29c85 default tip
upload xmldisplay
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 20 Apr 2011 23:45:15 +0900 |
parents | 2018ad94fd9b |
children |
line wrap: on
line source
function collision_detect() { for(var i = 0; Boolean(active_chara_list.enemy[i]) ; i++) { var p = active_chara_list.enemy[i]; if(p.flag == true) { p = p.collision(p); } } } atari = function collision(p) { var i1=0; var i2=0; var n = 0; var ex = p.x; var ey = p.y; var charano = p.charano; var w = p.w; var h = p.h; //自機やられ /* if ((ex < jiki.x + jiki.w /2 ) && (ex + w > jiki.x + jiki.w /2) && ( ey < jiki.y + jiki.h / 2) && (ey + h > jiki.y + jiki.h / 2) && (jiki.muteki <= 0)) { */ if((Math.abs(jiki.x - ex) < (jiki.w + w - 15)/2)//-15 は当たり判定を緩和しているだけ &&(Math.abs(jiki.y - ey ) < (jiki.h + h - 15)/2)//-15 しないとちょっとシビアな感じ &&(jiki.muteki <= 0)) { Bom(jiki.x,jiki.y); jiki.bf = false; jiki.zanki--; jiki.muteki = 120; /* infg.stg = 0; infg_level--; if ( infg_level < 0) infg_level = 0; */ return p; } if(p.tama != true) { /*玉レベル1の当たり判定-------------------------*/ for ( i1 = 0; i1 < tama_lv1_end + 1; i1++) { if ((tama_lv1[i1].x + 5 + bullets[2].w/2 > ex - w/2) && (ex + w/2 > tama_lv1[i1].x + 5 - bullets[2].w/2 ) && (tama_lv1[i1].y + h > ey) && (tama_lv1[i1].y < ey +h) && (tama_lv1[i1].l != -1)) { tama_lv1[i1].r = -1; p.vit -= TAMALV1P; infg.stg += 4; if (p.vit <= 0) { infg.stg += 4; Bom(p.x, p.y); // enemycount += (p.score * ((infg.stg / 128) + infg_level + 1)); p.state = delete_chara; p.collision= noaction; p.flag = false; return p; } } if ((tama_lv1[i1].x - 5 + bullets[2].w/2 > ex - w/2) && (ex + w/2 > tama_lv1[i1].x - 5 - bullets[2].w/2 ) && (tama_lv1[i1].y + h > ey) && (tama_lv1[i1].y < ey +h) && (tama_lv1[i1].l != -1)) { tama_lv1[i1].l = -1; p.vit -= TAMALV1P; infg.stg++; if (p.vit <= 0) { infg.stg += 4; Bom(p.x, p.y); // enemycount += (p.score * ((infg.stg / 128) + infg_lvel + 1)); p.state = delete_chara; p.collision = noaction; p.flag = false; return p; } } } /*玉レベル2--------------------------------*/ for(i1 = 0; i1 < tama_lv2_end + 1; i1++) { if((tama_lv2[i1].x + 10 + bullets[4].w/2 > ex - w/2 ) && (ex + w/2 > tama_lv2[i1].x + 10 - bullets[4].w/2) && (tama_lv2[i1].y + bullets[4].h/2 > ey - h/2 ) && (tama_lv2[i1].y - bullets[4].h/2 < ey + h/2) && (tama_lv2[i1].rr != -1)) { tama_lv2[i1].rr = -1; p.vit -= TAMALV2P; infg.stg++; if(p.vit <= 0) { infg.stg += 4; Bom(p.x, p.y); // enemycount += (p.score * ((infg.stg / 128) + infg_level + 1)); p.state = delete_chara; p.collision = noaction; p.f = false; return p; } } if((tama_lv2[i1].x + 5 + bullets[4].w/2 > ex - w/2 ) && (ex + w/2 > tama_lv2[i1].x + 5 - bullets[4].w/2) && (tama_lv2[i1].y + bullets[4].h/2 > ey - h/2 ) && (tama_lv2[i1].y - bullets[4].h/2 < ey + h/2) && (tama_lv2[i1].sr != -1)) { tama_lv2[i1].sr = -1; p.vit -= TAMALV2P; infg.stg++; if(p.vit <= 0) { infg.stg += 4; Bom(p.x, p.y); // enemycount += (p.score * ((infg.stg / 128) + infg_level + 1)); p.state = delete_chara; p.collision = noaction; p.f = false; return p; } } if((tama_lv2[i1].x - 10 + bullets[4].w/2 > ex - w/2 ) && (ex + w/2 > tama_lv2[i1].x - 10 - bullets[4].w/2) && (tama_lv2[i1].y + bullets[4].h/2 > ey - h/2 ) && (tama_lv2[i1].y - bullets[4].h/2 < ey + h/2) && (tama_lv2[i1].ll != -1)) { tama_lv2[i1].ll = -1; p.vit -= TAMALV2P; infg.stg++; if(p.vit <= 0) { infg.stg += 4; Bom(p.x, p.y); // enemycount += (p.score * ((infg.stg / 128) + infg_level + 1)); p.state = delete_chara; p.collision = noaction; p.f = false; return p; } } if((tama_lv2[i1].x - 5 + bullets[4].w/2 > ex - w/2 ) && (ex + w/2 > tama_lv2[i1].x - 5 - bullets[4].w/2) && (tama_lv2[i1].y + bullets[4].h/2 > ey - h/2 ) && (tama_lv2[i1].y - bullets[4].h/2 < ey + h/2) && (tama_lv2[i1].sl != -1)) { tama_lv2[i1].sl = -1; p.vit -= TAMALV2P; infg.stg++; if(p.vit <= 0) { infg.stg += 4; Bom(p.x, p.y); // enemycount += (p.score * ((infg.stg / 128) + infg_level + 1)); p.state = delete_chara; p.collision = noaction; p.f = false; return p; } } } } /*レーザーレベル1------------------------*/ for(i1 = 0; i1 < laser_lv1_end + 1; i1++) { n = laser_lv1[i1].r * 128 / 4096; // var nx = laser_lv1[i1].w + laser_lv1[i1].scale; // var ny = laser_lv1[i1].h + laser_lv1[i1].scale; if ((laser_lv1[i1].x + n*d_x > ex) && (ex + w > laser_lv1[i1].x) && (laser_lv1[i1].y + n*d_y > ey) && (laser_lv1[i1].y < ey + h) && (laser_lv1[i1].r != -1)) { laser_lv1[i1].r = -1; laser_lv1[i1].y = -1; p.vit -= LASERLV1P; infg.stg++; if(p.vit <= 0) { infg.stg += 4; Bom(p.x, p.y); // enemycount += (p.score * ((infg.stg / 128) + infg_level + 1)); p.state = delete_chara; p.collision = noaction; p.f = false; return 1; } } } /*shield(laser lv2) */ if((p.tama == true ) && (lg.stg > 0) && (laser_lv2[0].x + 128*d_x > ex ) && ( ex + w > laser_lv2[0].x - 128*d_x) && (laser_lv2[0].y + 128*d_y > ey ) && (laser_lv2[0].y - 128*d_y < ey + h) && (laser_lv2[0].r != 0)) { p.vit -= LASERLV2P; lg.stg -= 26; infg.stg++; if(p.vit <= 0) { infg.stg += 4; Bom(p.x, p.y); // enemycount += (p.score * ((infg.stg / 128) + infg_level + 1 )); p.state = delete_chara; p.collision = noaction; p.flag = false; return p; } } }