Hej! nu har jag kikat lite till och det verkar som att den alltid avrundar storleken upp till närmaste potens av 2 (om jag använder den andra metoden). Kan det ha något med det hela att göra? Det ska nog tilläggas att jag i det första fallet har lagt till filen som en resurs i projektet. Det är dessutom den lösningen jag helst vill använda. Kan du prova en annan konstruktor för Texture(...). Det finns en konstruktor som också ger dig möjligheten att specificera formatet på texturen, ett format med Alfa-kanal är att rekommendera. Har nu provat lite och för mig fungerar det klockrent med en "embedded resource" och Alpha Blending. Om du vill så kan du skicka kod som inte fungerar till mig så kan jag titta på det! Tack för att du försöker hjälpa mig. Tyvärr har jag lyckat trasslat till det ännu värre och nu visas inga sprites alls. Här är min kod ihopklippt från lite här och var: Jag kanske skall säga att det som händer när jag kör programmet är att formen får färgen System.Drawing.Color.Wheat. Om jag importerar en stor fil hackar det mer så det verkar som om filen läses in, men det visas som sagt ingenting. Det funkade ju (lite) innan så mitt system borde vara ok. Prova att lägga dessa rader direkt mellan sprite.Begin(....) och sprite.End() Det blir ingen skillnad, det visas fortfarande ingenting. Kan det vara något med kameran eller ljuset? Det ska väl inte spela roll när det gäller sprites? Så här ser mitt anrop till sprite.Draw ut... Här kommer jag och har nästan ingen aning om vad ni pratar om, men jag kanske har en förklaring till z=0-problemet. Jag har testat med det men det verkar inte funka. Är det något speciellt man skall tänka på när det gäller bitmapen. Det konstiga är bara att det funkade innan! Det blir lite omständigt att hjälpa till så här, det bästa vore om du skickade mig hela koden så att jag kan köra det själv och felsöka! Hej! Problemet visade sig vara att jag skapade Devicen två gånger och den ena gången utan PresentParameters. Tack så jättemycket ni som försökte hjälpa mig! Nu blev jag så glad att jag glömde säga hur det blev med mina ursprungliga problem. Om jag laddar filen såhär blir det inga problem med storleken:Lite allt möjligt faktiskt
Jag har precis börjat titta på managed dx i c# och undrar över hur jag skall få till 2d som jag vill. Jag har läst i nån tutorial att sprites är bra och det är det jag använder nu. Jag har två olika sätt att läsa in bilden:
<code>
tempTexture=new Texture(device, new Bitmap(this.GetType(), "bak800.bmp"), 0, Pool.Managed);
tempTexture = TextureLoader.FromFile(device, @"c:\bak800.bmp");
</code>
I det första fallet har jag importerat filen till programmet. Problemet där är att jag inte får alfa blend att funka trots att jag skrivit sprite.Begin(SpriteFlags.AlphaBlend).
Det funkar däremot om jag använder den andra metoden, men då blir istället bilden förstorad och ser ful ut. Jag använder
<code>
using (Surface s = tempTexture.GetSurfaceLevel(0))
{
SurfaceDescription desc = s.Description;
tempRectangle = new Rectangle(0, 0, desc.Width, desc.Height);
}
</code>
för att få fram storleken på bilden.
Jag förstår om jag är lite oklar men det är för att jag inte fattar så mycket. Försök gärna hjälpa ändå!Sv: Lite allt möjligt faktiskt
Sv:Lite allt möjligt faktiskt
Sv: Lite allt möjligt faktiskt
Har inte kunnat testa detta, men ska försöka under veckan. Alternativt titta i oktober SDK för DirectX, där finns ett 2D-exempel skapat med Direct3D som är ganska tydligt.
Mvh
Johan LindforsSv: Lite allt möjligt faktiskt
johan.lindfors@microsoft.com
Mvh
JohanSv:Lite allt möjligt faktiskt
<code>
static void Main()
{
Form1 frm=new Form1();
frm.Show();
frm.game=new Game(frm);
Application.Run(frm);
}
public Game(Form form)
{
//Creates the InformationPresenter
informationPresenter=new InformationPresenter(form);
//Initializes the graphic engine
informationPresenter.initializeGraphics();
}
public InformationPresenter(Form formToDrawOn)
{
form=formToDrawOn;
initializeGraphics(); //Initializes the device and sets light and camera
//Initializes all sprites and textures needed for the 2D graphics
initialize2DSprites();
}
public void initializeGraphics()
{
// Set the presentation parameters
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed = true; //Run in window
presentParams.SwapEffect = SwapEffect.Discard;
// Create the device
device = new Device(0, DeviceType.Hardware, form,
CreateFlags.SoftwareVertexProcessing, presentParams);
//Positions the camera
positionCamera((float)Math.PI / 4,form.Width / form.Height, 1.0f, 10.0f, new Vector3(0,0, 5.0f), new Vector3(0,0,0), new Vector3(0,1,0));
//Don't use lightning
device.RenderState.Lighting=false;
}
private void initialize2DSprites()
{
//Sets the Sprite object
sprite=new Sprite(device);
//Only for clearity
Texture tempTexture;
Rectangle tempRectangle;
//Initializes the sprites and textures needed for the background
tempTexture=new Texture(device, new Bitmap(this.GetType(), "bak800.bmp"), 0, Pool.Managed);
using (Surface s = tempTexture.GetSurfaceLevel(0))
{
SurfaceDescription desc = s.Description;
tempRectangle = new Rectangle(0, 0, desc.Width, desc.Height);
}
spritesArray.Add(sparar texturen med storlek och sånt)
}
Den här kallas på hela tiden:
public void draw()
{
device.Clear(ClearFlags.Target, System.Drawing.Color.Wheat, 1.0f, 0);
//Position the camera
positionCamera((float)Math.PI / 4,form.Width / form.Height, 1.0f, 100.0f, new Vector3(0,0, 20.0f), new Vector3(), new Vector3(0,1,0));
device.BeginScene();
//********Start 2D drawing
// Begin drawing sprites with alpha blend
sprite.Begin(SpriteFlags.None);
sprite.Draw(texturen hämtas in,rektangel med en viss storlek,new Vector3(0,0,0),new Vector3(0,0,0),Color.White);
// Notify Direct3D we are done drawing sprites
sprite.End();
//********End 2D drawing
device.EndScene();
device.Present();
}
</code>
Ok, det där blev ju väldigt otydligt. Jag hoppas att någon som förstår det här snabbt kan se var jag gjort fel. Annars är det bara att fråga. Tack få förhand!Sv: Lite allt möjligt faktiskt
Sv:Lite allt möjligt faktiskt
<code>device.RenderState.AlphaBlendEnable = true;
device.RenderState.SourceBlend = Blend.One;
device.RenderState.DestinationBlend = Blend.One;
...
sprite.Draw(...)
...
device.RenderState.AlphaBlendEnable = false;
</code>Sv: Lite allt möjligt faktiskt
Sv:Lite allt möjligt faktiskt
<code>
sprite.Draw(tex, Rectangle.Empty, new Vector3(0,0,1),new Vector3(100,100,0), Color.White.ToArgb());
</code>
Har märkt att när jag anger Vector3(0,0,0) alltså ett z-värde på 0, så ritas inte spriten ut, vet inte riktigt varför, men kan det vara det som spökar för dig?Sv: Lite allt möjligt faktiskt
Det är i så fall bara det främre clip-planet som du hamnar innanför...Sv: Lite allt möjligt faktiskt
Sv:Lite allt möjligt faktiskt
johan.lindfors@microsoft.com
Mvh
JohanSv: Lite allt möjligt faktiskt
Sv:Lite allt möjligt faktiskt
<code>
tempTexture = TextureLoader.FromFile(device, @"c:\bak801.bmp",0,0,0,0,Format.Unknown,Pool.Managed,Filter.None,Filter.None,0);
</code>
och för att använda alfalager var jag tvungen att spara bilden med antingen 16 eller 34 bitar. Skumt, men ok!