【发布时间】:2018-10-20 09:43:29
【问题描述】:
目前在我的游戏中,我想尝试将我的对象同时移向 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 是 ball 的对象,它只是具有移动 x 和 y 功能。
在单独的 begin,end 语句中,我正在绘制其余所有对象-
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 轴移动,但由于相机处于恒定位置,但障碍物不在相机内,如何实现相机绘图中的对象与不在相机中的对象之间的交集在这种情况下在相机中 求大家帮忙,我卡在这里很久了...
【问题讨论】: