首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相机抖动矩阵相机

相机抖动矩阵相机
EN

Stack Overflow用户
提问于 2014-03-18 13:53:43
回答 2查看 74关注 0票数 0

我使用一个转换矩阵来移动屏幕,但是当玩家与一个物体碰撞时,玩家会抖动,好像它想同时在两个位置。看起来速度要继续下降,而块体却在向上推,我该如何修复它呢?

视频:这里

摄像机类:

代码语言:javascript
复制
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语句来解决这个问题,但这并没有帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-19 14:02:56

我解决了。这是关于操作顺序的。只需移动方法camera.thing(),如下所示:

代码语言:javascript
复制
            // 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);

说明:在所有碰撞结束后,你必须设置摄像机的位置。

票数 1
EN

Stack Overflow用户

发布于 2014-03-19 07:43:06

当你站在某个物体上的时候,我能看到的是速度的变化。因此,请尝试将摄像机位置转换为整数。或者,如果速度接近于0,则速度精确到0。

代码语言:javascript
复制
 cameraBounds.X = cInt(cameraBounds.X)
 cameraBounds.y = cInt(cameraBounds.y)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22481493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档