【问题标题】:2D Graphics Performance Boost2D 图形性能提升
【发布时间】:2013-08-08 19:20:04
【问题描述】:

我知道我的头衔有点花里胡哨。我的问题是,我正在尝试用 Win32 图形用 C++ 编写一个小游戏,我希望我的所有作品都从上到下绘制,以便它们正确地放在彼此的前面。 (例如,如果我站在一棵树前,它会先画树,然后是玩家,所以我在前面)

我的第一个想法是,使用向量,因为我需要一个动态数组类型的东西,像这样在 for 循环中循环

for(y = 0; y < playerYValue; y++){
    //Check every enemy/object to see if its yValue matches the looping y
    object.drawImage();
}

在玩家面前也是如此。然而,在运行了一些测试之后,这是非常低效的循环,它需要 34 毫秒,而没有它需要 2:/

我正在寻找一种方法来按顺序绘制我的所有对象,并希望得到任何帮助,一切都值得一试。这是我想不出解决问题的创造性方法的一个领域。

如果您需要我提供更多详细信息,请询问:)

编辑:代码中的注释是每次向量迭代的占位符,以检查对象的 yValue 是否等于 y :) 以为我会澄清一下 :)

【问题讨论】:

  • “object.drawimage()”的内容是什么?
  • drawImage() 在这种情况下只是图像绘制功能的占位符。这只是一个基本的 Win32 绘图,没什么特别的。

标签: c++ winapi


【解决方案1】:

也许您应该按 y 值对对象进行排序然后渲染它们,如果您当前每次绘制对象时都在对每个对象进行搜索,这应该会更快。

尽量不要让玩家与众不同。玩家也应该是一个“对象”,然后你会从前排序一次,然后再从前拉。

【讨论】:

  • 好吧,由于这些原因,我所有的“对象”都是 Entity 的成员,所以我可以制作一个包含所有内容的向量。我将如何按变量对所有实体进行排序? :) 我知道 sort() 算法,但我认为这只会按名称排序? (感谢您的帮助,这当然值得深思!)
  • 另外,如果玩家包含在这个变化的向量中,我将如何对它做所有具体的事情?或者我应该尝试确保在类中处理所有规范:)
  • @BradleyHodgkins 您的后一个建议是理想的情况,如果您需要,您可以在将其添加到Entity 列表之前将Player* myPlayer 保留给玩家对象。然后使用该指针对其细节进行操作,例如玩家输入等。您应该尝试使用重载/继承来尽可能减少对外部控制的需求
  • 好的,谢谢 :) 稍后我会试一试 :) 我会给你答案,因为这听起来是个好主意 :)
  • 嘿,很抱歉打扰您,这似乎奏效了,但指针的想法不起作用,除非您打算将指针添加到向量中。我现在的问题是某些东西正在更新,但它不是向量中的那个!我会用谷歌搜索来研究这个问题,但如果你能解释一下你的意思,那将不胜感激:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
相关资源
最近更新 更多