Sitter och pillar med DirectDraw och C# för första gången. Efter att ha tittat på dom trevliga filmerna på MSDN TV så ville jag försöka blitta ut lite tiles. Skapade en extra surface som jag laddade in en bitmap med en tilesheet på. Sen använde jag två for-loopar, med Draw i ,på backbuffern för att rita ut tiles. Efter det flippade jag (nja... inte jag själv då utan i koden). Har provat din kod, men inte alls fått det slöa uppträdandet, vad skickar du in för DrawFlags och DrawEffects då, för de syns inte i den bifogade koden! Visade sig att koden var helt rätt och datorn som var dum.Slö uppdatering med Managed DD och C#
Allt körs från en loop som snurrar på så fort det går.
Detta resulterade i en uppdateringsfrekvens på kanske en bild var fjärde sekund.
Nedan följer delar av koden:
Initieringskoden:
protected void InitializeObjects()
{
running = true;
pos = new Point(100,100);
ddDev = new DirectDraw.Device();
ddDev.SetCooperativeLevel(this,DirectDraw.CooperativeLevelFlags.FullscreenExclusive);
SurfaceDescription Desc = new SurfaceDescription();
Desc.SurfaceCaps.PrimarySurface = true;
Desc.SurfaceCaps.Complex = true;
Desc.SurfaceCaps.Flip = true;
Desc.BackBufferCount = 1;
primary = new Surface(Desc, ddDev);
SurfaceCaps caps = new SurfaceCaps();
caps.BackBuffer = true;
offscreen = primary.GetAttachedSurface(caps);
diDev = new Microsoft.DirectX.DirectInput.Device(SystemGuid.Keyboard);
DirectInput.CooperativeLevelFlags flags;
flags = DirectInput.CooperativeLevelFlags.NonExclusive;
flags |= DirectInput.CooperativeLevelFlags.Foreground;
flags |= DirectInput.CooperativeLevelFlags.NoWindowsKey;
diDev.SetCooperativeLevel(this,flags);
Bitmap bmp = new Bitmap(Application.StartupPath + "\\map.bmp");
SurfaceDescription sDe = new SurfaceDescription();
sDe.SurfaceCaps.OffScreenPlain = true;
sDe.Width = 64;
sDe.Height = 64;
sTS = new Surface(bmp,sDe,ddDev);
}
Renderingsmetoden:
protected void Render()
{
offscreen.ColorFill(0xffffff);
for(int iOuterLoop = 0; iOuterLoop < 800; iOuterLoop = iOuterLoop + 32)
{
rD.X = iOuterLoop;
for(int iInnerLoop = 0; iInnerLoop < 600; iInnerLoop = iInnerLoop + 32)
{
rD.Y = iInnerLoop;
offscreen.Draw(rD, sTS, rS, df, de);
}
}
primary.Flip(offscreen, FlipFlags.Wait);
}
Sv: Slö uppdatering med Managed DD och C#
Sv: Slö uppdatering med Managed DD och C#