【问题标题】:C# XNA - Inventory/destructable terrain & collectionC# XNA - 库存/可破坏地形和收集
【发布时间】:2011-10-14 21:44:34
【问题描述】:

我无法在标题中很好地描述问题。如果某人有编辑权限并且可以更好地措辞,请随意。

所以我有一个不错的小地形,它是可破坏的,但如果有人,比如说,打破一棵树,我怎样才能让它在他们的库存中添加一棵树?

我不是在寻找代码,只是一种方法。

每个方块都有自己的类,都继承自基类 Block,当方块被破坏时,它会掉落一种可拾取的婴儿方块。

我能够做到这一点,但我很困惑,因为你的想法是你可以打破积木并将它们放置在其他地方(是的,有点像 Minecraft),那么我该如何让这个库存系统工作呢?我想了两天,一无所获。

【问题讨论】:

  • 所以,您可以通过损坏的方块来掉落物品,而您想知道如何将该物品放入库存或其他什么?
  • 差不多。我想知道如何丢弃该项目。我想我可以做一些类似 (new DroppedItem(ItemToBeRemoved.Texture)) 的事情,但我想知道如何告诉被丢弃的物品在玩家捡起它时该给玩家什么物品。我想我在读一些关于反思做我想做的事的东西,但我的记忆力比金鱼还差。

标签: c# .net xna inventory


【解决方案1】:

商品需要某种 ID 代码。你显然已经有了一个来存储世界本身。

当你砍掉它时,它有一种“树”。

“树”+ 砍 =>“砍树”

当它被捡起时,你从世界中移除砍伐的树木图形并将砍伐的树木物品放入玩家的物品栏中。

【讨论】:

  • 所以基本上我只是做这样的事情:if (item.name == "chopped wood") {inventory.add block(wood)} etc etc?
  • 基本上,但您可能想要一种比硬编码更好的做事方式。
  • @AshleyDavies:你为什么要看文字?你已经有一个用来绘制它的方块 ID,使用它!
【解决方案2】:

我认为使用一些伪代码会更容易,而不是用文字来解释它:

public enum MaterialType
{
    Wood,
    Stone,
    Count // this should always be the last one
}

public class Block
{
    MaterialType m_type;
}

public class Player
{
    MaterialType m_inventory[MaterialType.Count];
}

// call this when you break a block
public class World
{
    public void OnBlockDestroyed()
    {
        player.m_inventory[block.m_type]++;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多