技术开发 频道

Windows游戏专家:Silverlight3开发基础

  【IT168专稿】在本系列文章中,你将学习编写一个基于Silverlight 3的纸牌游戏。你会注意到,这款游戏酷似各种版本的Windows中自带的纸牌游戏。我们写这个游戏的主要目的是为了探讨Siverlight 3中对于游戏开发技术特别是鼠标拖放功能的支持。

  注意,本文纸牌游戏应用程序的开发及测试环境如下:

  ? Windows XP Professional (SP3)

  ? .NET 3.5(SP1)

  ? Visual Studio 2008 Professional (SP1)

  ? Microsoft Expression Blend 3

  ? Microsoft Silverlight Tools for Visual Studio 2008 SP1

  相信每一位Windows读者肯定会熟悉其自带的纸牌游戏。如今,Silverlight技术日益流行,成为基于微软技术开发下一代富客户端Web应用的主要平台。本系列文章将尝试使用Silverlight 3技术来开发类似Windows提供的纸牌游戏。在这一系列文章中,你除了会学习到开发这款游戏软件所涉及的主要实现思想外,还会学习到基本的Silverlight 3编程技术,特别是鼠标编程技巧。

  在本篇中,我们将主要讨论有关开发纸牌游戏的基本知识。之后,我们将简要介绍纸牌游戏的基本规则。最后,讨论纸牌游戏开发所涉及的重要数据结构和基本的实现代码。

  一、创建自己的鼠标拖放方案

  老实说,在开发纸牌游戏的开始,我几乎搜遍了整个互联网,试图找到某种合适的基于Silverlight且能够尽快投入到纸牌游戏中使用的鼠标拖动解决方案。为此,我研究了许多专家在解决Silverlight问题时提供到多种鼠标拖放解决方案,例如TranslateTransform解决方案,Expression Blend 3 MouseDragElementBehavior解决方案,类似于Flex的DragManager解决方案 ,CodePlex开源网站提供的MouseClickManager解决方案,等等。然而,每一款都有自己的瑕疵,无法直接应用于纸牌游戏开发中。最后,我决定使用最基本的Silverlight鼠标拖放解决方案—尽管琐碎了一些,但也具有最大的灵活性。

  在下面几节中,我们将讨论在开发我们自己的鼠标拖放和双击解决方案中所涉及到的一些重要概念。

  二、处理扑克控件的坐标问题

  Silverlight 3对于其各种容器控件,如Grid、Canvas和Stack等,提供了不同的坐标管理方案。为了简化纸牌游戏的设计,我们选择使用Canvas控件作为所有扑克控件的容器控件。因此,我们可以借助下列函数来处理扑克控件对应的坐标问题:

public class Canvas : Panel
{
    
public static readonly DependencyProperty LeftProperty;
    
public static readonly DependencyProperty TopProperty;
    
public static double GetLeft(UIElement element);
    
public static double GetTop(UIElement element);
    
public static void SetLeft(UIElement element, double length);
    
public static void SetTop(UIElement element, double length);
    
//省略其他……
}

  在我们的游戏中,我们直接使用上面的方法GetLeft和GetTop获得扑克控件的左上角坐标信息(注意:这些坐标是相对于父控件Canvas的)。另一方面,我们使用另外两个方法SetLeft和SetTop指定扑克牌控件左上角坐标位置。这样一来,我们便可以在画布上根据事先设计随意地控制扑克牌的位置。

0
相关文章