我正在开发一个自上而下的射击游戏,基本上角色从屏幕中间开始,在一个矩形(安全区)内。角色不是静止的,场景是静止的。他可以在安全区内四处走动。角色一走出这个区域,静态就会切换……角色是静止的,场景围绕着他移动。
唯一的问题是我不能走回安全区,让我的静力学再次切换。
所以我永远被困在这个区域之外。我所做的只是检查我的角色位置是否在某个值(即矩形)内,如果他不在 - 那么我的 KeyControls 会影响地图,而不是角色。
所以这是我的边界(安全区)检查器:
//Walking Window Boundaries
var boundarySizeX = 400;
var boundarySizeY = 200;
ctxWalkBoundary.fillStyle = "grey";
ctxWalkBoundary.fillRect(gameWidth/2 - boundarySizeX/2, gameHeight/2 - boundarySizeY/2, boundarySizeX, boundarySizeY);
ctxWalkBoundary.clearRect((gameWidth/2 - boundarySizeX/2) + 2, (gameHeight/2 - boundarySizeY/2) + 2, (boundarySizeX) - 4, (boundarySizeY) -4 );
var paddingLeft = (gameWidth - boundarySizeX) / 2;
var paddingRight = gameWidth - ((gameWidth - boundarySizeX) / 2) - this.charWidth;
var paddingTop = (gameHeight - boundarySizeY) / 2;
var paddingBottom = gameHeight - ((gameHeight - boundarySizeY) / 2) - this.charHeight;
var paddingY = (gameHeight - boundarySizeY) / 2;
if(this.drawX > paddingLeft && this.drawX < paddingRight && this.drawY > paddingTop && this.drawY < paddingBottom){
inBoundary = true;
}
else{
inBoundary = false;
console.debug("Out Of Boundary!");
}
这是我的 KeyChecker:
//UP
if(this.isUpKey){
//Character movement
if(inBoundary){
this.drawX = this.drawX + this.speed * Math.cos((this.characterRotation));
this.drawY = this.drawY + this.speed * Math.sin((this.characterRotation));
}
else{
mapPositionX = mapPositionX - this.speed * Math.cos((this.characterRotation));
mapPositionY = mapPositionY - this.speed * Math.sin((this.characterRotation));
}
我的角色总是面对我的鼠标(旋转)。因此,每次用户按下 W 或 Up 时,角色总是会走向鼠标位置。
有什么想法可以让我回到该区域吗?
- - - 更新 - - -
我想我需要以某种方式检查我是否仍然面向安全区之外 - 如果不是,则反转他的静态。