首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使多个游戏对象的多线程在统一C#中移动

如何使多个游戏对象的多线程在统一C#中移动
EN

Stack Overflow用户
提问于 2018-04-06 16:18:19
回答 1查看 3.6K关注 0票数 2

我现在有个问题。我正在为轰炸机游戏创建一个基因编程人工智能。

我的问题与线程有关,我想同时执行我的基因组。

下面是一个示例:

我有一个群体

代码语言:javascript
复制
Genome[] population = //5 genomes for example

每个基因组都有一个动作或动作,如UPLEFTRIGHT,DOWN,codeE 210

它产生随机动作:

基因组1右,炸弹,左,上,右.

基因组2左左右左炸弹..。

等等。

这些动作或动作在玩家还活着之前都是有效的。我想应用这些移动在我的球员(AI)使用线程。

我试过这个:

代码语言:javascript
复制
for(Genome g in population){
     Thread thread = new Thread(g.run);
     thread.Start();
}

在run()方法中,它生成随机移动,并将其应用于游戏对象(即AI )。举个例子,上去再上去。我用协同线来做动作,因为这些动作都有动画。

这个游戏是实时的,每帧都会触发移动。

是否有可能让我所有的基因组在单独的线程中同时运行?可能在游戏对象的另一个实例中。我不想让我的人工智能被这些动作弄糊涂。

我有一个可能的解决方案,但我不知道如何实现它。

每个基因组都有关于游戏、敌人、炸弹等的相同信息,但是它们的移动是不同的,例如:

5台电脑具有相同的游戏环境和相同的敌人。

然而,每台电脑都由不同的人工智能(基因组)扮演,不同的动作会得到不同的结果。在第一个基因组中,他在游戏早期3秒后死亡,另一个基因组在5秒后死亡。然后,另一个还活着,就像这样。我不知道这是否可能,但你能给我一些关于我的情况的建议吗?

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-08 01:12:14

我已经成功地在一个循环中为每个基因组创建了一个线程,并且它可以工作。

代码语言:javascript
复制
foreach(Genome g in population)
{
    GP_Agent gp_agent = new GP_Agent();

    //passing the callback method, when the process is done then invoke the callback
    ThreadStart thread = delegate{
         gp_agent.next_move(g, callback);
    };
    thread.Invoke();
}

public void callback(String move){
     //apply the result move from the genome
    Debug.Log(genome.id + " = " +move);
}

作为这个代码的结果。我同时得到了所有基因组的移动

1=向上

2=下降

3=左

当我将这些移动应用到游戏对象时。AI很困惑,因为这些动作同时适用,这就是我想要的

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

https://stackoverflow.com/questions/49697078

复制
相关文章

相似问题

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