2012-05-21 40 views
2

我必須在C#中使用粒子系統製作程序,並且使用Visual Studio 2010.我不能使用任何類似OpenGl的庫,...我只能使用C#中的Graphisc庫。我嘗試閱讀一些教程和講座,但我仍然不知道如何實現它。沒有OpenGL和其他庫的粒子系統

任何人都可以幫助我理解我應該如何分解我的問題嗎?或者直接給我一些有用的教程?這對我來說是新的,我有點卡住了。

我的任務:

方案中從一個點發生器間歇泉的形狀的簡單發生器發光顆粒,查看顆粒作爲不同顏色的點在單個軌道上移動平行的黑色背景投影。

回答

1

查找BackgroundWorkerRenderTargetBitmap它可能是最好爲此在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 
} 

這是基於遊戲循環

+1

+1。除了沒有理由使用任何類型的後臺工作人員來完成此任務(或者甚至對於大多數遊戲 - 在主線程上更新每秒30-60次就足夠了) –

1

雖然不是一個完整的答案,這裏是我將如何分解問題,如果這是我的任務:

  1. 找到一種渲染單個粒子的方法(可能是點或球)。我建議從WPF開始。
  2. 找到一種方法來以編程方式「移動」該粒子(即通過隨時間在不同位置呈現該粒子)。
  3. 創建可存儲其當前狀態(位置,速度,加速度),並且可以移動的Particle類(即SetPositionSetVelocity ...)
  4. 創建World類的表示3維空間中,並且跟蹤的所有粒子。 World將知道物理定律,並將負責在給定其當前狀態的情況下移動粒子。
  5. 創建一堆Particle,它們具有相同的初始起始位置,但具有隨機初始加速度向量。將這些Particle添加到WorldWorld將自動更新他們的位置。
  6. 應用您在第1步和第2步中學到的知識,讓您的World圖形化地代表其所有Particle

編輯:第7步將「在循環中運行第6步」。由noHDD提供的循環代碼是一個非常好的基本框架:連續update狀態世界然後draw的結果。

+3

我已經做了類似WPF的操作(僅適用於它的樂趣):http://codegolf.stackexchange.com/a/2594/15 - 雖然爲每個粒子創建一個橢圓有點浪費;) – Joey