我被要求开发一款名为“Flag Quiz”的游戏,其中玩家必须猜出屏幕中间出现的标志的正确名称。
当然我有很多图片(221个标记),我必须将它们放在程序中,因为当按下按钮Play
时,程序必须随机选择其中10个标记。
问题
我想使用ImageList
,但标志是480x311,因此Delphi要求我将图片分成30个不同的位图。我可以对此做些什么吗?
为了避免这个问题,我的想法如下(虽然我认为它不是很好):创建221个TPicture组件(当然对用户不可见)并在每个组件中加载一个标志图片。 / p>
我不想使用我的最后一个想法。你知道有什么改进吗?
答案 0 :(得分:8)
这种问题根本不适合表单设计者。你想存储221张图像,在IDE中管理这些图像会非常糟糕。一旦你把它们全部放进去,你就不会很容易看到它们,因为它们将在.dfm文件中进行16进制编码。在修订控制下,它将变得一团糟,因为您无法以可管理和可追踪的方式更改单个图像。
可接受的方法是使用资源。如果是我,我会安排我的图片有可预测的名字。例如,flag1
,flag2
等。我生成一个列出所有标志的资源脚本(.rc)。我将该资源脚本编译为链接到可执行文件的已编译资源(.res)。我已将资源脚本和图像文件提交给版本控制。
然后在运行时,您有一个TImage
控件来显示标志。每当您需要新图片时,请使用TResourceStream
加载,然后将其推入TImage
控件。
答案 1 :(得分:1)
Devexpress有一个名为cximagecolletion的Componnect,您可以将图像放在其上并保存和加载图像文件
或者您可以在小型访问数据库中保存所有标志并在需要使用tadodataset时加载它
毫无疑问,如果你把你的图像直接放在你的表格上,你的dfm会变得非常高,所以你会遇到麻烦
答案 2 :(得分:0)
我个人会将每个文件作为图像存储在专用子目录中,并使用国家/地区作为文件名。然后我会在程序入口处读取子目录文件名(所以我有一个可以随机选择的国家列表)并使用TImage.LoadFromFile来显示标志。这比使用资源文件(恕我直言)要容易得多。