一起谈.NET技术,Silverlight 游戏开发小技巧:传说中的透视跑马灯

简介:   昨夜元宵佳节,各种灯会热闹非凡,伴随烟火灿烂好不热闹,可惜一点也没看着T_T,那就写一个跑马灯吧,可是跑马灯并不稀奇,各位高手们已经写过而且都各有特点,所以,写也要写点有特色的才好,游戏中经常能看到一种带有透视的选人界面,上次写的是一个固定效果,那么这次带上点动画,结合一个Silverlight的MVC开发小技巧快速完成它。

  昨夜元宵佳节,各种灯会热闹非凡,伴随烟火灿烂好不热闹,可惜一点也没看着T_T,那就写一个跑马灯吧,可是跑马灯并不稀奇,各位高手们已经写过而且都各有特点,所以,写也要写点有特色的才好,游戏中经常能看到一种带有透视的选人界面,上次写的是一个固定效果,那么这次带上点动画,结合一个Silverlight的MVC开发小技巧快速完成它。

00  仍然继续偷懒,借用之前的控件:Silverlight 游戏开发:简单的技能条系统

  把Card控件拿出来,然后做一下简单的修改,然后打开XAML文件,填入如下的代码:

1  这是给UserContrl增加了一个Projection,这是3D变换方面的属性,注意后面的x:Name="myProjection"是给这个对象做了一个命名,这样就可以在.cs中直接访问控制,而不需要麻烦的增加新的代码。

2  看代码中可以直接使用这个对象,这应该算是Silverlight优秀的便捷开发技巧。

  现在在MainPage中增加一个用来放图标的容器:

3  将它放置在中间或者其他你想要的位置。

  现在需要写代码了,为FaceCard类增加如下代码:

 
   
public FaceCard()
{
InitializeComponent();
Sel_Rectangle.Visibility
= System.Windows.Visibility.Collapsed;
myProjection.CenterOfRotationZ
= - 200 ;
}
public double AngleY
{
get { return myProjection.RotationY; }
set
{
myProjection.RotationY
= value;
if (value > 0 )
this .Opacity = Math.Abs(value % 360 - 180 ) / 180 + 0.2 ;
else
this .Opacity = Math.Abs(value % 360 + 180 ) / 180 + 0.2 ;
myTransform.ScaleX
= myTransform.ScaleY = Opacity + 0.1 ;
}
}

  注意在构造函数中,对旋转的中心进行了设置,为Z轴的-200位置,也就是说,所有的旋转都会围绕(0,0,-200)3D空间点上旋转,而AngleY是围绕Y轴进行旋转数值,它可以通过RotagtionY来获得,在赋值的代码中,进行了一个处理,就是当旋转到后面的时候,就会不清晰,这样看起来更加真实,当然了也可以通过Effect来完成。

  下面打开MainPage类,做一些改造:

 
   
public partial class MainPage : UserControl
{
public const int MaxFaceSum = 10 ;
public const double Speed = 10 ;
public MainPage()
{
InitializeComponent();
for ( int i = 0 ; i < MaxFaceSum; i ++ )
{
var face
= new FaceCard();
face.FaceIndex
= i % MaxFaceSum;
FaceGroupPanel.Children.Add(face);
face.AngleY
= ( 360 / MaxFaceSum) * i;
}
CompositionTarget.Rendering
+= new EventHandler(CompositionTarget_Rendering);
}
double mouseOffset;
protected override void OnMouseMove(MouseEventArgs e)
{
var aw
= App.Current.Host.Content.ActualWidth / 2 ;
mouseOffset
= (aw - e.GetPosition( null ).X) / aw * Speed;
base .OnMouseMove(e);
}
void CompositionTarget_Rendering( object sender, EventArgs e)
{
for ( int i = 0 ; i < MaxFaceSum; i ++ )
{
var face
= FaceGroupPanel.Children[i] as FaceCard;
if (face != null )
face.AngleY
+= mouseOffset;
}
}
}

  代码很简洁,我使用CompositionTarget.Rendering作为循环逻辑,并增加了10个小图标,这个初始最大值写成const以方便随时修改,在MouseMove事件中,做了个数值计算得出一个偏移数值,而这个数值将会影响到旋转,参见CompositionTarget_Rendering(object sender, EventArgs e) 中的写法,考虑扩展性,可以修改速度等参数来达到一些效果。

  现在已经完成,运行起来看看如何呢,在这个基础上,我们能够做一些广告效果,或者游戏中的选人选物品的功能,我估计最刺激的是,如果能做成开宝箱的转盘就有意思了。

  本篇工程源代码下载地址如下:点击直接下载

