您的位置:首页 > 编程语言

WPF游戏编程01--物体运动

2011-10-11 14:35 225 查看
<Canvas x:Name="container" Width="800" Height="600" Background="Silver"  MouseMove="container_MouseMove" MouseLeftButtonDown="container_MouseLeftButtonDown">

</Canvas>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Media.Animation;

namespace WPFApplication
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();

DrawRectangle();
DrawCircle();
}

// 绘制矩形
private void DrawRectangle()
{
rect = new Rectangle();

rect.Width = 50;
rect.Height = 50;

rect.RadiusX = 5;
rect.RadiusY = 5;

rect.Fill = new SolidColorBrush(Colors.Beige);

Canvas.SetLeft(rect, 400);
Canvas.SetTop(rect, 300);

container.Children.Add(rect);
}

private void container_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Point point = e.GetPosition(container);

Storyboard storyboard = new Storyboard();

// x
DoubleAnimation doubleAnimation = new DoubleAnimation(Canvas.GetLeft(rect), point.X, new Duration(TimeSpan.FromMilliseconds(500)));
Storyboard.SetTarget(doubleAnimation, rect);
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Left)"));
storyboard.Children.Add(doubleAnimation);

// y
doubleAnimation = new DoubleAnimation(Canvas.GetTop(rect), point.Y, new Duration(TimeSpan.FromMilliseconds(500)));
Storyboard.SetTarget(doubleAnimation, rect);
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Top)"));
storyboard.Children.Add(doubleAnimation);

if (!Resources.Contains("rectAnimation"))
{
Resources.Add("rectAnimation", doubleAnimation);
}

storyboard.Begin();
}

private void DrawCircle()
{
circle = new Ellipse();
circle.Width = 50;
circle.Height = 50;

circle.Fill = new SolidColorBrush(Colors.Bisque);

Canvas.SetLeft(circle,0);
Canvas.SetTop(circle,0);
container.Children.Add(circle);
}

private void container_MouseMove(object sender, MouseEventArgs e)
{
Point p = e.GetPosition(container);

Storyboard storyboard = new Storyboard();

// x
DoubleAnimation animation = new DoubleAnimation(Canvas.GetLeft(circle), p.X, new Duration(TimeSpan.FromMilliseconds(500)));
Storyboard.SetTarget(animation, circle);
Storyboard.SetTargetProperty(animation,new PropertyPath("(Canvas.Left)"));
storyboard.Children.Add(animation);

// y
animation = new DoubleAnimation(Canvas.GetTop(circle), p.Y, new Duration(TimeSpan.FromMilliseconds(500)));
Storyboard.SetTarget(animation,circle);
Storyboard.SetTargetProperty(animation,new PropertyPath("(Canvas.Top)"));
storyboard.Children.Add(animation);

if(!Resources.Contains("circleAnimation"))
{
Resources.Add("circleAnimation",animation);
}

storyboard.Begin();

}

private Rectangle rect;
private Ellipse circle;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: