C# C# & XNA ?\

Stato
Discussione chiusa ad ulteriori risposte.

Yurik94

Utente Gold
9 Aprile 2009
901
33
111
281
Ultima modifica:
C#: Timer

Curiosità, c'è qualcuno che usa XNA & C# ?

EDIT: RISOLTO PROBLEMA TIMER SU NUOVO THREAD..
 
Io...
Per lavorare in XNA comunque, è bene sempre usare il C#. Gli altri linguaggi .NET funzionano male con XNA.
 
Sei sicuro predator? Potresti suggerirmi una guida sull'utilizzo di XNA con vb.net? sono un programmatore vb.net,ma nn l'ho mai utilizzato per applicazioni 3d
 
sicurissimo. essendo vbnet fresco su xna, non c'è molto. Io ho imparato prendendo i tutorial in C# e semplicemente convertendoli in vbnet... è anche una ottima palestra per imparare c#
 
  • Mi piace
Reazioni: xXDARKGHOSTXx™
Perché invece non imparare prima il C#(visto che a mio parere è più semplice a livello di sintassi) e poi leggere un buon libro sulle XNA?
 
-perchè imparare il C# = quanto tempo? non si smette mai
-il vbnet già lo conosce
-c# sintassi piu' semplice, da quando= LOLLL

invece, nel suo caso, iniziando subito su xna con vbnet ha un molteplice vantaggio: impara xna, contestualmente impara c#, e non perde tempo con tempi di studio.
ottimizzazione rulez.
 
-perchè imparare il C# = quanto tempo? non si smette mai
-il vbnet già lo conosce
-c# sintassi piu' semplice, da quando= LOLLL

invece, nel suo caso, iniziando subito su xna con vbnet ha un molteplice vantaggio: impara xna, contestualmente impara c#, e non perde tempo con tempi di studio.
ottimizzazione rulez.
A mio parere è sbagliato contrattare con il tempo. Se si studia informatica (sia che sia programmazione o altro) si fa per interesse e fame di conoscenza. Certamente poi ci si fissa anche degli obbiettivi, ma ragionare sul tempo non mi sembra la giusta via :) Inoltre, è meglio se impara un linguaggio in più. Io sarei piuttosto felice di studiarmi un linguaggio in più che risparmiare tempo.
Per quanto riguarda il discorso della sintassi, quella del C# (su questo sono d'accordo) non è più semplice di quella del Visual Basic. Anzi! Quella del Visual Basic è molto più facile. Però quella del C# è (a mio parere) più pulita e, sopratutto, è una sintassi C, importantissima da conoscere visto che sono tantissimi i linguaggi che si basano su questa sintassi, e molti dei quali sono proprio i linguaggi più usati :)
 
  • Mi piace
Reazioni: Exit93
hahahah si vede che non lavori ancora :)
Per l'appunto non parlavo assolutamente di lavoro :)
Se si studia informatica (sia che sia programmazione o altro) si fa per interesse e fame di conoscenza.
Non ho messo lavoro :)
Preferisco distinguere tra lavoro e interesse (e quindi anche tra studio per lavoro e studio per interesse). Anche se spesso (il lavoro e l'interesse) riguardano lo stesso ambito (in questo caso, quello informatico), direi (precisando la mia affermazione precedente) che quando qualcuno fa/studia qualcosa per lavoro fa bene anche a ragionare sul tempo, ma se lo fa per interesse e/o voglia di conoscenza, mi sembra assurdo e mi sembra più giusto piuttosto non contrattare con il tempo (visto che non c'è alcun limite di tempo obbligatorio o necessario).
 
sono d'accordo ma solo in parte,
bello, bellissimo studiare e apprendere cose nuove, acculturarsi è una cosa sempre utilissima e indispensabile alla crescita,
ma quando inizi un progetto sopratutto di grandi dimensioni come un gioco, il tempo è un vero e proprio nemico per vari motivi. Non parlo solo di conoscenza, ma anche di risultati che se non ottenuti in tempi ragionevoli trasformeranno il progetto in un semilavorato abbandonato.
Ma non solo, lavorando su un grosso progetto con un linguaggio che non conosci finirai inevitabilmente per creare procedure non ottimizzate o perderti in un labirinto di sintassi e comandi sconosciuti. Quando si inizia a codare un progetto si è già nella fase 2. La prima fase è la stesura (almeno mentale) del progetto per intero, e la consapevolezza di sapere come e cosa fare.
Pertanto si allo studio, ma no allo studio contemporaneo ad un progetto di grosse dimensioni con un linguaggio sconosciuto.
 
Ultima modifica:
Purtroppo devo ammettere che con innumerevoli engine non mi è stato possibile utilizzare il vb.net e dovettti imparare javascript,ovviamente nell'ambito del videogame,ma con il vb.net,non no per quale arcana ragione,forse per la sintassi,mi trovo molto meglio,riguardo il c# penso che al di là della sintassi è compatibile con un maggior numero di engine e probabilmente si lavora meglio con la grafica 3d. Ovvimente queste sono opinioni soggettive.

