c# - 需要有关单游戏屏幕分辨率和交集的帮助

标签 c# xna monogame xna-4.0

目前在我的游戏中我想尝试将我的对象同时移向 x 轴和 y 轴。因为我也想把它放在中心,所以我放了一个相机。这是我的相机代码-

 public class Camera
{
    public Matrix transform;
    public Viewport view;
    public Vector2 origin;
    Vector2 baseScreenSize = new Vector2(1136, 720);
    float horScaling ;
    float verScaling ;
    Vector3 screenScalingFactor ;
    public Camera(Viewport newView)
    {
        view = newView;
        horScaling = view.Width / baseScreenSize.X;
        verScaling = view.Height / baseScreenSize.Y;
        screenScalingFactor = new Vector3(horScaling, verScaling, 1);
    }

    public void update(GameTime gt, ball pl)
    {
        origin = new Vector2(pl.Position.X + (pl.ballRectangle.Width / 2) - 400, 0);
        transform = Matrix.CreateScale(1,1,0) *
            Matrix.CreateTranslation(new Vector3(-origin.X, -origin.Y, 0));
    }

}

像往常一样在 Game1.cs 文件中的 begin 语句中,我放了这个-

 spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, cm.transform*globalTransformation);
                ba.Draw(spriteBatch, Color.White);
                spriteBatch.End();

这里的ba是球的对象,它只是具有移动x和y的功能。

在单独的开始、结束语句中,我正在绘制其余的所有对象-

 spriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, null, null, globalTransformation);

                spriteBatch.Draw(mainMenu, new Vector2(0, 0), Color.White);
                spriteBatch.Draw(mainMenu1, new Vector2(450, 100), Color.White);
                spriteBatch.End();

这里已经应用全局转换来实现独立的屏幕分辨率(类似于 Camera.cs 中的代码)。

其余对象按预期工作,但相机对象和其余对象的交叉点未按预期工作。 我想这是由于分辨率独立性不适用于相机对象(我不确定)。我在搜索互联网后尝试了很多代码,但没有一个能按预期工作。 简单来说——我想克隆这个游戏—— https://play.google.com/store/apps/details?id=com.BitDimensions.BlockyJump

如果你看到主要玩家正在沿 x 和 y 轴移动,但由于相机处于恒定位置,但障碍物不在相机中,如何实现相机绘制中的对象与不在相机绘制中的对象之间的交集在这种情况下在相机中 请求大家的帮助,我被困在这里很久了......

最佳答案

从没想过这会这么简单......在整个互联网上搜索,在 他们说的大部分代码我们需要反转相机变换。 但事实并非如此。从一开始我就说我的问题是相机对象和非相机对象之间的交集,这是答案-

首先我们需要找到相机对象的位置以形成一个世界空间矩形

Vector2 hj = Vector2.Transform(ba.Position, cm.transform);
      Rectangle leftRectangleT1 =
                   new Rectangle((int)hj.X, (int)hj.Y, ba.tex.Width, ba.tex.Height);

这里ba是camera对象,我们需要像上面的代码一样将它转换为camera transform。

为了在像素相交的情况下获得 ba 的变换,这里是代码-

Matrix ballTransform = Matrix.CreateTranslation(new Vector3(hj.X, hj.Y, 0.0f));

就是这样,你有一个球形矩形,它是与现实世界对象(非相机对象)相交的相机对象

关于c# - 需要有关单游戏屏幕分辨率和交集的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904338/

相关文章:

c# - Blazor - 如何将属性应用于组件的父元素

c# - 找到两个法向量之间的 x,y,z 旋转

c# - Join 语句中的 Lambda where 条件

c# - 如何在 ASP.NET MVC3 中填充 ViewModel

audio - 2D碰撞和背景音乐XNA 3.1

c# - 将 WIndows Store MonoGame 应用程序转换为 Android

c# - 错误 - SpriteFont 未实现

c# - Monogame, Nez : Switching scenes, 打开菜单

c# - 未找到站点核心 IComputedIndex 字段类/未运行

c# - LibGDX/Java 或 XNA/C#