使用此模式之前,你可能有一个角色,它的碰撞检测方法(C#属性)如下:
Rectangle CollisionRect { get; }
Rectangle CollisionRectHurt { get; }
这里定义了针对障碍物和敌人的不同碰撞范围,返回不同大小的碰撞检测矩形包围盒。
我们可以用策略模式重构这种设计,首先定义接口:
namespace StrategyPattern
{
interface IStrategy
{
Rectangle CollisionRect { get; }
}
}
实现这个接口的具体碰撞检测策略:
namespace StrategyPattern
{
class CollisionStrategy1:IStrategy
{
Rectangle CollisionRect { get; }
}
}
使用这个策略接口的角色类:
namespace StrategyPattern
{
class Man
{
private IStrategy strategy;
public Rectangle CollisionRect
{
get
{
switch(){}
return null;
}
}
}
}
当然,在你那里完全照搬代码可能会出现很多红色下划线代码错误,这是因为我使用了XNA4.0框架,加入了很多引用:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media;
不过最关键的是,在我的项目中,最终我并没有选择这种方法!这是因为我的项目的碰撞检测返回矩形包围盒的代码并不多,使用这种方法反而麻烦。
本文探讨了如何使用策略模式重构角色碰撞检测方法,包括定义接口、具体策略实现及角色类的应用。虽然在特定项目中这种方法可能并不适用,但提供了在碰撞检测中灵活运用策略模式的思路。
926

被折叠的 条评论
为什么被折叠?



