gpt4 book ai didi

performance - 有没有办法提高使用相同图像的图像控件的图像内存使用率?

转载 作者:行者123 更新时间:2023-12-03 16:58:46 26 4
gpt4 key购买 nike

在 WP7 游戏中,我正在构建我的 Enemy类包含在 EnemyControl 中.
敌人控制使用 spritesheet该敌人类型的所有不同动画状态。我静态缓存位图的只有 4 张图像。

我遇到的问题是,尽管图像都被缓存( BitmapImage 静态和 CacheMode="BitmapCache" ),当控件加载图像时,它会为每个控件添加大约 2 兆纹理/系统内存。

这是一个重大问题,因为它限制了我可以想象的在屏幕上拥有的敌人数量。

有谁知道如何改善这种情况?或以其他方式解决它?

如果有兴趣,这是xaml:

<Canvas x:Name="canEnemyControl">
<Canvas.RenderTransform>
<TranslateTransform x:Name="enemyControlTransform" X="0"/>
</Canvas.RenderTransform>
<Canvas.Clip>
<RectangleGeometry x:Name="clipGeometry" Rect="0,0,60,60" />
</Canvas.Clip>
<Image x:Name="imgEnemy" Stretch="None" CacheMode="BitmapCache" >
<Image.RenderTransform>
<TranslateTransform x:Name="enemyImageTransform" X="0" Y="0" />
</Image.RenderTransform>
</Image>
</Canvas>

最佳答案

我认为您的实现不会扩展,因为我不认为多个 Image元素知道共享相同的位图缓存。

解决方案:CompositionTarget.Rendering 和 WriteableBitmapEx

一种可能的解决方案是使用 CompositionTarget.Renderingmy answer here 中进行渲染.这会在屏幕更新之前触发一个事件,以便您可以进行自己的绘图。我相信这就是 Krashlander 和其他一些 Silverlight 游戏的工作方式(尽管我认为他可能在以后的版本中切换到了 XNA)。

那我觉得可以用WriteableBitmapEx使用源图像的一个实例将其绘制到缓冲区的多个位置。您应该更好地缩放,因为您的缓冲区大小与屏幕/视口(viewport)一样大,并且每个图像都有一份副本。显示 1 个敌人和 1000 个敌人的内存要求应该相同。

我将添加一个免责声明,我没有尝试过这种确切的方法,但我确实使用了 CompositionTarget.Rendering在我的一个应用程序中进行平滑的屏幕更新。

关于performance - 有没有办法提高使用相同图像的图像控件的图像内存使用率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10945981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com