this.lastImage = null;
}
}
+ if(this.movingSpeed.x < -this.hysteresis){
+ this.direction = 0;
+ } else if(this.movingSpeed.x > this.hysteresis){
+ this.direction = 1;
+ }
}
});
className: "EnemyCharacterClass",
tick : function()
{
+ //追跡処理
var main = this.ownerStage.userControlledCharacter;
var distX = main.origin.x - this.origin.x;
if(this.chasing && Math.abs(distX) <= this.chasingRange && Math.abs(this.origin.y - main.origin.y) <= this.chasingRange){
this.goLeft();
}
}
+ //ダメージの開始・終了処理
+ if(this.collidingDirection & CollideTop){
+ if(!this.hurting){
+ //自分自身のダメージ有効
+ this.hurting = true;
+ this.hurtPerTickCount = this.hurtPerTickBase;
+ }
+ //if(this.damaging){
+ // //メインキャラクタへのダメージ無効
+ // this.damaging = false;
+ //}
+ } else{
+ if(this.hurting){
+ //自分自身のダメージ無効
+ this.hurting = false;
+ }
+ if(this.collidingDirection & (CollideLeft | CollideRight)){
+ //if(!this.damaging){
+ // //メインキャラクタへのダメージ有効
+ // this.damaging = true;
+ // this.damagePerTickCount = this.damagePerTickBase;
+ //}
+ }
+ }
+
+ //メインキャラへのダメージ
if(this.damaging){
if(this.damagePerTickCount == this.damagePerTickBase){
this.ownerStage.manager.userManager.damage(this.touchDamage);
}
}
}
+ //自分自身のダメージ
if(this.hurting){
if(this.hurtPerTickCount == this.hurtPerTickBase){
this.HP -= this.hurt;
}
}
}
-
+ //落下後の死亡処理
if(this.origin.y > 1000)
{
this.ownerStage.removeStageObject(this);
drawText(this.ownerStage.mainContext, this.HP, x, y - 20);
this.ownerStage.mainContext.restore();
},
- judgeCollideRange: function(x1, y1, x2, y2, obj){
- //objは範囲の対象となるオブジェクトのインスタンス。省略可能
- // 1 - - +
- // | |
- // | |
- // + - - 2
- var retv = OperatedCharacterClass.prototype.judgeCollideRange.apply(this, arguments);
- if(obj == this.ownerStage.userControlledCharacter){
- if(retv){
- var cd = this.judgeCollideRange_getDirection(x1, y1, x2, y2);
- if(cd & CollideTop){
- this.hurting = true;
- var tickCount = this.ownerStage.manager.tickCount;
- this.hurtLastTick = tickCount;
- } else{
- this.hurting = false;
- this.hurtPerTickCount = this.hurtPerTickBase;
- }
- } else{
- if(this.hurting){
- this.hurting = false;
- this.hurtPerTickCount = this.hurtPerTickBase;
- }
- }
- }
- return retv;
- },
- isCollided : function(obj, x, y)
- {
- //MovableStageObjectが(x, y)のとき相手のobjと衝突するか判定
- var retv = OperatedCharacterClass.prototype.isCollided.apply(this, arguments);
- if(obj == this.ownerStage.userControlledCharacter){
- var tickCount = this.ownerStage.manager.tickCount;
- if(retv){
- if((this.collideFlag & 8) != 0){
- //上から衝突された場合は自分がダメージを受ける
- //this.hurting = true;
- //this.hurtLastTick = tickCount;
- } else{
- //それ以外の場合はメインキャラにダメージを与える
- this.damaging = true;
- this.damageLastTick = tickCount;
- }
- } else{
- if(this.damaging && tickCount > (this.damageLastTick + 5)){
- this.damaging = false;
- this.damagePerTickCount = this.damagePerTickBase;
- }
- //if(this.hurting && tickCount > (this.hurtLastTick + 5)){
- // this.hurting = false;
- // this.hurtPerTickCount = this.hurtPerTickBase;
- //}
- }
- }
- return retv
- },
-
});
this.ownerStage.collisionMapContext.restore();
},
tick: function(){
- if(this.isCollided)
- {
- for(var i = 0; i < this.collidedList.length; i++)
- {
- var character = this.collidedList[i];
- if(character.isCollided(this, character.origin.x, character.origin.y))
- {
- //\8c»\8dÝ\8fÕ\93Ë\92\86\82Ì\83L\83\83\83\89\82ð\8c©\82Â\82¯\82½
- return;
- }
- }
-
- //\8fÕ\93Ë\92\86\82Ì\83L\83\83\83\89\82ª\82¢\82È\82¢
- this.isCollided = false;
- this.collidedList = [];
- }
+ this.checkCollidingDirection();
},
+ /*
itemAttacked : function(obj, obj_x, obj_y)
{
+
var tickCount = this.ownerStage.manager.tickCount;
if(!this.isCollided)
{
this.collidedList.push(obj);
}
+ */
});
\ No newline at end of file
this.debugContext = null;
//StageObject\82Ì\83\8a\83X\83g
this.stageObjectList = new Array();
+ this.stageObjectLinearList = new Array();
this.globalStageObjectList = new Array();
//\8fÕ\93Ë\94»\92è\97pcanvas
this.collisionMapCanvas = null;
this.collisionMapCanvas = null;
this.collisionMapContext = null;
this.stageObjectList = new Array();
+ this.stageObjectLinearList = new Array();
this.globalStageObjectList = new Array();
},
addStageObject: function(aStageObject, isGlobalObject){
this.stageObjectList[sp] = [];
}
this.stageObjectList[sp].push(aStageObject);
+ this.stageObjectLinearList.push(aStageObject);
if(isGlobalObject){
this.globalStageObjectList.push(aStageObject);
}
removeObjectFromArray(this.stageObjectList, sp);
}
}
+ removeObjectFromArray(this.stageObjectLinearList, aStageObject);
//globalStageObjectList\82©\82ç\8dí\8f\9c\81B\91¶\8dÝ\82µ\82È\82¢\8fê\8d\87\82Í\89½\82à\8bN\82«\82È\82¢\82Ì\82Å\82±\82ê\82Å\91å\8fä\95v
removeObjectFromArray(this.globalStageObjectList, aStageObject);
},
this.image0 = img;
//画像はなし
this.image = null;
- this.phantomFlag = 0;
this.debugMode = true;
+
+ this.isPhantom = true;
}.extend(BlockClass, {
- judgeCollideRange: function(x1, y1, x2, y2, obj){
- //objは範囲の対象となるオブジェクトのインスタンス。省略可能
- // 1 - - +
- // | |
- // | |
- // + - - 2
- var retv = BlockClass.prototype.judgeCollideRange.apply(this, arguments);
- if(retv){
- var cd = this.judgeCollideRange_getDirection(x1, y1, x2, y2);
- if(this.phantomFlag || (cd & CollideTop)){
- //上から当たった場合はなかったことにする
- retv = false;
- this.phantomFlag = 2;
- } else if(obj == this.ownerStage.userControlledCharacter && (obj.origin.y >= this.origin.y + this.size.y - 1)){
- //下から当たっていたら画像を表示させて、さらにこの関数をベースクラスのものに戻す。
- this.image = this.image0;
- this.judgeCollideRange = BlockClass.prototype.judgeCollideRange;
- this.debugDraw = BlockClass.prototype.debugDraw;
- } else{
- retv = false;
- }
- } else{
- if(obj == this.ownerStage.userControlledCharacter){
- if(this.phantomFlag > 0){
- this.phantomFlag--;
- }
- }
+ tick : function()
+ {
+ this.checkCollidingDirection();
+ if((this.collidingDirection & CollideLeft) && !(this.collidingDirection & CollideBody) && !(this.collidingDirection & CollideTop)){
+ //左下から当たっていたら画像を表示させて、さらにこの関数をベースクラスのものに戻す。
+ this.isPhantom = false;
+ this.image = this.image0;
+ this.judgeCollideRange = BlockClass.prototype.judgeCollideRange;
+ this.debugDraw = BlockClass.prototype.debugDraw;
}
- return retv;
},
+
debugDraw: function(x, y){
//衝突マップに描画
this.ownerStage.collisionMapContext.save();
tick: function(){
},
-
- //\83u\83\8d\83b\83N\82Ì\93\96\82½\82è\94»\92è\97Ì\88æ\82ð\95Ï\8dX\82·\82é\82½\82ß\82É\82Í\82±\82Ì\8aÖ\90\94\82ð\83I\81[\83o\81[\83\89\83C\83h\82·\82é
- //\88ø\90\94\82É\82Í\81A\93\96\82½\82è\82ð\8am\82©\82ß\82é\97v\91f\82Ì\93\96\82½\82è\94»\92è\97Ì\88æ\82Ì 1:\8d¶\8fã\8b÷ 2: \89E\89º\8b÷\82Ì\8dÀ\95W\82ð\8ew\92è
- //MovableStageObject.isCollided\82©\82ç\8cÄ\82Î\82ê\82é
- judgeCollideRange: function(x1, y1, x2, y2){
- return x2 >= this.origin.x && x1 < this.origin.x + this.size.x && y2 >= this.origin.y && y1 < this.origin.y + this.size.y;
- },
-
itemAttacked : function(obj, obj_x, obj_y){
//\82±\82Ì\8f\88\97\9d\82ð\8eq\83N\83\89\83X\82Å\8fã\8f\91\82«\82µ\82Ä\83A\83C\83e\83\80\82Ì\93®\8dì\82ð\92è\8b`\82·\82é
//obj : \82±\82Ì\83A\83C\83e\83\80\82É\90G\82Á\82½\90l(MainCharacter\82È\82Ç)
} else{
this.movingSpeed.x = 0;
}
-
//\8fd\97Í
this.movingSpeed.y += this.gravity / this.ownerStage.manager.tickPerSecond;
-
- //\89^\93®\8f\88\97\9d (collideFlag\82Í\8fÕ\93Ë\82µ\82½\8dÛ\81A\82»\82Ì\95û\8cü(\95¡\90\94\89Â)\82ð\8e¦\82·\83t\83\89\83O\82Å\82 \82é\81BOperatedCharacterClass\82Å\83W\83\83\83\93\83v\94\93®\8e\9e\82Ì\90Ú\92n\8am\94F\82È\82Ç\82É\8eg\82í\82ê\82é)
+ //\89^\93®\8f\88\97\9d
this.moveTo(
this.origin.x + (this.movingSpeed.x / this.ownerStage.manager.tickPerSecond),
this.origin.y + (this.movingSpeed.y / this.ownerStage.manager.tickPerSecond)
);
+ //\8eæ\93¾
+ this.checkCollidingDirection();
//\8fÕ\93Ë\8e\9e\82Ì\89^\93®\83G\83l\83\8b\83M\81[\8fÁ\96Å\90Ý\92è
//if((this.collidingDirection & CollideRight) != 0 && this.movingSpeed.x > 0) this.movingSpeed.x = 0; //\89E\95û\8cü\82É\8fÕ\93Ë
canMoveTo: function(x, y){
//\82·\82×\82Ä\82Ì\83I\83u\83W\83F\83N\83g\82É\91Î\82µ\82Ä(x, y)\82É\82 \82é\82Æ\82«\82Ì\8e©\95ª\82Ì\8fÕ\93Ë\8fó\91Ô\82ð\92²\82×\82é\81B
var retv = false;
- for(var sp in this.ownerStage.stageObjectList){
- for(var i = 0; i < this.ownerStage.stageObjectList[sp].length; i++){
- var f = this.ownerStage.stageObjectList[sp][i];
- if(f !== this){
- //\8e©\95ª\82Å\82È\82¢
- if(f.isOverlappedWithLocatedObject(this, x, y)){
- //\8fÕ\93Ë\90æf\82Ì\8fÕ\93Ë\94Í\88Í\93à\82É\82¢\82é
- if(f.isPhantom){
- //\8fÕ\93Ë\90æf\82ª\8fÕ\93Ë\94»\92è\96³\8e\8b\82¾\82Á\82½\82ç\81A\8fÕ\93Ë\82Í\82µ\82È\82¢
- /*
- if(this.isItemCollector){
- //\8fÕ\93Ë\90æf\82ð\8eæ\93¾\82µ\82½\83A\83C\83e\83\80\82É\89Á\82¦\82é\81B
- for(var titem in items){
- //\95¡\90\94\92Ç\89Á\82Ì\96h\8e~
- if(titem == f){
- continue;
- }
+ var d = this.ownerStage.stageObjectLinearList;
+ for(var i = 0, i_max = d.length; i < i_max; i++){
+ var f = d[i];
+ if(f !== this){
+ //\8e©\95ª\82Å\82È\82¢
+ if(f.isOverlappedWithLocatedObject(this, x, y)){
+ //\8fÕ\93Ë\90æf\82Ì\8fÕ\93Ë\94Í\88Í\93à\82É\82¢\82é
+ if(f.isPhantom){
+ //\8fÕ\93Ë\90æf\82ª\8fÕ\93Ë\94»\92è\96³\8e\8b\82¾\82Á\82½\82ç\81A\8fÕ\93Ë\82Í\82µ\82È\82¢
+ /*
+ if(this.isItemCollector){
+ //\8fÕ\93Ë\90æf\82ð\8eæ\93¾\82µ\82½\83A\83C\83e\83\80\82É\89Á\82¦\82é\81B
+ for(var titem in items){
+ //\95¡\90\94\92Ç\89Á\82Ì\96h\8e~
+ if(titem == f){
+ continue;
}
- items.push(f);
}
- */
-
- } else{
- //\8fÕ\93Ë\82µ\82½
- retv = true;
- break;
+ items.push(f);
}
+ */
+
+ } else{
+ //\8fÕ\93Ë\82µ\82½
+ retv = true;
+ break;
}
}
}
- if(retv){
- break;
- }
}
-
return retv;
},
moveTo : function(x, y) {
//\8c»\8dÝ\82Ì\8dÀ\95W\82©\82ç(x,y)\82É\8cü\82¯\82Ä\81A\88Ú\93®\82Å\82«\82é\82¾\82¯\88Ú\93®\82·\82é\81B
//\8fÕ\93Ë\95û\8cü\83t\83\89\83O\82à\90Ý\92è\82·\82é\81B
- var sx = this.origin.x, sy = this.origin.y;
+ var sx = this.origin.x
+ var sy = this.origin.y;
var lx = x - sx
var ly = y - sy;
//\88Ú\93®\8b\97\97£\82ð\82Ç\82¿\82ç\82©\88ê\8e²\82Å\82Í\82©\82é
var ct = Math.max(Math.abs(lx), Math.abs(ly));
- //\82»\82ê\82ð\8aî\8f\80\82É\82µ\82½\88ê\92P\88Ê\93\96\82½\82è\82Ì\88Ú\93®\97Ê
- var dx = lx / ct;
- var dy = ly / ct;
+ if(ct < 2){
+ ct = 1
+ var dx = lx;
+ var dy = ly;
+ } else{
+ //\82»\82ê\82ð\8aî\8f\80\82É\82µ\82½\88ê\92P\88Ê\93\96\82½\82è\82Ì\88Ú\93®\97Ê
+ var dx = lx / ct;
+ var dy = ly / ct;
+ }
//\88Ú\93®\82µ\82È\82¢\8e²\82ª\82 \82é\82©\82Ç\82¤\82©\81i\8d\82\91¬\89»\81H\81j
var fx = (dx == 0);
var fy = (dy == 0);
//\8eÀ\8dÛ\82É\88Ú\93®\82·\82é\90æ\82Ì\8dÀ\95W
var ex = sx;
var ey = sy;
- //\8eæ\93¾\82µ\82½\83A\83C\83e\83\80\82Ì\83\8a\83X\83g
- //var gotItems = [];
+ //\92i\8d·\82ð\8fæ\82è\89z\82¦\82é\8cW\90\94
var c = Math.abs(this.caterpillar * dx);
+ //
if(!(fx && fy)){
for(var i = 0; i < ct; i++){
if(!fx && this.canMoveTo(ex + dx, ey)){
if(c != 0 && this.canMoveTo(ex + dx, ey - c)){
//\82»\82ê\82Å\82àx\8e²\82ª\8fÕ\93Ë\82µ\82½\82Ì\82Å\88Ú\93®\82ð\92â\8e~\82µ\83t\83\89\83O\82ð\83Z\83b\83g\82·\82é
fx = true;
- //collideDirection |= (dx > 0 ? 1 : 2);
} else{
//\8d\82\82³\82ð\95Ï\82¦\82ê\82Î\88Ú\93®\82Å\82«\82é\82Ì\82Å\8d\82\82³\82ð\95Ï\82¦\82Ä\8cp\91±\82·\82é
ey -= c;
if(!fy && this.canMoveTo(ex, ey + dy)){
//y\8e²\82ª\8fÕ\93Ë\82µ\82½\82Ì\82Å\88Ú\93®\82ð\92â\8e~\82µ\83t\83\89\83O\82ð\83Z\83b\83g\82·\82é
fy = true;
- //collideDirection |= (dy > 0 ? 4 : 8);
}
if(!fx){
ex += dx;
this.origin.x = ex;
this.origin.y = ey;
- //\8fÕ\93Ë\95û\8cü\94»\92è
- this.checkCollidingDirection();
-
/*
for(var i in gotItems){
var item = gotItems[i];
// \92Ê\8fí\8d¶\82É\90i\82Þ\82Æ\82«\82É\8cÄ\82Î\82ê\82é\81B\8d¶\83L\81[\82ð\89\9f\82µ\82Ä\82¢\82é\8aÔ\92\86tick\96\88\82É\8cÄ\82Î\82ê\82é
goLeft : function(){
this.imageState = 0;
- this.direction = 0;
this.movingSpeed.x += ((-this.movingVelocity) - this.movingSpeed.x) / 3;
},
//\92Ê\8fí\89E\82É\90i\82Þ\82Æ\82«\82É\8cÄ\82Î\82ê\82é\81B
goRight : function(){
this.imageState = 0;
- this.direction = 1;
this.movingSpeed.x += (this.movingVelocity - this.movingSpeed.x) / 3;
},
//\8dÀ\95W p1,p2 \82ð\8c\8b\82Ô\90ü\95ª\82Æ\8dÀ\95W q1,q2 \82ð\8c\8b\82Ô\90ü\95ª\82ª\8cð\8d·\82µ\82Ä\82¢\82é\82©\82ð\92²\82×\82é
//\82½\82¾\82µ\81A\90ü\95ª\82ª\8fd\82È\82Á\82Ä\82¢\82é\8fê\8d\87(3\93_,4\93_\82ª\88ê\92¼\90ü\8fã\82É\82 \82é)\81A\81u\8cð\8d·\82µ\82Ä\82¢\82é\81v\81A\82Æ\94»\92è\82µ\82Ü\82·\81B
crossLineJudge: function(p1x, p1y, p2x, p2y, q1x, q1y, q2x, q2y){
- if(p1x >= p2x)
- {
+ if(p1x >= p2x){
if((p1x < q1x && p1x < q2x) || (p2x > q1x && p2x > q2x)){
return false;
}
return false;
}
}
- if(p1y >= p2y)
- {
+ if(p1y >= p2y){
if((p1y < q1y && p1y < q2y) || (p2y > q1y && p2y > q2y)){
return false;
}
this.extObjectId = 0;
this.isPhantom = false;
- this.collidingDirectionCheckEnabled = false;
//\93\96\82½\82è\94»\92è\82Ì\83}\81[\83W\83\93\82Ì\8ew\92è
this.collisionMargin = new OffsetBox(0, 0, 0, 0);
this.collidingRange = 4;
- //\8fÕ\93Ë\95û\8cü\83t\83\89\83O\82Í\81A\88Ú\93®\82·\82é\83I\83u\83W\83F\83N\83g\82È\82ç\88Ú\93®\8e\9e\82É\81A\82»\82ê\88È\8aO\82Ì\83I\83u\83W\83F\83N\83g\82ÅcollidingDirectionCheckEnabled==true\82Ì\82à\82Ì\82Í\81A\83X\83e\81[\83W\91¤\82Å\92è\8aú\93I\82É\83`\83F\83b\83N\82ð\82©\82¯\82Ä\90Ý\92è\82µ\82Ü\82·\81B
+ //\8fÕ\93Ë\95û\8cü\83t\83\89\83O\82Í\81A\88Ú\93®\82·\82é\83I\83u\83W\83F\83N\83g\82È\82ç\88Ú\93®\8e\9e\82É\92è\8aú\93I\82É\83`\83F\83b\83N\82ð\82©\82¯\82Ä\90Ý\92è\82µ\82Ü\82·\81B
+ //\82»\82ê\88È\8aO\82Ì\8fê\8d\87\82Í\94C\88Ó\82Ì\83^\83C\83~\83\93\83O\82ÅcheckCollidingDirection\82ð\8cÄ\82Ñ\8fo\82·\82×\82µ\81B
this.collidingDirection = 0;
+ this.collidedObjects = new Array();
}
StageObject.prototype = {
className:"StageObject",
//\8eÀ\8dÛ\82Ì\95`\89æ\82Ì\82Ý\82ð\8ds\82¤\81B\8cv\8eZ\82Ítick\82Å\8ds\82¤\81B
//\83\86\81[\83U\81[\96¼\82ð\95\\8e¦
if(this.ownerUID != 0){
- this.ownerStage.mainContext.save();
- this.ownerStage.mainContext.fillStyle = "rgba(255,255,255,0.5)";
- this.ownerStage.mainContext.strokeStyle = "rgba(0, 0, 0, 1)";
- this.ownerStage.mainContext.font = "normal 12px sans-serif";
- drawText(this.ownerStage.mainContext, this.ownerStage.manager.userManager.getUserNameByUID(this.ownerUID), x, y - 20);
- this.ownerStage.mainContext.restore();
+ var c = this.ownerStage.mainContext;
+ c.save();
+ c.fillStyle = "rgba(255,255,255,0.5)";
+ c.strokeStyle = "rgba(0, 0, 0, 1)";
+ c.font = "normal 12px sans-serif";
+ drawText(c, this.ownerStage.manager.userManager.getUserNameByUID(this.ownerUID), x, y - 20);
+ c.restore();
}
},
debugDraw: function(x, y){
//\8fÕ\93Ë\83}\83b\83v\82É\95`\89æ
- this.ownerStage.collisionMapContext.save();
- this.ownerStage.collisionMapContext.beginPath();
- this.ownerStage.collisionMapContext.moveTo(x + this.collisionMargin.left, y + this.collisionMargin.top);
- this.ownerStage.collisionMapContext.lineTo(x + this.collisionMargin.left, y + this.size.y - this.collisionMargin.bottom);
- this.ownerStage.collisionMapContext.lineTo(x + this.size.x - this.collisionMargin.right, y + this.size.y - this.collisionMargin.bottom);
- this.ownerStage.collisionMapContext.lineTo(x + this.size.x - this.collisionMargin.right, y + this.collisionMargin.top);
- this.ownerStage.collisionMapContext.closePath();
- this.ownerStage.collisionMapContext.stroke();
- this.ownerStage.collisionMapContext.restore();
+ var c = this.ownerStage.collisionMapContext;
+ c.save();
+ c.beginPath();
+ c.moveTo(x + this.collisionMargin.left, y + this.collisionMargin.top);
+ c.lineTo(x + this.collisionMargin.left, y + this.size.y - this.collisionMargin.bottom);
+ c.lineTo(x + this.size.x - this.collisionMargin.right, y + this.size.y - this.collisionMargin.bottom);
+ c.lineTo(x + this.size.x - this.collisionMargin.right, y + this.collisionMargin.top);
+ c.closePath();
+ c.stroke();
+ c.restore();
},
bindAttribute: function(attr)
{
//\83I\83u\83W\83F\83N\83g\96{\91Ì\95\94\95ª\82É\8fd\82È\82é\82©\82Ç\82¤\82©\82ð\92²\82×\82é
//\82±\82Ì\8aÖ\90\94\82ªfalse\82ð\95Ô\82µ\82½\8e\9e\82Ì\88ø\90\94\82Ì\94Í\88Í\82Ö\82Í\83I\83u\83W\83F\83N\83g\82ª\88Ú\93®\82Å\82«\82é\81B
//true\82©\82ÂisPhantom==false\82Ì\8e\9e\82Í\8fÕ\93Ë\82·\82é\81B
- return (x2 > (this.origin.x + this.collisionMargin.left)) &&
- (x1 <= (this.origin.x + this.size.x - this.collisionMargin.right)) &&
- (y2 > (this.origin.y + this.collisionMargin.top)) &&
- (y1 <= (this.origin.y + this.size.y - this.collisionMargin.bottom));
+ var o = this.origin;
+ var c = this.collisionMargin;
+ var s = this.size;
+ return (x2 > (o.x + c.left)) && (x1 <= (o.x + s.x - c.right)) && (y2 > (o.y + c.top)) && (y1 <= (o.y + s.y - c.bottom));
},
isOverlappedWithLocatedObject: function(obj, x, y){
//(x, y)\82Éobj\82ª\82 \82é\82Æ\82«\82Ì\83I\83u\83W\83F\83N\83g\96{\91Ì\94Í\88Í\82É\81A\8e©\95ª\82Ì\83I\83u\83W\83F\83N\83g\96{\91Ì\95\94\95ª\82É\8fd\82È\82é\82©\82Ç\82¤\82©\82ð\92²\82×\82é
checkCollidingDirection: function(){
//\8fÕ\93Ë\95û\8cü\82ð\92²\82×\82é\81B
this.collidingDirection = 0;
- for(var sp in this.ownerStage.stageObjectList){
- for(var i = 0; i < this.ownerStage.stageObjectList[sp].length; i++){
- var obj = this.ownerStage.stageObjectList[sp][i];
- // CollisonBody
- var cbx0 = this.origin.x + this.collisionMargin.left;
- var cby0 = this.origin.y + this.collisionMargin.top;
- var cbx1 = this.origin.x + this.size.x - 1 - this.collisionMargin.right;
- var cby1 = this.origin.y + this.size.y - 1 - this.collisionMargin.bottom;
- // CollisionFrame\94Í\88Í\93à\82©\8am\94F
- if(obj !== this && !obj.isPhantom && obj.isOverlappedWith(
- cbx0 - this.collidingRange,
- cby0 - this.collidingRange,
- cbx1 + this.collidingRange,
- cby1 + this.collidingRange)){
- //\8fÕ\93Ë\82Ì\89Â\94\\90«\82ª\82 \82é\82Ì\82Å\8am\94F
- if(obj.isOverlappedWith(cbx0, cby0, cbx1, cby1)){
- //body
- this.collidingDirection |= CollideBody;
- }
- if(obj.isOverlappedWith(cbx0, cby0 - this.collidingRange, cbx1, cby0 - 1)){
- //top
- this.collidingDirection |= CollideTop;
- }
- if(obj.isOverlappedWith(cbx0, cby1 + 1, cbx1, cby1 + this.collidingRange)){
- //bottom
- this.collidingDirection |= CollideBottom;
- }
- if(obj.isOverlappedWith(cbx0 - this.collidingRange, cby0, cbx0 - 1, cby1)){
- //left
- this.collidingDirection |= CollideLeft;
- }
- if(obj.isOverlappedWith(cbx1 + 1, cby0, cbx1 + this.collidingRange, cby1)){
- //right
- this.collidingDirection |= CollideRight;
- }
+ this.collidedObjects = new Array();
+ var d = this.ownerStage.stageObjectLinearList;
+ for(var i = 0, i_max = d.length; i < i_max; i++){
+ var obj = d[i];
+ var c = this.collisionMargin;
+ var r = this.collidingRange;
+ // CollisonBody
+ var cbx0 = this.origin.x + c.left;
+ var cby0 = this.origin.y + c.top;
+ var cbx1 = this.origin.x + this.size.x - 1 - c.right;
+ var cby1 = this.origin.y + this.size.y - 1 - c.bottom;
+ // CollisionFrame\94Í\88Í\93à\82©\8am\94F
+ if(obj.isOverlappedWith(cbx0 - r, cby0 - r, cbx1 + r, cby1 + r) && obj !== this && !obj.isPhantom){
+ //\8fÕ\93Ë\82Ì\89Â\94\\90«\82ª\82 \82é\82Ì\82Å\8am\94F
+ if(obj.isOverlappedWith(cbx0, cby0, cbx1, cby1)){
+ //body
+ this.collidingDirection |= CollideBody;
+ }
+ if(obj.isOverlappedWith(cbx0 + 1, cby0 - r, cbx1, cby0 - 1)){
+ //top
+ this.collidingDirection |= CollideTop;
+ }
+ if(obj.isOverlappedWith(cbx0, cby1 + 1, cbx1, cby1 + r)){
+ //bottom
+ this.collidingDirection |= CollideBottom;
+ }
+ if(obj.isOverlappedWith(cbx0 - r, cby0, cbx0 - 1, cby1)){
+ //left
+ this.collidingDirection |= CollideLeft;
+ }
+ if(obj.isOverlappedWith(cbx1 + 1, cby0, cbx1 + r, cby1)){
+ //right
+ this.collidingDirection |= CollideRight;
}
}
}
- return;
},
};