【发布时间】:2016-05-01 05:50:03
【问题描述】:
我正在 Windows Phone 上试验WritableBitmapEx。我创建了一个简单的例子,一个简单的上下移动的盒子。
有一个绘制函数可以在每一帧重绘矩形:
int y = 0;
int dy = 15;
public void draw()
{
y += dy;
if (y > 500 || y < 0)
dy = -dy;
writeableBmp.Clear(System.Windows.Media.Colors.Black);
writeableBmp.FillRectangle(0, y, 100, y + 100, System.Windows.Media.Colors.Green);
}
还有Loaded 事件,它创建可写位图并在每一帧上调用draw()。
WriteableBitmap writeableBmp;
private async void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
writeableBmp = BitmapFactory.New((int)ContentPanel.ActualWidth, (int)ContentPanel.ActualHeight);
image.Source = writeableBmp;
writeableBmp.GetBitmapContext();
CompositionTarget.Rendering += CompositionTarget_Rendering;
}
private void CompositionTarget_Rendering(object sender, EventArgs e)
{
draw();
}
但是这给我的最大~30FPS,所以动画不流畅。
我知道在xaml 中有一些创建此类动画的更好方法(例如,创建一个矩形对象并使用 xaml 动画制作动画),但是有一个游戏(用另一种语言)以这种方式重绘每一帧,我的最终目标是将该代码移植到 Windows Phone。因此,找到一种足够快的重绘方法可以让移植真的变得更容易。
那么,有没有办法提高它的性能?还是有更好的方法来手动绘制每一帧,但速度足够快(60fps)?
【问题讨论】:
-
投反对票的原因是什么?
-
我记得几年前 WP 被限制在 30 FPS 左右。我认为限制已经解除,但我怀疑像 520 这样的低端手机仍然无法达到更高的水平。也许现在仍然如此,但是如果您正在移植游戏,您是否尝试过 Microsoft 的 Win2D?
-
@ChubosaurusSoftware 好吧,我正在 Lumia 930 上进行测试,但我仍然获得了 ~30fps。你能解释更多关于 Win2D 的信息吗?用它绘图有多容易和多快?
-
它基本上只是 Direct2D 的一个包装器,所以除非你是原生的,否则可能会尽可能快。您可以使用 NuGet 或他们的 GitHub 获取它:github.com/Microsoft/Win2D,入门项目(恕我直言,这很容易):github.com/Microsoft/Win2D-samples
-
@ChubosaurusSoftware 我正在玩它,它似乎是我正在寻找的东西。您可以将其发布在答案中以便我投票吗? :)
标签: c# wpf xaml windows-phone-8 windows-phone