【问题标题】:Making an instantiated class array with a method使用方法制作实例化的类数组
【发布时间】:2014-12-25 00:48:50
【问题描述】:

我有一个类“Bullet”,我使用 CreateBullet() 方法对其进行实例化,因为会有多个项目符号,所以我决定将项目符号设为一个数组,尽管这没有成功并且我已经花费了尝试修复它一个小时。

我在 Initialize 方法中调用的内容:

Bullet bullet[] = Bullet.CreateBullet[1]();

子弹类:

class Bullet
{
    public float2 position;
    public float angle { get; set; }
    public float speed { get; set; }
    public static Bullet CreateBullet()
    {
        Bullet bullet = new Bullet()
        {
            position = new float2()
        };
        return bullet;
    }
    public void Move()
    { 
    }
}

你能告诉我代码有什么问题吗?提前谢谢你。

【问题讨论】:

  • 在学习如何填充最简单的数组之前制作游戏?这是错误的:Bullet bullet[] = Bullet.CreateBullet[1]();,除此之外......开始阅读文档msdn.microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx
  • 您可能想研究泛型:List<Bullet>更容易使用。
  • 对不起,我知道这看起来很愚蠢,但我以前对数组几乎没有经验。
  • 谢谢,我会尝试使用列表:)
  • 无论如何,您不一定需要一个数组,因为@Plutonix 提到了 Bullet 类型的通用列表会做得更好。在这里看看他们>msdn.microsoft.com/en-us/library/512aeb7t.aspx

标签: c# arrays methods initialization


【解决方案1】:

这样,您可以创建一个包含 5 个项目符号的数组:

        Bullet[] bullets = new Bullet[5];

然后您需要通过为每个数组条目创建一个项目符号来填充数组:

        for (int i = 0; i < bullets.Length; i++)
        {
            bullets[i] = Bullet.CreateBullet(); 
        }

您可以将此逻辑包装在一个函数中:

    public Bullet[] CreateBullets(int amount)
    {
        Bullet[] bullets = new Bullet[amount];
        for (int i = 0; i < bullets.Length; i++)
        {
            bullets[i] = Bullet.CreateBullet(); 
        }

        return bullets;
    }

然后你可以使用一个函数来初始化数组:

    public void Test()
    {
        Bullet[] bullets = CreateBullets(5);
    }

【讨论】:

    【解决方案2】:

    你可以做这样的事情,不是你想要达到的目标,但它可能会激励你更多

    用法

    // Create your bullets
    var bullets = new List<Bullet>();
    
    // Create a raw/empty bullet with default properties 
    var newBullet1 = new Bullet();
    
    // Create bullet with some initialized properties
    var newBullet2 = new Bullet()
       {
          Angle = 35, 
          Position = 0, 
          Speed = 200
       };
    
    bullets.Add(newBullet1);
    bullets.Add(newBullet2);
    

    一些额外的乐趣

    // Move all your bullets at once
    foreach (var bullet in bullets)
    {
       bullet.Move();
    }
    

    【讨论】:

    • 代表集合的类应该这样命名(“嘿,给我那个子弹”听起来很愚蠢),如“BulletCollection”或“BulletList”。也就是说,除非您为其提供与项目符号相关的明确功能,否则我会坚持使用List&lt;Bullet&gt;
    • 公平评论,不过我个人喜欢 Bullets :)
    • 感谢伟大而强大的萨鲁曼,你的魔法和代码比我的好!
    • @Croccy 很高兴我能帮上忙
    • @Croccy 记得对问题进行相应的投票和标记,如果它们适合您的目的:)
    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多