C# 可观察。仅在第一个实例中触发间隔
我正在尝试将反应式扩展用于MonoGame。我不知道这是新的还是有人在我之前尝试过,但我得到的结果好坏参半 我的情况如下。我有一堆C# 可观察。仅在第一个实例中触发间隔,c#,.net,reactive-programming,system.reactive,monogame,C#,.net,Reactive Programming,System.reactive,Monogame,我正在尝试将反应式扩展用于MonoGame。我不知道这是新的还是有人在我之前尝试过,但我得到的结果好坏参半 我的情况如下。我有一堆宇宙飞船,每2秒投一颗炸弹。我就是这么做的: class SpaceShip { private IDisposable bombDropper; public SpaceShip() { bombDropper = Observable.Interval(TimeSpan.FromSeconds(2))
宇宙飞船
,每2秒投一颗炸弹。我就是这么做的:
class SpaceShip
{
private IDisposable bombDropper;
public SpaceShip()
{
bombDropper = Observable.Interval(TimeSpan.FromSeconds(2))
.ObserveOn(Dispatcher.CurrentDispatcher)
.Subscribe(_ =>
{
if (Top + Height + 20 < Constants.GroundTop)
{
Stage.AddRelative(new Bomb(), this, RelativePosition.Bottom);
}
});
}
}
级宇宙飞船
{
私人可识别炸弹滴管;
公共宇宙飞船()
{
炸弹滴管=可观察的间隔(时间跨度从秒(2))
.ObserveOn(Dispatcher.CurrentDispatcher)
.Subscribe(=>
{
if(顶部+高度+20<地面)
{
Stage.AddRelative(newbomb(),this,RelativePosition.Bottom);
}
});
}
}
问题是只有第一艘宇宙飞船投下炸弹。为什么?宇宙飞船的每一个实例都是不同的,每一个都有自己的可观察的,但只有第一个是发射事件
有人告诉我:
我有点怀疑你的调度员没有更新或者
在调度程序的同一线程上阻塞,不确定单声道游戏
会有一个调度员往往是一个非常Windows的东西
所以我的问题是:如何修复此代码?我已修复此问题!你猜怎么着?它与宇宙飞船本身无关,但与它们的生成方式有关
enemyAdder = Observable.Interval(TimeSpan.FromSeconds(3)).Subscribe(_ => this.Add(new Ship()
{
Top = Utils.Random.Next((int) Constants.GroundTop),
Left = width,
}));
这个订阅每3秒钟生成一次太空船,但由于某种原因,我忘记了观测部分
这是固定版本:
enemyAdder = Observable.Interval(TimeSpan.FromSeconds(3)).ObserveOn(Dispatcher.CurrentDispatcher).Subscribe(_ => this.Add(new Ship()
{
Top = Utils.Random.Next((int) Constants.GroundTop),
Left = width,
}));
有了ObserveOn,它就成功了!我想知道为什么没有它它就行了。也许我只是幸运而已