我正在为我的游戏开发碰撞系统;这是一个自上而下的射击游戏,角色始终是静态的 - 而其他一切(地图/关卡)都在他周围移动。
角色也会旋转,因此它始终面向鼠标位置。
考虑到这一点,我似乎无法理解我的碰撞系统,这需要考虑角色旋转,对吧?
我基本上只是想检查给定的对象是否完全“触摸”了我的角色/精灵。我不太确定我使用的数学是否正确。
这是我的碰撞检测(称为每次更新):
function detectCollisions(){
//Detect for game props
if(collides(Map, TestProp)){
console.debug("Touching...");
}
}
function collides(a, b){
//ctxMap.setTransform(1, 0, 0, 1, -Map.x + gameWidth/2, -Map.y + gameHeight/2);
//var transX = -Map.x + gameWidth/2;
//var transY = -Map.y + gameHeight/2;
//need to take player rotation into account too!
//console.debug(a.x + " " + b.x + " " + b.width + " " + Player.width); //A Width
/*return a.x < b.x + b.width && a.x + Player.width > b.x &&
a.y < b.y + b.height && a.y + Player.height > b.y;*/
var xOffset = Math.cos(Player.characterRotation); //+ Player.width;
var yOffset = Math.sin(Player.characterRotation); //+ Player.height;
return Map.x + xOffset > b.x && Map.x + xOffset < b.x + b.width &&
Map.y + yOffset > b.y && Map.y + yOffset < b.y + b.height;
}
另外,不确定这是否相关,但这是用于移动我的地图画布的转换:
ctxMap.setTransform(1, 0, 0, 1, -Map.x + gameWidth/2, -Map.y + gameHeight/2);
如果有人在这里帮助我,将不胜感激:) 谢谢!