UPDATE

这个问题也在https://github.com/mono/MonoGame/issues/2492中讨论过

问题是如果应用程序仅允许以横向方向运行,而不是在使用纵向或两者时运行.

有一个以monogame编码的安卓游戏,我得到了一个设置为FullScreen = true的GraphicsDeviceManager.

我使用GraphicsDevice.Viewport.Height和GraphicsDevice.Viewport.Width来确定设备的分辨率.
这是非常好的,直到我得到三星更新,并不得不关闭FastDev.
最大的神秘问题:

当我使用pc进行调试时,视口的高度和宽度设置正确.但是当我在视口1-2次后拔掉并播放应用程序.Height变为设备宽度,并且viewport.Width成为设备高度,这完全使游戏无法播放.

很难找到解决方案,因为当我调试并将电缆从PC连接到设备时,这种情况永远不会发生.

任何人都有任何想法可能是什么?

我现在可以确认这是因为三星更新

我制作了世界上最简单的Android应用程序来测试它,只是得到一个带有背景图像“bg”的主机和一个spritefront打印出viewport.Width和viewport.Height.

这是代码:

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace TestRes
{
    /// <summary>
    /// This is the main type for your game
    /// </summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        SpriteFont font;
        Rectangle _mainFrame;
        Texture2D _background;
        string text;

        public Game1()
        {
           graphics = new GraphicsDeviceManager(this);

            Content.RootDirectory = "Content";

            graphics.IsFullScreen = true;
            //graphics.PreferredBackBufferWidth = 800;
           // graphics.PreferredBackBufferHeight = 480;
            graphics.SupportedOrientations = displayOrientation.LandscapeLeft;
        }

        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting             
       /// This is where it can query for any required services and load any non-
    /// related content.  Calling base.Initialize will enumerate through any components
    /// and initialize them as well.
    /// </summary>
        protected override void Initialize()
        {
            // Todo: Add your initialization logic here

            base.Initialize();
           text = "";
       }

    /// <summary>
    /// LoadContent will be called once per game and is the place to load
    /// all of your content.
    /// </summary>
        protected override void LoadContent()
        {
        // Create a new SpriteBatch,which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            _background = Content.Load<Texture2D>("Bilder/bg");
           _mainFrame = new Rectangle(0,this.GraphicsDevice.Viewport.Width,this.GraphicsDevice.Viewport.Height);
        // Todo: use this.Content to load your game content here
        font = Content.Load<SpriteFont>("spriteFont1");
    }

    /// <summary>
    /// Allows the game to run logic such as updating the world,/// checking for collisions,gathering input,and playing audio.
    /// </summary>
    /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.pressed)
             {
                 Exit();
             }
           text = "ScreenWidth: " + this.GraphicsDevice.Viewport.Width + ",screenheight: " + this.GraphicsDevice.Viewport.Height;
        // Todo: Add your update logic here

            base.Update(gameTime);
    }

    /// <summary>
    /// This is called when the game should draw itself.
    /// </summary>
    /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {
           graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

           spriteBatch.Begin();
           spriteBatch.Draw(_background,_mainFrame,Color.White);
           spriteBatch.DrawString(font,text,new Vector2(16,1000),Color.White);
           spriteBatch.End();

           base.Draw(gameTime);
       }
    }
}

从VS部署时,一切都很好,viewport.width是实际的设备宽度,viewport.height是实际的设备高度.但是当试图从三星galaxy S4主动部署(有时你需要尝试2-3次)时,突然间Viewport.Height是设备宽度而另一种方式,这使得背景图片只是覆盖了一点的屏幕.

拍了照片来表明:

解决方法

检查版本3.6,并修复了错误.

android – 三星更新后的错误Monogame |将viewport.height检测为设备宽度的更多相关文章

  1. 有关HTML5页面在iPhoneX适配问题

    这篇文章主要介绍了有关HTML5页面在iPhoneX适配问题,需要的朋友可以参考下

  2. HTML5单页面手势滑屏切换原理分析

    H5单页面手势滑屏切换是采用HTML5 触摸事件(Touch) 和 CSS3动画(Transform,Transition)来实现的,下面通过本文简单说一下其实现原理和主要思路,感兴趣的朋友一起看看吧

  3. Html5 页面适配iPhoneX(就是那么简单)

    这篇文章主要介绍了Html5 页面适配iPhoneX(就是那么简单),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. HTML5 移动页面自适应手机屏幕四类方法总结

    这篇文章主要介绍了HTML5 移动页面自适应手机屏幕四类方法总结,非常具有实用价值,需要的朋友可以参考下

  5. H5页面适配iPhoneX(就是那么简单)

    这篇文章主要介绍了H5页面适配iPhoneX(就是那么简单),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. ios – UIWebView – 不会在轮换更改时调整内容大小?

    所以我有一个显示静态HTML内容的UIWebView.当我以纵向方式启动ViewController并切换到横向时,它会正确调整内容的大小.但是,当我以横向方式启动页面并切换到纵向时,它不会调整我的内容大小,并且需要滚动才能查看所有内容.这是一个错误吗?是否有强制调整UIWebView内容大小的解决方案?解决方法你有2个选择:将其添加到html文件的HEAD部分:或者在方向改变时调用[myWebViewreload]

  7. android – iPhone X /三星Galaxy S8纵横比问题适用于cocos2dx游戏

    还是我在这里忽略了另一种解决方案?

  8. android – IncompatibleClassChangeError com.google.gson.annotations.SerializedName.value

    当用户从Play商店更新应用程序时,我们在Samsung设备中收到IncompatibleClassChangeError.请检查下面的日志.代码如下:LoginResponse是我的POJO课程.将返回JSON字符串,这是服务器响应.解决方法看起来像三星问题..很多人不仅与gsonlib有同样的问题,而且还有其他库.我认为你不能做太多,只等三星开发人员解决这个问题.已经这个问题是在三星开发者论坛

  9. android – 三星设备上的AcousticEchoCanceler无法正常工作

    解决方法试试这些:

  10. android – 三星Galaxy S2 2.3.5没有调用overScrollBy()

    似乎三星禁止他们的过度滚动.我有一个扩展ScrollView和覆盖的视图的实现在每个其他设备上,当滚动器到达它结束时调用overScrollBy,并且用户实际上可以过度滚动视图).在Android2.3.5上,三星实施了一种完全禁用过度滚动的机制,每次用户尝试过度滚动时,都会打印以下LogCat事件:有没有办法解锁三星在那里做的事情?解决方法我刚遇到同样的问题,最后提出了以下自定义过卷检测:

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部