Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Sembrerebbe andare bene ma anche non molto, ogni volta che al mouse_down sulla picturebox
vado ad inserire un elemento nella lista ho un lag improvviso per 2 o 3 secondi
avvolte anche 5 o 6 secondi dipende da quanto è grande la mappa di disegno.
Vi mostro il mio codice.
Per velocizzare il disegno, avevo anche evitato di andare a recuperare prima il valore dalla lista e poi disegnarlo a video.
ho preferito utilizzare un'immagine anziché andar a disegnare i vari pezzi uno per uno ogni volta.
Questo metodo viene chiamato ogni qual volta che viene aperto un file.
Quindi viene chiamato solo una volta all'apertura di un file o progetto
proprio per ripulire tutte le varie immagini.
g.DrawImage(_2D_Mappy.Properties.Resources.X, new Point(e.X/ Block_Width * Block_Width, e.Y/ Block_Height * Block_Height));//Disegno una X per indicare all'utente di aver appena definito un ostacolo
//Aggiungo un ostacolo
MappyLib.IOSystem._obstacle ob =new MappyLib.IOSystem._obstacle();
ob.x= e.X/ Block_Width * Block_Width;
ob.y= e.Y/ Block_Height * Block_Height;
ob.evento=false;
ob.name="Obstacle";
Ostacoli.Add(ob);
//----
CompositeMap();//Creo la composizione della mappa
}
//Penna Funzione simile agli ostacoli. Questa funziona correttamente senza causarmi problemi
Così a naso direi che il problema è questa riga: Graphics g = Graphics.FromImage(LayerOstacoli); ma potrei aver detto una cazzata ....dipende da quante volte ci entri li.
Così a naso direi che il problema è questa riga: Graphics g = Graphics.FromImage(LayerOstacoli); ma potrei aver detto una cazzata ....dipende da quante volte ci entri li.
ogni volta che clicco nell'area di disegno
il dubbio mi viene perché la funzione Penna fa la stessa cosa ma senza causarmi problemi
Codice sorgente - presumibilmente C# / VB.NET
if (e.Button == System.Windows.Forms.MouseButtons.Left && penna.Checked)
{
selection = true;
SelectionStart = new Point(e.X, e.Y);
//Disegno dello sprite
Graphics g = Graphics.FromImage(Layers[(int)numericUpDown1.Value]);
essendo solo una chiamata ad evento non dovrebbe provocare nemmeno un minimo di lag.
ho provato ad eliminare sia
Codice sorgente - presumibilmente C# / VB.NET
//Ostacoli Qui è dove ho il problema
if (_ostacoli.Checked)
{
Graphics g = Graphics.FromImage(LayerOstacoli);
g.DrawImage(_2D_Mappy.Properties.Resources.X, new Point(e.X / Block_Width * Block_Width, e.Y / Block_Height * Block_Height)); //Disegno una X per indicare all'utente di aver appena definito un ostacolo
/*------------------------- Eliminato tutto questo -----
//Aggiungo un ostacolo
MappyLib.IOSystem._obstacle ob = new MappyLib.IOSystem._obstacle();
ob.x = e.X / Block_Width * Block_Width;
ob.y = e.Y / Block_Height * Block_Height;
ob.evento = false;
ob.name = "Obstacle";
Ostacoli.Add(ob);
//----
*/
CompositeMap(); //Creo la composizione della mappa Guarda sotto
}
che questo
Codice sorgente - presumibilmente C# / VB.NET
if (_ostacoli.Checked)
{
g.DrawImage(LayerOstacoli, new Point(0, 0));
map.Image = temp;
map.BackgroundImage = temp;
Graphics s = Graphics.FromImage(map.Image);
s.DrawImage(LayerOstacoli, new Point(0, 0));
numericUpDown1.Value = 1;
map.Refresh();
}
per evitare il lag, ho appunto evitato di andare a recuperare pezzettini uno alla volta
per poi ridisegnarli.
Quindi ho usato direttamente un'immagine su cui disegnare ed aggiungere solo alla lista le coordinate del pezzo
inserito, così poi successivamente non questo programma ma l'engine ricrea dei BoundingBox per realizzare ostacoli
dove il player non può oltrepassarli.