这个游戏还算比较大的,所以我打算分几篇文章来介绍。本节先介绍基础的P1的实现。其实对游戏有所了解的都知道格斗游戏算是游戏类型中比较难编写的,无论是逻辑还是复杂的技能控制还有碰撞检测都是比较复杂的,所以我尽量做到完美。
<Canvas Name="MyCanvas" ></Canvas>
首先我们在主界面选取的布局是Canvas的布局,为什么呢,因为这个布局在我们家在图片资源的时候是非常方便的,可以准确的控制位置,便于我们进行属性动画的制作。(如果这里不懂可以先自己百度学习WPF的布局学习,其中Grid,Canvas,StackPanel,DockPanel等都是比较重要的,后面我会更新相关的文章)。然后定义一个Image的对象当作P1:
下面我们就来看如何进行主角的加载,我们知道在一般的格斗游戏中,角色都不是静止的站立的,都是会晃动的,也就以为着我们必须加载成动画的样子。
下面我们来学习在WPF中的动画是怎么实现的:
1.时间容器的方式(TimeLine可能更准确的翻译是时间线,但是我更喜欢时间容器的翻译)
因为这种方式是规定一个时间段,这就是时间容器的容量,然后把动作加入进这个时间容器,最后再把这个时间容器加载进入就可以实现动画效果了,这种一般是实现属性动画。什么叫做属性动画呢,首先我们知道每个对象都有各种的属性,比如说个按钮的大小(这就叫做属性),按钮的位置(这就叫做属性),按钮的颜色等等。所以属性动画就是在一个规定的时间内动态的实现对象属性变化的动画。
public partial class MainWindow : Window
{
Rectangle rect;
public MainWindow()
{
InitializeComponent();
rect = new Rectangle();
rect.Stroke = Brushes.Black;
rect.Fill = Brushes.Red;
//这两句一定要有,虽然没有在默认的情况下是加载到(0,0)但是没有这两句设置这个属性,在下面
rect.SetValue(Canvas.LeftProperty,0D);
rect.SetValue(Canvas.TopProperty,0D);
rect.Height = 100;
rect.Width = 100;
MyCanvas.Children.Add(rect);
}
private void MyCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{
Point MoveTO = new Point();
MoveTO = e.GetPosition(MyCanvas);
//故事画板,上面可以同时装载多个时间容器
Storyboard MyStory = new Storyboard();
//X轴的移动
DoubleAnimation MyXAnimation = new DoubleAnimation(MoveTO.X, TimeSpan.FromMilliseconds(2000));
Storyboard.SetTargetProperty(MyXAnimation, new PropertyPath(Canvas.LeftProperty));
MyStory.Children.Add(MyXAnimation);
MyStory.Begin(rect);
//Y轴的移动
DoubleAnimation MyYAnimation = new DoubleAnimation(MoveTO.Y, TimeSpan.FromMilliseconds(2000));
Storyboard.SetTargetProper