Silverlight中的帧
时间:2022-04-23
本文章向大家介绍Silverlight中的帧,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Silverlight是基于时间线的,不象Flash是基于帧的,所以在Silverlight中,很少看到有文档专门介绍SL中的帧。
但是我们从动画原理知道,动画只不过是一幅幅静态图片连续播放,利用人眼的视觉暂留形成的,因此任何动画从原理上讲,至少还是有每秒播放多少帧这个概念的。
Silverlight的sdk文档中,有一段话:
... maxFramerate 值可通过 Silverlight 插件对象的 maxframerate 参数进行配置。maxframerate 参数的默认值为 60。currentFramerate 和 maxFramerate 是报告每秒帧数 (fps) 的值。实际显示的帧速率设置为较低的数字。可以通过特意设置一个较低的 maxframerate 值(如 2,每秒 2 帧)来阐述 currentFramerate 与 maxFramerate 之间的关系。 ...
即sl每秒种默认最多播放60帧,当然我们也能用代码来改变该值(比如设置到100),但最终sl的当前播放速度与硬件有关,并不是你想设多高就能达到多高。
测试xaml:
代码 by 菩提树下的杨过
<UserControl x:Class="CompositionTarget_Rendering.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<StackPanel x:Name="LayoutRoot" HorizontalAlignment="Center" VerticalAlignment="Center" >
<TextBlock Text="ready" x:Name="txt" HorizontalAlignment="Center"></TextBlock>
<StackPanel Margin="5">
<Slider Width="200" Minimum="1" Maximum="100" x:Name="slider" ValueChanged="slider_ValueChanged" Value="60" ></Slider>
<TextBlock x:Name="txtMax" Margin="0,5,0,0" HorizontalAlignment="Center" Text="60" ></TextBlock>
</StackPanel>
</StackPanel>
</UserControl>
sl中有一个CompositionTarget.Rendering事件可以在每帧进入(刚开始播放)时触发,测试cs代码:
代码 by 菩提树下的杨过
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Interop;
using System.Windows.Media;
namespace CompositionTarget_Rendering
{
public partial class MainPage : UserControl
{
bool isLoaded = false;
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
isLoaded = true;
}
/// <summary>
/// 该事件在进入每一帧时触发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void CompositionTarget_Rendering(object sender, EventArgs e)
{
this.txt.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");
}
private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (isLoaded)
{
Settings settings = Application.Current.Host.Settings;
settings.EnableFrameRateCounter = true;
settings.MaxFrameRate = (int)slider.Value;
txtMax.Text = settings.MaxFrameRate.ToString();
}
}
}
}
进入每帧时,我们让txt显示当前时间,同时拖动滑块,还能设置当前动画每秒播放的最大帧数,运行效果:
拖动滑块,观察一下时间更新的快慢,同时注意浏览器左下角状态栏的显示,当然 CompositionTarget.Rendering不仅仅只能用来显示时间,还能做更多的事情,大家就尽情发挥想象吧:)
- 分分钟搭建MySQL Group Replication测试环境(二)(r12笔记第41天)
- php5编译安装常见错误和解决办法集锦
- MySQL自增列主从不一致的测试(r12笔记第37天)
- 分享Mac/Linux系统Shell终端利器SecureCRT以及注册破解方法
- MySQL中GTID和自增列的数据测试(r12笔记第38天)
- 分享一个入门级可控多线程shell脚本方案
- PhalGo-介绍
- 实测Nginx服务器开启pagespeed加速效果
- MySQL频繁停库的问题分析(r12笔记第33天)
- 解决Nginx Helper插件一键清理缓存功能导致网站打不开问题
- Oracle 12c DBCA浅析(r12笔记第48天)
- MySQL中的derived table(r12笔记第47天)
- Oracle数据库端口突然无法访问的分析(r12笔记第46天)
- MySQL中的反连接(r12笔记第45天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法