【发布时间】:2014-05-13 17:57:58
【问题描述】:
我分析了我的应用程序(一个游戏),我注意到这个功能是一个(!)瓶颈。特别是,这个函数被大量调用是因为它的含义:它绘制了我的游戏摩天大楼的窗户。游戏是水平流动的,所以每次生成新的摩天大楼并且必须绘制窗口。
方法很简单:我只加载一个窗口的一个图像,然后像“模板”一样使用它来绘制每个窗口,同时计算它在摩天大楼上的位置。
-
position_是起始位置,基于我要开始绘制的左上角 -
n_horizontal_windows_和n_vertical_windows_是不言自明的,它是在构造函数中生成的 -
skipped_lights_是bool的矩阵,表示该特定灯是打开还是关闭(关闭意味着不绘制窗口) -
delta_x就像填充,一个窗口与另一个窗口之间的距离。 -
w_window是窗口的宽度(每个窗口都一样)public override void Draw(SpriteBatch spriteBatch) { Vector2 tmp_pos = position_; float default_pos_y = tmp_pos.Y; for (int r = 0; r < n_horizontal_windows_; ++r) { for (int c = 0; c < n_vertical_windows; ++c) { if (skipped_lights_[r, c]) { spriteBatch.Draw( window_texture_, tmp_pos, overlay_color_); } tmp_pos.Y += delta_y_; } tmp_pos.X += delta_x_ + w_window_; tmp_pos.Y = default_pos_y; } }
如您所见,位置是在循环内计算的。
只是一个结果示例(如您所见,我创建了三层摩天大楼):
如何优化这个功能?
【问题讨论】:
-
如果这里不好,请移到其他论坛,而不是关闭,请移至其他论坛
标签: c# optimization xna draw xna-4.0