本文主要是介绍打造轻量级Windows Phone7 游戏引擎-Samurai 第四话 Button(上),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Button模块我打算分两部分来介绍,第一部分是介绍绘制精灵,第二部分是正式的Button。
首先什么是Button呢?或者说Button应该是什么样子的呢?
当然了,就我们平常的经验来说,Button不就是一个按钮吗,可以被点击然后实现相应的功能。它往往是一个矩形的区域,里面写上相关的功能,点击一下好像被按下去了一样。大致如此。
Samurai中的Button本质上是多了一些与SAInput交互的接口的精灵类。
什么是精灵类?就是我们用来绘制游戏角色的一系列动作的类。
我们先来定义精灵类的基类SASprite(当然还是抽象类)
public abstract class SASprite{public Texture2D texture;public Color color;public Vector2 position;public virtual Vector2 Size { get { return new Vector2(rectangle.Width, rectangle.Height); } } //获取Sprite的大小public virtual Rectangle rectangle { get { return new Rectangle((int)position.X, (int)position.Y, (int)Size.X, (int)Size.Y); } }//获取Sprite的碰撞矩形public virtual Rectangle sourceRectangle { get; set; } //截取绘制图像位置public SASprite() { }public SASprite(Texture2D texture) : this(texture, Vector2.Zero) { }public SASprite(Texture2D texture, Vector2 positon) : this(texture, (int)positon.X, (int)positon.Y) { }public SASprite(Texture2D texture, int pos_x, int pos_y){this.texture = texture;this.position = new Vector2(pos_x, pos_y);this.color = Color.White;}//判断是否有相交部分public virtual bool IfCollide(Rectangle rect){return rectangle.Intersects(rect);}//外部调用的Draw接口public void Draw(){Draw(SAGlobal.spriteBatch);}public virtual void Draw(SpriteBatch spriteBatch){spriteBatch.Draw(texture, position, color);}}
这个类是最简单最基本的一个精灵类,它只有一个纹理(图像),有相关的颜色、位置的信息(这里为什么用属性,而且还是virtual的?看了后面你就明白了)
它包含了最基本的“碰撞检测”以及“绘制”的方法。
SASprite有两个子类,一个是只能绘制一帧图像的SASimpleSprite,一个是可以绘制多帧动画的SAActionSprite(好吧,他是SASprite的孙子类):
先来看看SASimpleSprite:
public class SASimpleSprite:SASprite{public SASimpleSprite() { }/// <summary>/// 在指定位置绘制整张纹理/// </summary>/// <param name="texture">纹理</param>/// <param name="postion">位置</param>public SASimpleSprite(Texture2D texture, Vector2 postion){this.texture = texture;this.sourceRectangle = new Rectangle(0,0,texture.Bounds.Width,texture.Bounds.Height);this.position = position;this.color = Color.White;}/// <summary>/// 直接绘制整张纹理/// </summary>/// <param name="texture">纹理</param>public SASimpleSprite(Texture2D texture): this(texture, Vector2.Zero){ }/// <summary>/// 在指定position绘制指定的sourceRectangle范围内的纹理/// </summary>/// <param name="texture">纹理</param>/// <param name="sourceRectangle">纹理矩形</param>/// <param name="position">位置</param>/// <param name="color">指定颜色</param>public SASimpleSprite(Texture2D texture,Rectangle sourceRectangle,Vector2 position,Color color){this.texture = texture;this.sourceRectangle =
这篇关于打造轻量级Windows Phone7 游戏引擎-Samurai 第四话 Button(上)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!