因此,我使用自己创建的等轴渲染器类来渲染一个tilemap(简单地说是一个带有MapTiles的二维数组),称为WorldGeneration。我正在使用的相机每米使用64像素,所以它的高度例如是:(游戏窗口高度)/64。等距渲染器中使用的SpriteBatch将其投影矩阵设置为该相机。(batch . setprojectionmatrix(cam . combined)
问题是,在这个SpriteBatch上渲染纹理时,我得到了可怕的性能。我不确定它是由投影矩阵本身造成的(需要将我的64x64纹理缩放到1x1的批量尺寸),还是其他原因。
我试过在不执行渲染器中的batch.draw调用的情况下运行该程序(参见下面的代码),一切正常。有人能找到问题所在或给我一些提示吗?
相关代码段:
等距渲染器的渲染方法:
public void render(WorldGeneration gen) {
//TODO compensate for elevation
int x1 = (int) (cameraIso.x - 23); // TODO compensate for zoom
int x2 = (int) (cameraIso.x + 23);
int y1 = (int) (cameraIso.y - 23);
int y2 = (int) (cameraIso.y + 23);
if(x1 < 0){
x1 = 0;
}else if(x1 >= gen.getLengthX()){
x1 = gen.getLengthX() - 1;
}
if(y1 < 0){
y1 = 0;
}else if(y1 >= gen.getLengthY()){
y1 = gen.getLengthY() - 1;
}
if(x2 < 0){
x2 = 0;
}else if(x2 >= gen.getLengthX()){
x2 = gen.getLengthX() - 1;
}
if(y2 < 0){
y2 = 0;
}else if(y2 >= gen.getLengthY()){
y2 = gen.getLengthY() - 1;
}
batch.begin();
for (int x = x2; x >= x1; x--) {
for (int y = y2; y >= y1; y--) {
tiles = gen.getTiles(x, y);
if(tiles == null){
continue;
}else if(tiles.size <= 0){
continue;
}
for(MapTile tile: tiles){
if(tile.getOpacity() < 1){
batch.setColor(batchColor.r, batchColor.g, batchColor.b, tile.getOpacity());
}else{
batch.setColor(batchColor.r, batchColor.g, batchColor.b, 1);
}
//TODO only visible (not underneath several tiles)
pos.x = x;
pos.y = y;
//As you can see the texture is scaled to 1x1 because of batch:
batch.draw(textures[tile.getId()], translateCartToIso(pos).x,
translateCartToIso(pos).y + tile.getZ(), 1f, 1f);
}
}
}
batch.end();
}
如您所见,我甚至在渲染方法之外创建了Vector2 pos以提高性能,但我不确定这是否有必要。同样值得注意的是,磁贴被锁定到xy网格,但它们的z值不是,这就是为什么需要数组。
编辑:从某种程度上说,如果相机缩小,性能会很好,不知道为什么会这样。这肯定与相机的尺寸有关。
我对您的代码所做的一切并不十分肯定,但是看起来最外层的循环运行时间为O(56),内部的for循环运行时间为O(56),然后最内层的foreach循环运行时间为O(
这已经很吸引人了,更不用说缩放常常会导致性能下降。没有办法优化它吗?
找到了答案,这实际上与一切背后的图形有关。我注意到当我进行压力测试时,我的电脑会因为图形问题而关闭。
基本上可以归结为:cfg.useHDPI=真;
当我使Lwjgl应用程序配置使用高清像素时,我想我的计算机在必须处理太多高清像素时无法处理它(这就是为什么当我放大相机时它的工作原理,更少的像素)
我想我现在必须处理一些扭曲的像素,这是我以后必须解决的问题!
Note 本节暂未进行完全的重写,错误可能会很多。如果可能的话,请对照原文进行阅读。如果有报告本节的错误,将会延迟至重写之后进行处理。 为了给我们当前这个黑漆漆的游戏世界带来一点生机,我们将会渲染一些精灵(Sprite)来填补这些空虚。精灵有很多种定义,但这里主要是指一个2D图片,它通常是和一些摆放相关的属性数据一起使用,比如位置、旋转角度以及二维的大小。简单来说,精灵就是那些可以在2D游戏中渲染
我正试图按照本教程学习pygame。我正试图繁殖敌人的物体,但我认为我犯了一个错误,因为没有显示任何东西。 据我所知,我必须创建一个敌人类,然后添加一个事件来添加敌人(ADDENEMY)。当该事件被调用时(由于计时器的作用,每250毫秒一次),它应该会显示一个向左移动的敌人,直到它到达显示的末尾。 我有一组敌人精灵和一组所有精灵,我使用screen.blit和for循环将所有精灵中的每个实体渲染到
在项目运行时,渲染模块往往占据了最大的CPU开销,它也是我们为项目进行深度优化时最为关注的一部分。就目前而言,渲染性能主要被 不透明物体的渲染耗时 和 半透明物体的渲染耗时 所占据,而每一部分的性能开销又和其底层的渲染参数息息相关,比如 Draw Call数量、渲染面片数 和 可见蒙皮网格数 等等。因此,我们会根据上述性能参数对渲染模块进行详细的性能检测和分析。 数据汇总 该项主要展示项目运行过程
问题内容: 我想嘲笑。但是,当我运行以下代码时,该模拟被完全忽略了,我不确定为什么 测试代码: 模块代码: 问题答案: 您没有在正确的位置打补丁。您在定义的地方打补丁: 您需要修补导入的位置,即在编写此行的“模块代码”中: 即,它应该看起来像: 要获得快速指南,请阅读文档中的部分:修补位置。
在上文中,我们从多个角度讨论了如何优化页面加载性能。但一个用户体验良好的页面,不仅要快速加载,还需要有一系列流畅的交互。从而,这一节我们把目光投向页面渲染性能。 渲染流程 浏览器在渲染页面前,首先会将 HTML 文本内容解析为 DOM,将 CSS 解析为 CSSOM。DOM 和 CSSOM 都是树状数据结构,两者相互独立,但又有相似之处。DOM 树描述了 HTML 标签的属性,以及标签之间的嵌套关
为了保障组件的性能, 我们有的时候会从组件渲染的角度出发. 更干净的render函数? 这个概念可能会有点让人疑惑. 其实在这里干净是指我们在shouldComponentUpdate这个生命周期函数里面去做浅比较, 从而避免不必要的渲染. 关于上面的干净渲染, 现有的一些实现包括React.PureComponent, PureRenderMixin, recompose/pure 等等. 第一