Trong phiên bản gần đây của Silverlight 2 RC0 có một sự kiện mới ( new event) mà diễn ra một lần trước sự biểu diễn của mỗi frame trong trình duyệt của bạn. Sự kiện
rendering event được xác định cho các sự kiện event handler cụ thể sau khi chuyển động (animation) và kiến trúc (layout) được áp dụng cho composition tree . Ngoài ra, nếu thay đổi visual tree bắt buộc phải thay đổi
composition tree, và sự kiện event handler của bạn cũng được gọi. (Tức là, theo kpopyo hiểu, CompositionTarget.Rendering event là sự kiện làm cho chuyển động của các đối tượng diễn ra một cách liên tục, như là tuyết rợi liên tục)
Vì thế, thay vì phải sử dụng DispatchTimer or Storyboard Timer, bây giờ bạn có thể sử dụng event mới này cho MainGameLoop() của bạn. Để thêm sự kiện mới này tất cả điều bạn cần làm là thực hiện gọi như sau:
CompositionTarget.Rendering += new EventHandler(MainGameLoop);
Hãy nhìn lại đoạn code trong Snowflake demo, đoạn code sau được sử dụng để tạo một Storyboard timer để tạo vòng lặp chính:
Storyboard _snowflakeTimer = new Storyboard();
public Page()
{
InitializeComponent();
_snowflakeTimer.Duration = TimeSpan.FromMilliseconds(0);
_snowflakeTimer.Completed += new EventHandler(SnowFlakeTimer);
_snowflakeTimer.Begin();
}
private void SnowFlakeTimer(object sender, EventArgs e)
{
MoveSnowFlakes();
CreateSnowFlakes();
}
Và cách khác là:
public Page()
{
InitializeComponent();
CompositionTarget.Rendering += new EventHandler(SnowFlakeTimer);
}
private void SnowFlakeTimer(object sender, EventArgs e)
{
MoveSnowFlakes();
CreateSnowFlakes();
}
Thank you,
--Mike Snow