我使用一个转换矩阵来移动屏幕,但是当玩家与一个物体碰撞时,玩家会抖动,好像它想同时在两个位置。看起来速度要继续下降,而块体却在向上推,我该如何修复它呢?
视频:这里
摄像机类:
class Camera
{
public Vector2 Position;
Viewport viewPort;
public Vector2 cameraBounds;
public float wasGround;
public Matrix Transform()
{
var translationMatrix = Matrix.CreateTranslation(new Vector3(-Position.X, -Position.Y, 0));
return translationMatrix;
}
public Player thing(Player player)
{
cameraBounds.X = player.Position.X - Game1.offset.X;
if (cameraBounds.X > 0)
Position.X = player.Position.X - Game1.offset.X;
else
Position.X = 0;
//Problem
cameraBounds.Y = player.Position.Y - Game1.offset.Y;
if (cameraBounds.Y > 0)
{
Position.Y = player.Position.Y - Game1.offset.Y;
if (player.goingUp == false && (wasGround != player.ground))
Position.Y = player.ground - Game1.offset.Y;
wasGround = player.ground;
}
else
Position.Y = 0;
return player;
}
public Camera(Viewport viewport)
{
viewPort = viewport;
}
}我试图通过添加player goingUp和ground语句来解决这个问题,但这并没有帮助。
发布于 2014-03-19 14:02:56
我解决了。这是关于操作顺序的。只需移动方法camera.thing(),如下所示:
// TODO: Add your update logic here
HandleInput(Keyboard.GetState());
player.Update(gameTime);
// delete from here
Time += (float)gameTime.ElapsedGameTime.TotalSeconds;
foreach (Block b in Blocks)
{
player = b.BlockCollision(player);
}
// place here
camera.thing(player);说明:在所有碰撞结束后,你必须设置摄像机的位置。
发布于 2014-03-19 07:43:06
当你站在某个物体上的时候,我能看到的是速度的变化。因此,请尝试将摄像机位置转换为整数。或者,如果速度接近于0,则速度精确到0。
cameraBounds.X = cInt(cameraBounds.X)
cameraBounds.y = cInt(cameraBounds.y)https://stackoverflow.com/questions/22481493
复制相似问题