I mitt program skall bakgrunden bestå av en bild som är uppbyggd av information som finns i en array. Bilden skall vara 600*600 pixlar(vilket också arrayen med färginfo är). Bilden kommer att uppdateras ofta och flera hundra små objekt skall röra sig över bakgrunden. Min fråga är nu, hur gör jag detta bäst. Jag misstänker att det inte är en bra ide att måla den pixel för pixel med en loop och sen ha de små objekten som ImageBox eller så. Ska jag försöka lära mig DirectDraw (vilket kan bli svårt eftersom jag nyss börjat lära mig C#)? Finns det någon ActiveX grej som gör att jag kan ha det i massa lager? Alla tips är välkomna! måla pixel för pixel blir segt, eftersom att array kommer att innehålla 36000 värden om bilden är 600*600 Gör ett Image-objekt som du ritar upp bakgrunden på. För att lägga dit objekten så kopierar du Image-objektet för bakgrunden och ritar dit objekten på kopian. Sedan är det bara att visa den färdiga bilden. Men bakgrunden uppdateras och förändras hela tiden. Jag tror även jag att det kommer gå för trögt pixel för pixel. Ja, då är du ju kokt... ;P Men om man tänker sig ett genomsnittligt spel så ritas ju bilden upp och förändras hela tiden så det måste ju gå! Eller om man tittar på en film så uppdateras den 25 gånger i sekunden. Om man ska göra spel så använder man inte C#. Det språket är inte till för krävande grafik. Ok, då får det väl bli DirectDraw då. Om någon vet något så säg gärna till för det kommer nog ta ett par dygn att lära sig :-) Jenny, Ja visst, men mitt uttalande grundade sig på endast C# utan managed directx osv eftersom han inte nämnde att han använde sig utav några extra komponenter :) Jenny, ok, men det är vad jag har hört, men jag kan givetvis ha fel eftersom jag inte använt C# för grafik.... Jenny, Det ska finnas någon möjlighet att låsa en bitmap och få ut den i form av en array/sedan kunna stoppa tillbaks den förändrade arrayen Oskar,Måla upp bild snabbt
Sv: Måla upp bild snabbt
Sv: Måla upp bild snabbt
Sv:Måla upp bild snabbt
Sv: Måla upp bild snabbt
Det skulle ju vara om det finns något effektivare sätt att sätta pixlarnas färgvärde än att plotta dem... Jag har letat lite men inte hittat något...Sv:Måla upp bild snabbt
Sv: Måla upp bild snabbt
Sv:Måla upp bild snabbt
Sv:Måla upp bild snabbt
<b>Om man ska göra spel så använder man inte C#. Det språket är inte till för krävande grafik.</b>
Vågat uttalande. Att använda Managed DirectX 9 tillsammans med .NET Framework ger väldigt god prestanda. Visst skulle du inte kunna (med reservation) skriva de mest moderna spelen så som Halo 2 och Half-Life 2 - men extremt många spel skulle du kunna skriva på .NET Framework tillsammans med ett valfritt managed språk så som C# eller VB.NETSv: Måla upp bild snabbt
Sv:Måla upp bild snabbt
Oki - kan dock inte låta bli att påpeka att språket C# inte alls har något med prestanda att göra, vilket var en av de punkterna du förde fram - extra komponenter eller inte.Sv: Måla upp bild snabbt
Sv:Måla upp bild snabbt
C#, VB.NET, Managed C++, Effiel.NET etc etc är enbart syntax. De kompileras samtliga till MSIL (Microsoft Intermediate Language) som är en form av plattformsoberoende assembly. Den koden i sig komplierad ytterligare en gång när du kör dit program (Just-In-Time kompliering) till Native (assembly) kod som exekveras på datorn.
Det som är den största boven med högprestanda grafik med managed code är minneshanterings metoden som .NET använder sig av - Garbage Collection. Man måste passa sig för att producera för många temp-objekt som fyller upp generationerna och tvingar fram minnesresningar etc. Men det finns väldokumenterade 3d spel-loopar som fungerar mycket bra i .NET tillsammans med Managed DirectX ..
Kontentan - I .NET har olika språk maginella, med stort M, skillnader på prestandan - det är omkringliggande saker som kan påverka den övergripande prestandan ut ett program, framförallt minnshanteringen.Sv: Måla upp bild snabbt
Sv:Måla upp bild snabbt
Stämmer mycket bra. <b>GetPixel</b> och <b>SetPixel</b> kan (läs: är i princip alltid) mycket långsamt och då får man ta till med <b>LockBits</b> och klassen <b>BitmapData</b> för att direkt läsa bit informationen i en bild. Problemet med detta är att man börjar använda pekare, vilket gör att man får använda sig av t.ex <b>unsafe</b> i C# .. vips! så behöver programmet betydligt högre rättigheter för att få exekvera.
Mer information om detta kan ni läsa på Bob Powell's hemsida. Bob är för övrigt MVP för just GDI+ så han är en jäkel på sånt =) http://www.bobpowell.net/lockingbits.htm