首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于角色的C#服装系统

用于角色的C#服装系统
EN

Stack Overflow用户
提问于 2011-12-10 05:32:52
回答 3查看 446关注 0票数 4

我正在尝试创建一个灵活的系统来为我的游戏中的角色穿衣。现在,我已经有了一个基类,所有的儿童服装类都将从这个基类中进行扩展,还有一些额外的接口,可以将它们实际穿着的身体部位带入等式中。下面是我的代码:

代码语言:javascript
复制
public class Clothing
{
    public EClothingBind[] Types;
    public int ID;
    public int Priority;
    public bool HidesUnderlying;
    public AnimatedSpriteMap Graphic;
    public Color Blend = Color.White;

    public virtual void Update(GameTime gameTime) 
    {
        Graphic.Update(gameTime);
    }

    public virtual void Draw(Vector2 position)
    {
        Graphic.Tint = Blend;
        Graphic.Draw(position);
    }
}

public interface IClothingHead { ... }
public interface IClothingChest { ... }
public interface IClothingLegs { ... }
public interface IClothingFeet { ... }

现在,这并不能很好地工作,因为设计并没有真正限制什么可以实现我的IClothing接口。有没有办法将接口实现限制为某些类型?我不想把我的接口变成类,因为我想要一件衣服,比方说一件长袍,来覆盖整个身体(实现所有四个)。我有点迷失在什么是最好的方式去做这件事,所有的投入是非常感谢。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-10 05:42:18

我认为使用这种方法会让你自己面临一段艰难时期。当然,一件长袍涵盖了所有的东西,从图形上看,它会影响这4个区域的“护甲”值。但是像这样实现它看起来非常麻烦。你可能只想要一个单一的IClothing接口,并且对它可以放在哪里有一些标识(例如:手/脚等)。传统上,长袍通常是一件胸衣,但从图形上看,它们覆盖了整个角色。

代码语言:javascript
复制
enum PositionType
{
    Head,
    Chest,
    Hand,
    Feet,
    Finger,
    Neck
}


public interface IClothing
{
    PositionType Type { get; }
    // Other things you need IClothing-classed to implement
}

我认为这可能是一种更好的方法,而不是试图通过实现多个接口来精确调整特定衣物的身体部位。

票数 6
EN

Stack Overflow用户

发布于 2011-12-10 06:11:23

这扩展了moo-Juice的答案(只是不把它放在评论中,因为格式是不允许的)。

您可以让您的PositionType具有属性标志,以便您可以执行以下操作:

代码语言:javascript
复制
[Flags]
enum PositionType
{
    Head,
    Chest,
    Hand,
    Feet,
    Finger,
    Neck
}

Armor robe = new Armor(); //sure why not.
robe.ArmorValue = 125.3;
robe.Appeal = 100;    
robe.PositionType = PositionType.Chest | PositionType.Arms | PositionType.BellyButton; 

等。

票数 3
EN

Stack Overflow用户

发布于 2011-12-10 08:35:07

与其按照服装的类别来划分界面,不如让每一件服装都标明它是什么(头饰、长袍等),这可能更有帮助。虽然这样的方法在面向对象编程中通常是不受欢迎的,但可能并不是所有的方法都适用于一种类型的服装,而不能应用于其他类型的服装(即使在某些情况下,效果可能是“无动作”)。例如,如果有一个方法"AnimateResponseToHeadMovement","TopHat“实际上可能会做一些事情,而"LeftSock”不会,但"LeftSock“的行为仍然是定义良好的。请注意,相当广泛地定义动作将考虑到这样的情况,例如,一个人的帽子可能必须根据他们的手臂运动进行动画处理,因为它特别低地挂着。如果IHeadWear接口中没有"AnimateResponseToArmMovement“方法,那么这样的响应可能是不可能的。

我怀疑一个更大的问题将是定义衣物之间的互动方式。您可能希望定义一个"CanBeWornInCombinationWith“方法,该方法接受衣物列表并报告是否存在任何冲突。也可以定义每件衣服所需的“资源”列表,并确认是否有足够的“资源”来穿所有请求的衣服。请注意,如果一些衣服比其他衣服更挑剔它们所需的资源(例如,一些衣服只能穿在右手上,而另一些衣服可以穿在右手上),这种方法可能会有点复杂。即使是定义一个允许服装识别组合是否可以穿的界面也是一个挑战。

在设计界面之前,我建议你弄清楚你真正想做的是什么;你需要多大的功能来允许不同服装类型之间的互动,以及服装应该具有哪些功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8451955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档