P.S Predator hai fatto centro purtroppo è vero non conviene cominciare un progetto se non conosci profondamente quel linguaggio,esperienza provata.
 
Sto lavorando con C# & XNA 4.0 per "ricoddare" un browsergame completamente da zero e avevo la necessità di ripetere delle operazioni con una frequenza che sia il più possibile precisa.. In pratica mi servirebbe un timer stile vb.net che sia ilpiù possibile preciso...

Qualche consiglio ?
 
Qualcosa di preciso? Bhé, a parte che non capisco perché "timer stile vb.net" visto che i timer esistono anche in C# e fanno parte del Framework .NET xD, vabbè, comunque se vuoi qualcosa di preciso in XNA, più che il parametro gameTime passato sia al metodo Draw che Update della classe Game (o GameComponent se la usi) direi che non c'è altro. GameTime, trasposta il tempo trascorso dall'ultima chiamata ad update. Quindi puoi sfruttarla per controllare quanto tempo è passato. Se è passato un tempo maggiore o uguale a quello che deve trascorrere tra una ripetizione e l'altra dell'azione, allora ripeti quell'azione. Eccoti un codice (var è una variabile int definita a livello di classe):
Codice:
int time = xxx; // Tempo che deve trascorrere tra una ripetizione e l'altra dell'azione.
if ((var + gameTime.ElapsedGameTime) < time)
{
var += gameTime.ElapsedGameTime;
}
else {
var -= time;
// ...Azione da ripetere...
}
 
Ultima modifica:
Codice:
void PictureSwap(object o, System.Timers.ElaspedEventArgs e)
{
    ... // Relevant picture code here
}

System.Timers.Timer t = new System.Timers.Timer(1000); // This creates a new timer that will fire every second (1000 milliseconds)
t.Elapsed += new System.Timers.ElapsedEventHandler(PictureSwap); // Register the function with the timer
t.Enabled = true; // Start the timer!

Pensavo di utilizzare questo codice..

P.s. la cosa fondamentale è che il codice da ripetere sia ripetuto esattamente ogni "tot" di tempo (non prima e non dopo del periodo) poichè esso effettua un incremento che deve rispettare un aumento orario.
 
Usa il mio codice, non il timer. Non sei su winform, ma su XNA. Ottimizza il codice come ti ho detto.
Se vai a vedere poi, in fondo, neanche il Timer è così preciso. E l'errore che c'è nel mio codice è veramente minimo. Se inoltre si tratta di un gioco, è inutile. Visto che tutto il gioco si basa sulle chiamate a Draw e Update, e anche se il timer effettua quell'incremento che vuoi, non si avranno risultati sul gioco fino a quando questi 2 metodi non sono stati chiamati. Una precisione maggiore di quella che ti fornisce il codice che ho scritto nel mio precedente messaggio è inutile, in qualsiasi caso :)
 
Sì yurik ho skype, ma non aggiungo utenti per aiuti. Se hai problemi scrivi qui :)
Ricorda, un codice che aggiorni in un tempo più veloce di quello che ti fornisce il mio codice, in un gioco è assurdo :)
 
No, non mi serve che sia veloce, è fondamentale che si ripeta ogni x millisecondi e che x sia costante per ogni pc ;)
 
Ultima modifica:
No, non mi serve che sia veloce, è fondamentale che si ripeta ogni x millisecondi e che x sia costante per ogni pc ;)
Non è proprio così (ma neanche un timer in fondo non è proprio così). In informatica non esiste questa iper-precisione, e tutto dipende dalla macchina su cui gira (a livello di millisecondi sì, la precisione c'è). In ogni caso, una precisione maggiore di quella che fornisce il codice che ho scritto io, in un gioco è assurdo, in quanto al di fuori delle chiamate a Draw e Update il gioco NON SI AGGIORNA! anche se i millisecondi sono passati in un timer, il gioco non subisce modifiche fino a quando non viene chiamato Draw e Update. Il mio codice controlla il tempo trascorso ad ogni chiamata di Update, quindi più di così è solo inutile.
 
Qual'è il risultato finale che vuoi ottenere? Cosa deve accadere dopo questi X millisecondi? E quanti sarebbero questi millisecondi?

Con informazioni dettagliate ti si può aiutare meglio ;)
 
ho risolto creando un nuovo thread in cui ho sostanzialmente inserito il codice da ripetere, seguito da un banale thread.sleep(tempo) dove tempo è l'intervallo del mio "timer".. Domani pomeriggio fornirò ulteriori precisazioni..
 
Stato
Discussione chiusa ad ulteriori risposte.