目录
相关文章
|
jenkins 测试技术 持续交付
解锁.NET项目高效秘籍:从理论迷雾到实践巅峰,持续集成与自动化测试如何悄然改变游戏规则?
【8月更文挑战第28天】在软件开发领域,持续集成(CI)与自动化测试已成为提升效率和质量的关键工具。尤其在.NET项目中,二者的结合能显著提高开发速度并保证软件稳定性。本文将从理论到实践,详细介绍CI与自动化测试的重要性,并以ASP.NET Core Web API项目为例,演示如何使用Jenkins和NUnit实现自动化构建与测试。每次代码提交后,Jenkins自动触发构建流程,通过编译和运行NUnit测试确保代码质量。这种方式不仅节省了时间,还能快速发现并解决问题,推动.NET项目开发迈向更高水平。
327 8
|
人工智能 前端开发 开发工具
NET在企业级应用、Web开发、移动应用、云服务及游戏领域的创新实践
.NET技术自2000年推出以来,在软件开发领域扮演着关键角色。本文从核心优势出发,探讨其统一多语言平台、强大工具集、跨平台能力及丰富生态系统的价值;随后介绍.NET在企业级应用、Web开发、移动应用、云服务及游戏领域的创新实践;最后分析性能优化、容器化、AI集成等方面的挑战与机遇,展望.NET技术的未来发展与潜力。
386 2
|
人工智能 开发框架 Devops
.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。
【7月更文挑战第4天】.NET技术概览:** 本文探讨了.NET的核心特性,包括多语言支持、Common Language Runtime、丰富的类库和跨平台能力,强调其在企业级、Web、移动及游戏开发中的应用。此外,讨论了.NET如何通过性能优化、DevOps集成、AI与ML支持以及开源策略应对未来挑战,为开发者提供强大工具,共创软件开发新篇章。
660 3
|
人工智能 物联网 开发者
**.NET技术革新赋能软件开发:从.NET 5的性能飞跃、跨平台支持,到微服务、物联网、AI和游戏开发的广泛应用。
【7月更文挑战第4天】**.NET技术革新赋能软件开发:从.NET 5的性能飞跃、跨平台支持,到微服务、物联网、AI和游戏开发的广泛应用。随着云集成深化、开源社区壮大,未来将聚焦性能优化、云原生应用及新兴技术融合,培养更多开发者,驱动软件创新。**
506 1
|
Java Spring UED
Spring框架的异常处理秘籍:打造不败之身的应用!
【8月更文挑战第31天】在软件开发中,异常处理对应用的稳定性和健壮性至关重要。Spring框架提供了一套完善的异常处理机制,包括使用`@ExceptionHandler`注解和配置`@ControllerAdvice`。本文将详细介绍这两种方式,并通过示例代码展示其具体应用。`@ExceptionHandler`可用于控制器类中的方法,处理特定异常;而`@ControllerAdvice`则允许定义全局异常处理器,捕获多个控制器中的异常。
314 0
|
搜索推荐 C# Windows
一款.NET开源、免费、实用的多功能原神工具箱(改善桌面端玩家的游戏体验)
一款.NET开源、免费、实用的多功能原神工具箱(改善桌面端玩家的游戏体验)
768 0
|
存储 程序员 定位技术
使用 .NET 标记游戏地图关键坐标点
本文以天涯明月刀 OL 游戏的云上之城探索玩法为例,介绍如何使用 .NET 在游戏地图中标记大量关键坐标点。
491 0
使用 .NET 标记游戏地图关键坐标点

热门文章

最新文章