在GMS3中对话框图形的部署是否已更改?

问题描述 投票:1回答:1

我在DM对话框中广泛使用了图形元素,主要用于视觉反馈。尽管我已经在GMS1和GMS2中成功使用了它们,但是我还没有使它们在GMS3中正确运行。我想知道我是否部署不正确。下面的示例脚本说明了我的两个主要问题,即图形元素的大小与其关联的位图之间的不匹配,以及位图值为240或RGB(240,240,240)的奇怪的对比度映射(黑色):

    class ModelessDialogWithGraphic : UIFrame
    {
        Object Init(Object self)
        {
            TagGroup dialogSpec = DLGCreateDialog("");
            TagGroup dialogItems = dialogSpec.DLGGetItems();

            Number graphicW = 256;
            Number graphicH = graphicW / 4;
            Image graphicImage := RealImage("Graphic Image", 4, graphicW, graphicH);
            graphicImage = icol;

            // Add labeled box with graphic
            TagGroup boxSpec = DLGCreateBox("Graphic");
            TagGroup boxItems = boxSpec.DLGGetItems();
            TagGroup graphicSpec = DLGCreateGraphic(graphicW, graphicH);
            graphicSpec.DLGAddBitMap(graphicImage);
            boxItems.DLGAddElement(graphicSpec);
            dialogItems.DLGAddElement(boxSpec);

            return self.super.Init(dialogSpec);
        }
    }

    void main()
    {
        Object dialog = Alloc(ModelessDialogWithGraphic).Init();
        dialog.Display("Dialog Graphic Test");
    }

    main();

Output of script in GMS 3.4

至少在GMS 3.4中,位图似乎仅填充指定图形区域的左上四分之一。但是,此问题很复杂,因为我观察到的行为似乎随着Windows显示缩放选项和特定版本的Windows而改变。目前,借助GMS 3.4和最新的Win10更新,我发现以下更改的Init方法提供了可服务的(尽管很丑)的解决方法:

        Object Init(Object self)
        {
            TagGroup dialogSpec = DLGCreateDialog("");
            TagGroup dialogItems = dialogSpec.DLGGetItems();

            Number graphicW = 256;
            Number graphicH = graphicW / 4;
            Image graphicImage := RealImage("Graphic Image", 4, graphicW, graphicH);
            graphicImage = icol;
            graphicImage = (graphicImage == 240) ? 241 : graphicImage

            // Add labeled box with graphic
            Number scaler = 0.5;
            TagGroup boxSpec = DLGCreateBox("Graphic");
            TagGroup boxItems = boxSpec.DLGGetItems();
            TagGroup graphicSpec = DLGCreateGraphic(scaler * graphicW, scaler * graphicH);
            graphicSpec.DLGAddBitMap(graphicImage);
            boxItems.DLGAddElement(graphicSpec);
            dialogItems.DLGAddElement(boxSpec);

            return self.super.Init(dialogSpec);
        }

Output of script in GMS 3.4

但是,我担心这些解决方法可能会在将来的GMS版本中中断。有没有人找到更好或更正确的方法来在GMS3中部署对话框图形?

bitmap dialog dm-script
1个回答
0
投票

Windows10 dpi对应用程序的缩放比例的确确实引起了许多错误绘制的UI问题。其中一些要求更改dpi后重新启动应用程序,但其中一些是“永久性的”。

我认为您提到的两个问题是错误,应该在Gatan software issue reporting网站上报告。

您的静态“缩放”解决方案确实太脆弱了,因为需要为不同的显示dpi设置确定缩放的确切值。我目前尚不清楚脚本命令,该命令可能会在此阶段为您提供此信息。

关于将颜色替换为透明的颜色:如果我不得不猜测,那么一直都是这样,但是确切的颜色代表了GMS 2中的背景色,而不再是GMS 3中的背景色。也是GMS 3版本的监督/错误,应报告。

© www.soinside.com 2019 - 2024. All rights reserved.