c# wpf 游戏笔记 画布实例

《c#  wpf  游戏笔记一  画布实例DispatcherTimer》

Rectangle rect; //创建一个方块作为演示对象

rect = new Rectangle();

rect.Fill = new SolidColorBrush(Colors.Red); //设置画布canvas的背景设

rect.Width = 50;

rect.Height = 50;

rect.RadiusX = 5;

rect.RadiusY = 5;//图像的一个50*50象素 圆角5*5红色的方块对象

canvas1.Children.Add(rect);

Canvas.SetLeft(rect, 50);

Canvas.SetTop(rect, 50);

private void 窗体名_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{

}
//鼠标点击事件

Point p = e.GetPosition(canvas1);

Storyboard storyboard = new Storyboard();//创建移动动画

//创建X轴方向动画
DoubleAnimation doubleAnimation = new DoubleAnimation(

Canvas.GetLeft(rect),

p.X, //p.X 为x坐标 p.Y 为Y坐标

new Duration(TimeSpan.FromMilliseconds(500))

);

Storyboard.SetTarget(doubleAnimation, rect);
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Left)"));//当为p.Y Canvas.Top 当为p.x Canvas.Left
storyboard.Children.Add(doubleAnimation);

//将动画动态加载进资源内

if (!Resources.Contains("rectAnimation")) {

Resources.Add("rectAnimation", storyboard);

}

//动画播放

storyboard.Begin();

《c#  wpf  游戏笔记二  画布实例Storyboard》

double speed = 1; //设置移动速度

Point moveTo; //设置移动目标

CompositionTarget.Rendering += new EventHandler(Timer_Tick); 线程

private void Timer_Tick(object sender, EventArgs e) {

double rect_X = Canvas.GetLeft(rect);

double rect_Y = Canvas.GetTop(rect);

Canvas.SetLeft(rect, rect_X + (rect_X < moveTo.X ? speed : -speed));

Canvas.SetTop(rect, rect_Y + (rect_Y < moveTo.Y ? speed : -speed));

}

首先获取方块的X,Y位置,接下让方块的X,Y与moveTo的X,Y进行比较而判断是+speed还是-speed

《c#  wpf  游戏笔记三  画布实例 CompositionTarget》

//定义线程

DispatcherTimer dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal);

dispatcherTimer.Tick += new EventHandler(Timer_Tick);

dispatcherTimer.Interval = TimeSpan.FromMilliseconds(50); //重复间隔

dispatcherTimer.Start(); 开始线程

第一句申明一个界面计时器DispatcherTimer ,并且设置其线程优先级别为Normal,这是标准设置,你可以根据你自己的需求进行更改,一共10个级别。

第二句注册Tick 事件,也就是计时器间隔触发的事件。

第三句设置Tick 事件的间隔,可以有很多方式,我使用的是TimeSpan.FromMilliseconds(),即间隔单位为毫秒。

第四句启动线程。

时间: 2024-08-01 22:47:08

c# wpf 游戏笔记 画布实例的相关文章

《深入浅出WPF》笔记——绘画与动画

<深入浅出WPF>笔记——绘画与动画 本篇将记录一下如何在WPF中绘画和设计动画,这方面一直都不是VS的强项,然而它有一套利器Blend:这方面也不是我的优势,幸好我有博客园,能记录一下学习的过程.在本记录中,为了更好的理解绘画与动画,多数的例子还是在VS里面敲出来的.好了,不废话了,现在开始. 一.WPF绘画 1.1基本图形 在WPF中可以绘制矢量图,不会随窗口或图型的放大或缩小出现锯齿或变形,除此之外,XAML绘制出来的图有个好处就是便于修改,当图不符合要求的时间,通常改某些属性就可以完成

WPF读书笔记(第一天)

今天开始学习WPF,大家都推荐<深入浅出WPF>这本书,一下是我觉得此书中重要的地方,记录下来以便以后回顾,也希望其他人看到了对你们有帮助. 1.XAML是可扩展应用程序标记语言 是WPF技术中专门用于设计UI的语言. 2.Attribute和Property的区别,虽然它们都被翻译为“属性”,但是这两个词表达的不是一个层面上的东西,Property属于面向对象理论范畴 比如对车的抽象是Car这个类,Car.Speed就叫做Property,总而言之,Property事故针对面向对象而言的.A

WPF学习笔记4&mdash;&mdash;Layout之2

下面简单介绍常见的面板. 一.Grid 1.Grid关于调整行列距离有三种方法:绝对大小,自动大小,比例大小.如下: <ColumnDefinition Width="100"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="*"></Co

Linux 程序设计学习笔记----文件管理实例应用

一.使用ls -l 以排序方式输出目录信息 1.需求以及知识点覆盖 ls -l 命令根据后面的参数将列出某文件即目录下的基本信息. 如果没有具体的目录或者文件,则列出当前目录下所有的非隐藏文件的信息,包括文件类型,文件权限,硬链接个数,拥有者.拥有者所在组,文件大小,文件更新时间等. such as : 若没有指定的文件,则输出所有目录下的文件信息: 所以,本应用要实现的基本功能和需要的知识点有: ①参数检查.包括参数个数检查,如果有多个需要列出信息的文件及目录,则遍历所有的参数,另外需要读取当

WPF学习笔记2&mdash;&mdash;XAML之2

三.事件处理程序与代码隐藏 例如,为一个Page添加一个Button控件,并为该Button添加事件名称Button_Click: <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="ExampleNamespace.ExampleP

WPF学习笔记系列之一 (布局详情)

布局:StackPanel  栈布局:控件不会拐弯且多出的不再显示.DockPanel   停靠布局 吸在上边下边或左右.WrapPanel    环绕布局   一行控件会拐弯Canvas  进行基于坐标的布局 Grid中若不指定Grid.Row属性及Grid.Column则默认为:0行,0列.RowDefinitions ColumnDefinitions ShowGridLines=true <ColumnDefinition Width="100"></Colu

【项目实例】android开发游戏音效代码实例

//音效的音量 int streamVolume; //定义SoundPool 对象 private SoundPool soundPool; //定义HASH表 private HashMap<Integer, Integer> soundPoolMap; /*************************************************************** * Function: initSounds(); * Parameters: null * Returns

【WPF学习笔记】之 System.Exception 对象名 &#39;XXXX&#39; 无效。

我在运行vs时候发现项目报错,如下图: 报Exception错误,对象名"XXXXXX"无效. 经过调查得知,因为连接数据库的库名写错了,如下: 对应正确数据库的库名: 把库名改正确,问题就解决了. [WPF学习笔记]之 System.Exception 对象名 'XXXX' 无效.

Vue2.0笔记——Vue实例

Vue实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue({ // 选项 }) 当创建一个 Vue 实例时,你可以传入一个选项对象,就如前面所提到的如:data,methods,computed,watch等等.一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实例,以及可选的嵌套的.可复用的组件树组成.举个例子,一个 todo 应用的组件树可以是这样的: 根实例Root └─ TodoList ├─ TodoIte