locked
WP8.1 的 Canvas 中如何让一个 Rectangle 随机移动,而另一个 Rectangle 则可以随时去(触控)控制移动? RRS feed

  • 问题

  • 画布中有两个 Rectangle 如何让其中一个 Rectangle 随机移动,而另一个 Rectangle 则可以随时去(触控)控制移动?
    2014年10月20日 11:29

答案

  • 不不不,我不是要动画的效果,拖动我也已经懂得了。控制其中一个 Rectangle① 而另一个Rectangle② 可以进行某种移动。关键是没法让②的在 Canvas 中移动起来,代码不知怎么写

    /// <summary> /// 在此页将要在 Frame 中显示时进行调用。 /// </summary> /// <param name="e">描述如何访问此页的事件数据。 /// 此参数通常用于配置页。</param> protected override void OnNavigatedTo(NavigationEventArgs e) { // TODO: 准备此处显示的页面。 // TODO: 如果您的应用程序包含多个页面,请确保 // 通过注册以下事件来处理硬件“后退”按钮: // Windows.Phone.UI.Input.HardwareButtons.BackPressed 事件。 // 如果使用由某些模板提供的 NavigationHelper, // 则系统会为您处理该事件。 if (e.NavigationMode == NavigationMode.New) { //导航到此页面时,我希望 Rectangle② 在作某种移动(比如在屏幕上向某一方向移动,

    //碰到屏幕边界则发生完全弹性碰撞,反弹,朝向另一个地方移动(但不是动画)),另外,

    //我可以控制 ② 的移动速度。

    } } //此处省略可控制 Rectangle① 移动的代码片段。


    问题可能比较难理解,其实是这样的:

    Winform 中我要让一个 Shape 在 Canvas 中移动(自主地),可以把  【Shape 移动的方法】 注册到 Canvas.Paint 事件中,这样我就可以在这个 Shape 移动的同时,被动控制其他 Shape 的移动。但 WP8.1 没有Canvas.Paint 事件,这就很苦恼了,因为没办法实时去移动 Shape(Canvas.Paint 事件是实时的)就没法提供一个实时的事件触发源

    /*************已找到代替解决方案***************/

    使用 事件:

    CompositionTarget.Rendering 
    2014年10月21日 4:54

全部回复

  • 楼主 你好,

    Rectangle随机移动可以参考这两篇文档:

    http://msdn.microsoft.com/zh-cn/library/ms746814(v=vs.110).aspx

    http://msdn.microsoft.com/zh-cn/library/ms745186(v=vs.110).aspx

    关于如何拖动Rectangle的问题,你在这个帖子中已经得到解答:https://social.msdn.microsoft.com/Forums/zh-CN/156edddd-163e-4f83-a608-fcb5407ca68d/-rectangle-?forum=wpappszh

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年10月21日 2:31
    版主
  • 不不不,我不是要动画的效果,拖动我也已经懂得了。控制其中一个 Rectangle① 而另一个Rectangle② 可以进行某种移动。关键是没法让②的在 Canvas 中移动起来,代码不知怎么写

    /// <summary> /// 在此页将要在 Frame 中显示时进行调用。 /// </summary> /// <param name="e">描述如何访问此页的事件数据。 /// 此参数通常用于配置页。</param> protected override void OnNavigatedTo(NavigationEventArgs e) { // TODO: 准备此处显示的页面。 // TODO: 如果您的应用程序包含多个页面,请确保 // 通过注册以下事件来处理硬件“后退”按钮: // Windows.Phone.UI.Input.HardwareButtons.BackPressed 事件。 // 如果使用由某些模板提供的 NavigationHelper, // 则系统会为您处理该事件。 if (e.NavigationMode == NavigationMode.New) { //导航到此页面时,我希望 Rectangle② 在作某种移动(比如在屏幕上向某一方向移动,

    //碰到屏幕边界则发生完全弹性碰撞,反弹,朝向另一个地方移动(但不是动画)),另外,

    //我可以控制 ② 的移动速度。

    } } //此处省略可控制 Rectangle① 移动的代码片段。


    问题可能比较难理解,其实是这样的:

    Winform 中我要让一个 Shape 在 Canvas 中移动(自主地),可以把  【Shape 移动的方法】 注册到 Canvas.Paint 事件中,这样我就可以在这个 Shape 移动的同时,被动控制其他 Shape 的移动。但 WP8.1 没有Canvas.Paint 事件,这就很苦恼了,因为没办法实时去移动 Shape(Canvas.Paint 事件是实时的)就没法提供一个实时的事件触发源

    /*************已找到代替解决方案***************/

    使用 事件:

    CompositionTarget.Rendering 
    2014年10月21日 4:54