我试图愚弄建立游戏的方式。
我在很多测试中遇到的一个问题是我发现很难处理大量的抽奖活动。
方案: 我有一张地图,包含在java中用opengl绘制的50 * 50个正方形。 为了绘制所有这些,每次,每一帧,我使用for循环,这意味着每帧2500个单独绘制。 我使用这样的东西:
for(Y=0;Y<50;Y++){
for(X=0;X<50;X++){
box[Y][X].draw();
}
}
有更好的方法吗?这感觉不对劲! 有没有办法在第一次绘制后保持绘图,矩阵(或者你称之为:-))的输出?以便我可以将它加载到那个状态?
答案 0 :(得分:2)
有几种不同的策略。老实说,要检查的2500个物体“很多”,但实际上并没有那么多,这是可以优化到第n度的那种东西。通常,瓶颈在于绘图调用本身,而不是遍历对象。
因此,迭代对象并进行截头检查。也就是说,测试对象是否完全在玩家的视野之外。如果他们是,不要画画。如果你只是用2D绘图,这通常是直截了当的。如果它是3D,那么你将需要一些更高级的数学,但仍然是直截了当的线性代数。
接下来的通用方法是某种场景图或其他空间结构。这会非常快速地变得复杂得多,但它可以随时以任何角度对任何2D / 3D内容表现良好。 (谷歌现在是你的朋友,问题非常开放。)
或者,如果你有一个简单的2D自上而下的正方形视图,你可以创建一个简单的2D数组,并根据相机坐标绘制相关的地图部分。 (对相机坐标X和Y进行线性变换,向下缩放到数组索引,然后绘制一个矩阵的数组坐标。)
除非有一些非常特殊的原因,否则我通常不建议采用差别方法。当你跳位置时,通常很难管理和无用。
天空是极限,不知道更多细节,但尽量保持简单。制作游戏很难。