Secondo me non sono i pixel nel form a far laggare, non penso che ce ne siano 3000 e passa, rendi il codice asyncrono e ti si fixa.
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
Puoi spiegarmi quali strutture utilizzare?Secondo me non sono i pixel nel form a far laggare, non penso che ce ne siano 3000 e passa, rendi il codice asyncrono e ti si fixa.
Praticamente la collisione tra due oggetti avviene in mezzo agli eventi tick del timer, per cui la collisione non viene coltaNon ho capito cosa intendi, spiega meglio e magari un pezzo di codice
Come lo hai impostato il codice nella win form? Non dovresti avere problemiPraticamente la collisione tra due oggetti avviene in mezzo agli eventi tick del timer, per cui la collisione non viene colta
void timer_tick(...)
{
// aggiorna le label dello score
// movimento nave
// stampa le pictureBox della vita
// ciclo che renderizza il fuoco spostato
// dentro controlla le collisioni del fuoco
// ciclo che sposta il fuoco nemico
// controlla le collisioni
// aggiunge eventuale score
}
Si, ma questo devi farlo durante il movimento non durante il render, prima che si muovaControlla se ci sono collisioni e se ci sono elimina gli oggetti. Non è così?
Quello rosso è l'ostacolo classico di Space Invaders, il fuoco arriva da sotto per adesso è ovviamente si vede che il bordo non è stato toccato mentre il centro si. Come mai, come si potrebbe risolvere?Mh continuo a non capire scusa lol
// ciclo principale per il movimento e le intersezioni del fuoco del player
for (int i = 0; i < listaFuoco.Count; i++)
{
listaFuoco[i].Top -= 15;
// se riceve un errore => break;
try
{
for (int j = 0; j < alieni.Length; j++)
if (Colpito(listaFuoco[i], alieni[j]))
{
score++;
if (score > maxScore)
maxScore = score;
eliminaOggetto(alieni[j]);
eliminaOggetto(listaFuoco[i]);
listaFuoco.Remove(listaFuoco[i]);
}
for (int j = 0; j < ostacoli.Length; j++)
if (Colpito(listaFuoco[i], ostacoli[j]))
{
eliminaOggetto(ostacoli[j]);
eliminaOggetto(listaFuoco[i]);
listaFuoco.Remove(listaFuoco[i]);
}
if (listaFuoco[i].Location.Y < 0)
eliminaOggetto(listaFuoco[i]);
}
catch (Exception)
{
break;
}
}
private bool Colpito(Control fire, Control toHitObject)
{
int x = fire.Location.X;
int y = fire.Location.Y;
if (fire.Bounds.IntersectsWith(toHitObject.Bounds))
return true;
return false;
}