私は自分のゲームの衝突システムに取り組んでいます。これはトップダウンシューターであり、キャラクターは常に静的です-そして他のすべて(マップ/レベル)は彼の周りを動きます。
キャラクターも回転するので、常にマウスの位置を向いています。
そのことを念頭に置いて、キャラクターの回転を考慮する必要がある衝突システムに頭を悩ませることはできないようですよね?
基本的に、指定されたオブジェクトがキャラクター/スプライトに「触れている」かどうかを確認したいだけです。私が使用している数学が正しいかどうかはわかりません。
これは私の衝突検出です(すべての更新と呼ばれます):
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);
誰かがここで私を助けてくれたら幸いです:)ありがとう!