WEB开发网
开发学院图形图像Flash Silverlight: 使用 Silverlight 2.0 构建高级 3D ... 阅读

Silverlight: 使用 Silverlight 2.0 构建高级 3D 动画

 2009-02-09 11:57:24 来源:WEB开发网   
核心提示: 下面的话有点跑题,您可能想知道是如何计算四面体示例的每个 Polygon 的边角的,Silverlight: 使用 Silverlight 2.0 构建高级 3D 动画(7),并且,应用程序中其他示例的 Polygon 数量明显要多得多,例如,无法在 Storyboard 上调用 Begi

下面的话有点跑题,您可能想知道是如何计算四面体示例的每个 Polygon 的边角的,并且,应用程序中其他示例的 Polygon 数量明显要多得多。我是懒惰主义的坚决拥护者,只要计算机能更快完成的,我决不会自己来做。因此,我只在生产过程中使用了一个修改后的多面体。该版本依次执行每个示例中心动画的一个帧—该帧具有完全闭合的形状。我将每个结果 Polygon 组放到沿圆周等距分布的一组 Canvas 中,并将它们一起放到一个文件中以备主程序使用。

要将对象放到圆周上,需以相同的增量 2*PI/NumSamples 增加角度,然后使用坐标(x= Radius*Cos(Angle), y=Radius*Sin(Angle))来指定每个示例的中心点。并且,由于定位对象的 Canvas 使用的是 Left 和 Top 属性,因此需将中心点的位置分别偏移半个宽度和半个高度。

使用 XAML 的技巧

正如您所看到的,可使用 XAML 来获得非常丰富的 UI,并且几乎不需要其他代码。即使是大型文件(如 Page.xaml),其初始化速度也快得令人惊讶。在此先与大家分享一些技巧,这是根据我使用 Silverlight 2.0 最新版本(2008 年 3 月 Beta 版)的经验所总结出的。

我先前提到,当前的触发器仅可针对 Loaded 事件(通过 Begin 方法)自动启动 Storyboard。对于其他事件,需要类似如下的少量事件处理程序形式的探测代码:

public void MouseEnterHandler(
 object o, EventArgs e) {
 this.MouseEnterStoryBoard.Begin();
}

如果对 Storyboard 采用了命名约定(如在对象名称后紧跟事件名称),则可大大缩减需编码的事件处理程序数量。例如,在多面体中将以下方法用作圆周中所有示例的共享事件处理程序:

public void MouseEnterHandler(
 object o, EventArgs e) {
 this.triggerStoryboard(o,"MouseEnter");
}
private bool triggerStoryboard(
 object o, string eventType) {
 Canvas el = o as Canvas;
 string name= el.GetValue(NameProperty) as String;
 Storyboard sb = el.FindName(name + eventType) as Storyboard;
 if (sb != null)
  sb.Begin();
  return (sb != null);
}

通过使用 Silverlight 2.0 Beta,主初始化(即 InitComponents)已从 Loaded 事件处理程序变成了代码隐藏对象的构造函数。此方法更为妥当,但切记构造函数并不是万能的。例如,无法在 Storyboard 上调用 Begin 或 Pause,因此仍需通过事件处理程序来实现。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:Silverlight 使用 Silverlight

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接