Archived
4
1
Fork 0

More collision debugging...

This commit is contained in:
Simon Giesel 2017-06-19 18:21:58 +02:00
parent 3504379e5c
commit c2c500e6b8

View file

@ -38,11 +38,11 @@ var _COLOR_GRASS = '#388E3C',
ctx = $('canvas')[0].getContext('2d') ctx = $('canvas')[0].getContext('2d')
staticctx = $('canvas')[1].getContext('2d') staticctx = $('canvas')[1].getContext('2d')
init() init()
drawBorder(23, 10, 500, 5) drawBorder(23+5, 10, 500-10, 5)
drawBorder(23, 10, 5, 500) drawBorder(23, 10+5, 5, 500-10)
drawBorder(23+200, 10+70, 50, 50) drawBorder(23+200, 10+70, 50, 50)
drawBorder(23, 500+10-5, 500, 5) drawBorder(23+5, 500+10-5, 500-10, 5)
drawBorder(500+23-5, 10, 5, 500) drawBorder(500+23-5, 10+5, 5, 500-10)
drawHole(432, 366) drawHole(432, 366)
setInterval(animLoop, 10) setInterval(animLoop, 10)
@ -101,10 +101,20 @@ var _COLOR_GRASS = '#388E3C',
borders.push(new Border(x, y, width, height)) borders.push(new Border(x, y, width, height))
} }
function debugBorder(border) {
drawDebugBorder(border)
setTimeout(function(){drawDebugBorderUndo(border)}, 2*1000)
}
function drawDebugBorder(border) { function drawDebugBorder(border) {
staticctx.fillStyle = 'red' staticctx.fillStyle = 'red'
staticctx.fillRect(border.x, border.y, border.width, border.height) staticctx.fillRect(border.x, border.y, border.width, border.height)
} }
function drawDebugBorderUndo(border) {
staticctx.fillStyle = _COLOR_BORDER
staticctx.fillRect(border.x, border.y, border.width, border.height)
}
function drawHole(x, y) { function drawHole(x, y) {
staticctx.beginPath() staticctx.beginPath()
@ -141,6 +151,7 @@ var _COLOR_GRASS = '#388E3C',
} }
function collide() { function collide() {
var coll = [false, false, false, false] //left, top, right, bottom
borders.forEach(function(el){ borders.forEach(function(el){
// if(bX >= el.x && bX <= el.x+el.width && bY >= el.y && bY <= el.y+el.height){ // if(bX >= el.x && bX <= el.x+el.width && bY >= el.y && bY <= el.y+el.height){
// drawDebugBorder(el) // drawDebugBorder(el)
@ -162,22 +173,47 @@ var _COLOR_GRASS = '#388E3C',
var height = (el.height+bWidth)/2 var height = (el.height+bWidth)/2
var crossWidth = width*dy; var crossWidth = width*dy;
var crossHeight = height*dx; var crossHeight = height*dx;
var collision = 'none';
if(Math.abs(dx)<=width && Math.abs(dy)<=height){ if(Math.abs(dx)<=width && Math.abs(dy)<=height){
debugBorder(el)
if(crossWidth<crossHeight){ if(crossWidth<crossHeight){
collision=(crossWidth<(-crossHeight))?'bottom':'left' if (crossWidth<(-crossHeight))
coll[3] = true
else
coll[0] = true
} else { } else {
collision=(crossWidth<(-crossHeight))?'right':'top' if (crossWidth<(-crossHeight))
coll[2] = true
else
coll[1] = true
} }
} }
if(collision != 'none') console.log(collision);
switch (collision) {
case 'bottom':
case 'top': bVec = [bVec[0], -bVec[1]]; break
case 'left':
case 'right': bVec = [-bVec[0], bVec[1]]; break
}
}) })
if($.inArray(true, coll) > -1)
console.log(coll);
// if(coll[0] || coll[2])
// bVec = [-bVec[0], bVec[1]]
// if(coll[1] || coll[3])
// bVec = [bVec[0], -bVec[1]]
if(coll[0]){
console.log('left < 0');
bVec = [Math.abs(bVec[0]), bVec[1]]
}
if(coll[1]){
console.log('top < 0');
bVec = [bVec[0], Math.abs(bVec[1])]
}
if(coll[2]){
console.log('right > 0');
bVec = [-Math.abs(bVec[0]), bVec[1]]
}
if(coll[3]){
console.log('bottom > 0');
bVec = [bVec[0], -Math.abs(bVec[1])]
}
if($.inArray(true, coll) > -1)
console.log(bVec);
} }
/** CLASSES **/ /** CLASSES **/