我必須在C#中使用粒子系統製作程序,並且使用Visual Studio 2010.我不能使用任何類似OpenGl的庫,...我只能使用C#中的Graphisc庫。我嘗試閱讀一些教程和講座,但我仍然不知道如何實現它。沒有OpenGL和其他庫的粒子系統
任何人都可以幫助我理解我應該如何分解我的問題嗎?或者直接給我一些有用的教程?這對我來說是新的,我有點卡住了。
我的任務:
方案中從一個點發生器間歇泉的形狀的簡單發生器發光顆粒,查看顆粒作爲不同顏色的點在單個軌道上移動平行的黑色背景投影。
我必須在C#中使用粒子系統製作程序,並且使用Visual Studio 2010.我不能使用任何類似OpenGl的庫,...我只能使用C#中的Graphisc庫。我嘗試閱讀一些教程和講座,但我仍然不知道如何實現它。沒有OpenGL和其他庫的粒子系統
任何人都可以幫助我理解我應該如何分解我的問題嗎?或者直接給我一些有用的教程?這對我來說是新的,我有點卡住了。
我的任務:
方案中從一個點發生器間歇泉的形狀的簡單發生器發光顆粒,查看顆粒作爲不同顏色的點在單個軌道上移動平行的黑色背景投影。
查找BackgroundWorker
和RenderTargetBitmap
它可能是最好爲此在WPF
的僞代碼
backgroundWorker()
{
while(isRunning)
{
update()
draw()
}
}
update()
{
for each all particles
{
update gravity and/or relativity to other particles
}
}
draw()
{
clear bitmap
for each all particles
{
draw your particle
}
set it to your container
}
這是基於遊戲循環
雖然不是一個完整的答案,這裏是我將如何分解問題,如果這是我的任務:
Particle
類(即SetPosition
,SetVelocity
...)World
類的表示3維空間中,並且跟蹤的所有粒子。 World
將知道物理定律,並將負責在給定其當前狀態的情況下移動粒子。Particle
,它們具有相同的初始起始位置,但具有隨機初始加速度向量。將這些Particle
添加到World
。 World
將自動更新他們的位置。World
圖形化地代表其所有Particle
。編輯:第7步將「在循環中運行第6步」。由noHDD提供的循環代碼是一個非常好的基本框架:連續update
狀態世界然後draw
的結果。
我已經做了類似WPF的操作(僅適用於它的樂趣):http://codegolf.stackexchange.com/a/2594/15 - 雖然爲每個粒子創建一個橢圓有點浪費;) – Joey
+1。除了沒有理由使用任何類型的後臺工作人員來完成此任務(或者甚至對於大多數遊戲 - 在主線程上更新每秒30-60次就足夠了) –