たくさんのテキストを読みたくない人のためにこれを追加するだけで、少なくともこれを読んで写真を見て私の質問を理解してください。
「プレイヤー」と「オブジェクト」の間に衝突を設定したので、「プレイヤー」が「オブジェクト」の「左」に当たると、「プレイヤー」は「オブジェクト」の「左」に置かれます。(これは私が欲しいものです)。しかし、プレイヤーがオブジェクトの任意の側面 (「上」、「左」、「右」、「下」) を叩いて適切に配置できるようにしたいと考えています。
上の画像を見ると、基本的には黒い四角と残りのオブジェクトの間に衝突を作成しようとしています。黒い四角は「プレイヤー」オブジェクト、灰色の四角は番号付きの「壁」オブジェクト、赤い四角は「次のレベル」のオブジェクトです。私はこれを達成しましたが、それはちょっと厄介で、壁オブジェクトを動かすことになると、プレイヤーの衝突も私が望むように機能しなくなりました. とにかく、ここに私の「壁」コードがあります:
var canvasWalls1 = document.getElementById('canvasWalls');
var ctxWalls1 = canvasWalls.getContext('2d');
var walls1 = new Walls1();
var imgSprite = new Image();
imgSprite.src = 'sprite.png';
imgSprite.addEventListener('load',init,false);
WallLeft.prototype.draw = function (){
ctxWalls1.drawImage(imgSprite,this.srcX,this.srcY,this.width,this.height,this.drawX,this.drawY,this.width,this.height);
this.checkHitPlayer();
};
WallLeft.prototype.checkHitPlayer = function() {
if (this.drawX > player1.drawX &&
this.drawX <= player1.drawX + player1.width &&
this.drawY >= player1.drawY &&
this.drawY < player1.drawY + player1.height) {
player1.isUpKey = false;
player1.isDownKey = false;
player1.isRightKey = false;
player1.isLeftKey = false;
player1.drawX = this.drawX - player1.width - 0.05;
player1.drawY = this.drawY - 0.05; }
};
wall1、2、3などに同じコードをコピーしたところです。誰かがより良い方法を提案できる場合は、これを行うより良い方法があると確信していますか? 同じスプライトを 2 つの異なる場所に描画しようとしましたが、これを適切に実現する方法がわかりません。「壁」オブジェクトが異なる主な理由は、「プレイヤー」オブジェクトが「壁」オブジェクトと衝突する場所に応じて、異なる位置に「プレイヤー」オブジェクトを描画する必要があるためです。プレーヤーが左から飛んできた場合、player1.drawX = walls1.drawX - player width
. でもプレイヤーが上から飛んでくると、player1.drawY = walls1.drawY + player1.height
. 「壁」オブジェクトですべての衝突を発生させる必要がある理由は、「プレイヤー」オブジェクトが「フィニッシュ」に達するたびにすべての「壁」オブジェクトを再利用するためです。より良いシステムを知っていれば、私が持っているコリジョン システムを使い続けることができるかもしれません。とにかく、「プレイヤー」が「フィニッシュ」オブジェクトに当たったときに何が起こるかを次に示します。
Finish.prototype.checkHitPlayer = function() {
if (this.drawX >= player1.drawX &&
this.drawX <= player1.drawX + player1.width &&
this.drawY >= player1.drawY &&
this.drawY <= player1.drawY + player1.height) {
increaseLevel();
} };
function increaseLevel() {
Level+=1;
if (Level===2) {
drawlevel2(); }
function drawlevel2()
{
player1.drawX = 288;
player1.drawY = 160;
walls1.drawX = 448;
walls1.drawY = 160;
walls2.drawX = 416;
walls2.drawY = 320;
walls3.drawX = 192;
walls3.drawY = 288;
finish1.drawX = 224
finish1.drawY = 96;
}
繰り返しますが、「プレーヤー」と「壁」の間の衝突を達成しましたが、「壁」ごとに個別の関数を作成するだけで、「壁」を別の場所に描画したい場合には機能しません。読みにくいと思われる場合は申し訳ありませんが、関連するコードのみを含めようとしました。どんな助け/提案も大歓迎です。