只是为那些不想阅读一大堆文字的人添加这个,至少阅读这个并查看图片以理解我的问题;
我在“玩家”和“对象”之间设置了碰撞,因此当“玩家”击中“对象”的“左侧”时,“玩家”被放在“对象”的“左侧”。(这就是我要的)。但我希望玩家能够击中对象的任何一侧(“顶部”、“左侧”、“右侧”、“底部”)并适当放置。
所以看上面的图片,基本上我试图在黑色方块和其他物体之间产生碰撞。黑色方块是“玩家”对象,灰色方块是编号的“墙壁”对象,红色方块是“下一级”对象。我已经完成了这个,但它有点混乱,当涉及到移动墙壁对象时,玩家碰撞不再像我想要的那样工作。所以无论如何这里是我的“墙”代码:
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;
}
我再次完成了“玩家”和“墙”之间的碰撞,但只是通过为每个“墙”创建一个单独的函数,当我想在不同的地方绘制“墙”时,这不起作用。如果这似乎需要阅读很多内容,我深表歉意,我试图只包含相关代码。非常感谢任何帮助/建议。