Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Abbiamo giocato a lungo a Battlefield 6, abbiamo provato tutte le modalità multiplayer, Redsec, e le numerose personalizzazioni. In sintesi, ci siamo concentrati su ogni aspetto del titolo per comprendere al meglio uno degli FPS più ambiziosi della storia dei videogiochi e, dopo quasi due mesi, abbiamo tirato le somme. In questo articolo, condividiamo con voi tutto ciò che è Battlefield 6, un gioco che, a nostro avviso, rappresenta esattamente ciò che questo genere attendeva da tempo
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-03-2008, 12:53   #1
realtebo
Member
 
Iscritto dal: Apr 2004
Messaggi: 274
[C#] Problema con la generazione di eventi

il mio progetto ha una classe che si chiama Partita

All'interno ho scritto queste due banali righe:

public delegate void EventoVuoto();
public event EventoVuoto GameStarted;

Nel momento in cui la classe viene usata, dopo certe cosine avviene il lancio dell'evento:

... bla bla bla ...
GameStarte();
... bla bla bla ...

Ora questa classe viene usata da una mia applicazione, da una form per la precisione che prima crea una istanza di Partita chiamandola Gioco e quindi procede ad agganciare l'evento così:

Gioco.GameStarted += new Partita.EventoVuoto(OnGameStarted);

Dove OnGameStarted è definita come metodo pubblico della mia form

public void OnGameStarted()
{
// Questo succede quando viene creata da nuovo la classe 'Partita'
// L'applicazione deve rispondere disabilitando i controlli per nuova partita
// e per le opzioni
mnuNuova.Enabled = false;
mnuSfidaAmici.Enabled = false;
mnuSfidaComputer.Enabled = false;
}

Il problema è che in realtà nel momento, a runtime, in cui l'esecuzione arriva al lancio dell'evento mi viene detto che è necessario usare new per creare una istanza.

Perchè? E di cosa? Sto di certo sbagliando approccio, ma ho trovato un esempio praticamente identico su un manuale e quello funziona. Su MSDN invece ti fan creare un oggetto Evento derivato, e poi il delegato avrà l'oggetto this ed anche l'evento. ma non è necessario, almeno così dice il manuale e difatti il SUO esempio funziona. Sigh.
__________________
Realtebo
realtebo è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2008, 13:29   #2
kernel::panic
Registered User
 
Iscritto dal: Feb 2008
Messaggi: 77
Probabilmente viene eseguito il codice A prima del codice B

A
Codice:
... bla bla bla ...
GameStarte();
... bla bla bla ...

B
Codice:
Gioco.GameStarted += new Partita.EventoVuoto(OnGameStarted);

Aggiungi ad A il controllo:
Codice:
if(GameStarte!=null)
    GameStarte();
Ciao
kernel::panic è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2008, 16:25   #3
realtebo
Member
 
Iscritto dal: Apr 2004
Messaggi: 274
Grazie per la dritta, ma per evitare questo problema la classe Form che è poi la form principale della mia applicazione, prevede come variabile privata propio "Gioco" di tipo 'Partita' e viene creata all'atto stesso della dichiarazione usando un costruttore senza argomenti, e che per altro non fa nulla.

Una volta che la form è attiva, l'utente può premere 'nuova partita' e li viene creata una nuova istanza di 'Partita', e questa volta usando un altro costruttore.

Una volta ottenuta l'istanza, assegno gli eventi

Al termine eseguo il metodo 'Avvia()' dell'istanza appena creata e LI DENTRO avviene il lancio dell'evento maledetto.

Dato che è la prima volta che lavoro con gli eventi non ho altra teoria che non un capitolo di un ottimo manuale Apress (pro c# 2008 and the net framework 3.5) i cui esempi funzionano tutti, tra l'altro. Forse cmq ho mal interpretato qualcosa della teoria o dell'approccio... forse qualcosa va dichiarato diversamente o in posti diversi.. no so...

Se ti mando su il codice sorgente ci daresti un occhiata? (tanto è solo uno stupido gioco del tris creato appunto a motivi di studio)
__________________
Realtebo
realtebo è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2008, 16:43   #4
kernel::panic
Registered User
 
Iscritto dal: Feb 2008
Messaggi: 77
Ma quando debugghi e va in exception, qual'è la variabile a null?


Quote:
Originariamente inviato da realtebo Guarda i messaggi
Se ti mando su il codice sorgente ci daresti un occhiata? (tanto è solo uno stupido gioco del tris creato appunto a motivi di studio)
Allega al post i .cs in uno zip... l'importante è che non vada in conflitto con le regole del forum... se no -> luchettone
kernel::panic è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2008, 17:15   #5
realtebo
Member
 
Iscritto dal: Apr 2004
Messaggi: 274
>>> Motivi di studio PERSONALI, sono da sempre autodidatta

Cappero, avevi ragione.

ero stato così stupido che, nel vano tentativo di evitare l'insorgere di un errore, ne avevo creato un altro.

creavo una istanza, agganciavo gli eventi quindi ricreavo l'istanza, e qui gli eventi andavano a quel paese...

Da oggi in poi verificherò sempre che gli eventi abbiano un handler prima di lanciarli ! (O sarebbe meglio sollevare un'eccezione ?)
__________________
Realtebo
realtebo è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2008, 19:16   #6
kernel::panic
Registered User
 
Iscritto dal: Feb 2008
Messaggi: 77
Quote:
Originariamente inviato da realtebo Guarda i messaggi
Da oggi in poi verificherò sempre che gli eventi abbiano un handler prima di lanciarli ! (O sarebbe meglio sollevare un'eccezione ?)
E' corretto verificare che l'evento sia != null, in tal caso lanciarlo. Questo perchè qando tu chiami l'evento in realtà fai scattare un meccanismo che chiama tutte le callback che hai registrato col += (che possono essere più di una). Se invece non vi sono callback registrate (cosa che succede spessissimo... pensa a tutti gli eventi di Form che non utilizzi), l'oggetto "contenente" l'evento non deve generalmente scatenare alcuna eccezione (a meno che la non-sottoscrizione a quel determinato evento causi un malfunzionamento).

Ciao
kernel::panic è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2008, 19:25   #7
kernel::panic
Registered User
 
Iscritto dal: Feb 2008
Messaggi: 77
Dimenticavo... se vuoi capire meglio il meccanismo degli eventi, dai un'occhiata sull'MSDN alle keyword: add & remove.

http://msdn2.microsoft.com/en-us/lib...ea(VS.71).aspx
kernel::panic è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
X ha disattivato l'account pubblicitario...
Colpo di scena a Hollywood: Paramount pr...
Malesia, giro di vite sul mining illegal...
Meta rivede la roadmap: visore ultralegg...
Addio ricariche continue con le elettric...
Maxi sconto sul robot del futuro: roboro...
I 3 super TV OLED e QLED crollati su Ama...
Tre notebook fuori di testa in sconto: M...
Sconti iPhone su Amazon: oggi ci sono i ...
Google rende disponibile Gemini 3 Deep T...
I 3 super robot Dreame Aqua10 Roller tor...
Tornano in sconto le scope elettriche Ti...
IA nei videogiochi: anche SEGA la utiliz...
Apple in piena tempesta: anche il boss d...
Due GeForce GTX 580 in SLI: l'insospetta...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:01.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v