第一帖—拼图小游戏
来源:互联网 发布:sharp m2658n 网络扫描 编辑:程序博客网 时间:2024/05/21 06:48
经过一段时间的努力,完成了一个Silverlight拼图小游戏,代码主要实现过程如下:
1、在Blend绘制拼图源图形(目前实现了3种类型*3个级别=9种样式);
2、初始化加载视频及相关背景音乐,并用视频刷填充源图形:
/// <summary>
/// 获取视频刷
/// </summary>
/// <param name="mediaElement">要填充的视频块</param>
/// <param name="offsetX">填充X轴坐标信息</param>
/// <param name="offsetY">填充Y轴坐标信息</param>
/// <returns>Fill VideoBrush</returns>
public VideoBrush GetVideoBrush(MediaElement mediaElement, int offsetX, int offsetY)
{
VideoBrush vb = new VideoBrush();
TranslateTransform videoTransform = new TranslateTransform();
videoTransform.X = -1 * offsetX;
videoTransform.Y = -1 * offsetY;
vb.SetSource(mediaElement);
vb.Transform = videoTransform;
vb.Stretch = Stretch.None;
vb.AlignmentX = AlignmentX.Left;
vb.AlignmentY = AlignmentY.Top;
vb.Opacity = 1.0;
return vb;
}
3、混淆视频块坐标进入游戏,记时跑马表开始记时;
4、视频移动及联动控制(这里涉及到动态创建和播放动画控制):
/// <summary>
/// 动态创建和播放 移动、吸咐动画
/// </summary>
/// <param name="control">要移动的元件块</param>
/// <param name="toPoint">移动至坐标</param>
/// <param name="duration">移动持续时长(秒)</param>
public void VidepPartMove(FrameworkElement control,Point toPoint,Duration duration)
{
if (!control.Resources.Contains(control.Name + "StoryBoard")) //不存在为元件创建动画
{
DoubleAnimation xa = new DoubleAnimation();
xa.Duration = duration;
xa.To = toPoint.X;
DoubleAnimation ya = new DoubleAnimation();
ya.Duration = duration;
ya.To = toPoint.Y;
Storyboard sb = new Storyboard();
sb.Duration = duration;
sb.Children.Add(xa);
sb.Children.Add(ya);
Storyboard.SetTarget(xa, control);
Storyboard.SetTargetProperty(xa, new PropertyPath("(Canvas.Left)"));
Storyboard.SetTarget(ya, control);
Storyboard.SetTargetProperty(ya, new PropertyPath("(Canvas.Top)"));
control.Resources.Add(control.Name + "StoryBoard", sb);
sb.Completed += new EventHandler(sb_Completed);
sb.Begin();
}
else //存在时更改动画属性播放动画
{
Storyboard sb = (Storyboard)control.Resources[control.Name + "StoryBoard"];
//sb.Stop();
for (int i = 0; i < sb.Children.Count; i++)
{
if (sb.Children[i].GetType() == typeof(DoubleAnimation))
{
DoubleAnimation da = (DoubleAnimation)sb.Children[i];
if (Storyboard.GetTargetProperty(da).Path == "(Canvas.Left)")
{
da.To = toPoint.X;
}
else if (Storyboard.GetTargetProperty(da).Path == "(Canvas.Top)")
{
da.To = toPoint.Y;
}
}
}
sb.Begin();
}
}
5、拼图成功,得分记录,最高分记录。
实际设计开发过程中,会有很多细节问题如:对已拼接视频组合、级联判断比较繁琐,同时需完成高分
记分牌,记时跑马表等小功能组件。
有兴趣的朋友可试玩一下地址(视频初次时加载可能会花较多时间,需要你耐心等待一小会^_^):
http://silverlight.services.live.com/invoke/103743/VideoPuzzle/iframe.html
- 第一帖—拼图小游戏
- Android—拼图小游戏
- 拼图小游戏
- 拼图小游戏
- java拼图小游戏
- JS数字拼图小游戏
- JavaScript拼图小游戏
- swift 拼图小游戏
- android 美女拼图小游戏
- iOS之拼图小游戏
- VS,C#--拼图小游戏
- java智力拼图小游戏
- 美女拼图小游戏
- Android移动拼图小游戏
- android-拼图小游戏
- Android 小游戏 :撸啊撸拼图
- java拼图小游戏
- Android-拼图小游戏
- 事实是什么? 关于linux的硬链接和软链接。
- 函数模板为什么没有偏特化?问题解答
- C#中抽象类和接口的区别
- AjaxPro的使用方法
- 用ajaxPro操作List
- 第一帖—拼图小游戏
- 工业和信息化部副部长娄勤俭:我国通信资费每年保持20%下降速度
- 利用VC++开发简单的文本输入工具
- netflow配置
- netflowv9介绍及数据包格式
- OOP概述
- 生命游戏 题解
- Linux开发GUI应用程序概述
- netflowv9举例