c#代码,但在java上实现。将IEnumerable方法插入List

时间:2014-04-04 23:08:56

标签: c# java arraylist

以下是C#中的代码示例。我想要做的是在java中做同样的事情。总的来说,我有Enemy类可以创造不同类型的敌人。每个敌人都有自己的行为。

// Creating list of behaviours for enemies
private List<IEnumerator<int>> behaviours = new List<IEnumerator<int>>();

// Adding behaviours into list
private void AddBehaviour(IEnumerable<int> behaviour)
{
    behaviours.Add(behaviour.GetEnumerator());
}

public static Enemy CreateSeeker(Vector2 position)
{
    var enemy = new Enemy(Art.Seeker, position);
    enemy.AddBehaviour(enemy.FollowPlayer());

    return enemy;
}
// Method of type IEnumerable<int> to be able to add it to List. This method contains behaviour 
// of enemy. 
IEnumerable<int> FollowPlayer(float acceleration = 1f)
{
    while (true)
    {
        Velocity += (PlayerShip.Instance.Position - Position).ScaleTo(acceleration);
        if (Velocity != Vector2.Zero)
            Orientation = Velocity.ToAngle();
 // yield keyword allows to return function and resume when it will be called one more time.
        yield return 0;
    }
}

我从本指南中获取了此代码:http://gamedevelopment.tutsplus.com/tutorials/make-a-neon-vector-shooter-in-xna-more-gameplay--gamedev-10103 现在我想在我的java代码中进行相同的实现。但我遇到了一些问题。 我真的不明白如何将方法FollowPlayer添加到列表中。甚至这个方法应该怎么样。下面我展示我自己的实现。但似乎我的游戏进入了永久循环,一切都停顿了。

// We  will be adding Iterable<Enemy> methods with enemy behaviour into our Iterable<Enemy> type 
ArrayList private ArrayList<Iterator<Enemy>> behaviours = new ArrayList();

private void addBehaviour(Iterable<Enemy> behaviour) {
    behaviours.add(behaviour.iterator());
}

public static Enemy createSeeker(Vector2 position){
    Enemy enemy = new Enemy(AssetLoader.seeker, position);
    enemy.addBehaviour(enemy.followPlayer());
    return enemy;
}

private Iterable<Enemy> followPlayer() {
    while (true) {
        velocity.add(PlayerShip.instance.position.sub(position).scl(acceleration));
        if (velocity != Vector2.Zero)
            orientation = velocity.angle();

        Thread.yield();

    }
}

我只是需要帮助才能理解我做错了,甚至是朝着正确的方向前进。当然,我可以为每个敌人类型创建不同的类,它将包含它的行为和规范。 特别是我不确定将Iterable设置为返回类型以及如何使用Thread.yield()函数。 我会感激任何帮助。提前谢谢!

0 个答案:

没有答案