我MoveEntity()
在 2D 平台游戏(如 PacMan)中的方法存在问题。当玩家在交叉路口时,我想做:
e.IsAtIntersection = true;
然后调用UpdateDirection()
.
但他并没有停下来,而是穿过小路,不管有墙还是空路。该程序永远不会到达上述行。会员留下false
。也许有可能以更简单的方式编写它,或者我犯了一个简单的错误。这是完整的方法:
private void MoveEntity(Entity e)
{
int angle = 0;
if (e.currentDirection == Direction.RIGHT) angle = 0;
else if (e.currentDirection == Direction.DOWN) angle = 90;
else if (e.currentDirection == Direction.LEFT) angle = 180;
else if (e.currentDirection == Direction.UP) angle = 270;
var scalex = Math.Round(Math.Cos(angle * (Math.PI / 180.0)));
var scaley = Math.Round(Math.Sin(angle * (Math.PI / 180.0)));
var velocityx = (float)(e.Speed * scalex);
var velocityy = (float)(e.Speed * scaley);
Sprite sp = sprites[e.Name];
Vector2f v = new Vector2f(sp.Position.X + velocityx, sp.Position.Y + velocityy);
sp.Position = v;
var eCenterX = sp.Position.X + sp.TextureRect.Width / 2;
var eCenterY = sp.Position.Y + sp.TextureRect.Height / 2;
var tileY = Math.Floor((eCenterY) / TILEHEIGHT);
var tileX = Math.Floor((eCenterX) / TILEWIDTH);
var tileXpos = TILEWIDTH * Math.Floor(tileX + 1);
var tileYpos = TILEHEIGHT * Math.Floor(tileY + 1);
e.X = (int)tileY;
e.Y = (int)tileX;
if (eCenterX == tileXpos && eCenterY == tileYpos)
e.IsAtIntersection = true;
else
e.IsAtIntersection = false;
}