De/CHandle

From Valve Developer Community
< De
Revision as of 13:45, 14 May 2011 by Sacaldur (talk | contribs) (Created page with '{{otherlang2 |en=CHandle }} {{toc-right}} '''CHandle''' ist eine C++ Klasse, die eine eindeutige 32-Bit ID (entindex + serial number) für jede vergangene und kommende Entity im…')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Template:Otherlang2

CHandle ist eine C++ Klasse, die eine eindeutige 32-Bit ID (entindex + serial number) für jede vergangene und kommende Entity im Spiel darstellt. Es wird verwendt, um auf Entities zu verweisen, wo Pointer und Entity Indexe unsicher sind; hauptsächlich über die Client-/Server-Kluft und nach dem Laden eines Spielstands.

Template:Tip:de

Gebrauch

CHandle<YourStoredClass> hMyHandle;

Ein CHandle ist den Pointern sehr ähnlich, aber weil es eine maßgeschneiderte C++ Klasse ist und kein Built-In Feature, ist extra Syntax an manchen Stellen notwendig:

  • Man muss einen Pointer zum Objekt anbinden, nicht das Objekt selbst.
  • Des CHandles Get() Funktion oder ein Cast ist erforderlich, um auf die gespeicherte Klasse zuzugreifen.
  • IsValid() wird benutzt, um zu überprüfen, ob ein Wert gespeichert wird.
  • Zum ungültig machen, muss Term() aufgerufen oder INVALID_EHANDLE_INDEX zugeordnet werden.

EHANDLE

CHandle wird häufig durch das EHANDLE typedef durch benutzt, welches die Kurzschrift für CHandle<C_BaseEntity> ist. Wenn man eine bestimmte Klasse speichern will, ist es besser, einen spezifischeren CHandle manuell zu deklarieren (siehe vorheriger Abschnitt).

Beispiel

// Erzeuge einen Pointer auf eine Entity
CBasePlayer* pPlayer = gEntList.FindEntityByClassname( NULL, "player" );
 
// speichere es(zwei Mal, zu Demonstrationszwecken)
EHANDLE hPlayer = pPlayer;
CHandle<CBasePlayer> hPlayer_ = pPlayer;
 
// konvertiere das EHANDLE zurück in einen CBasePlayer-Pointer
pPlayer = dynamic_cast<CBasePlayer*>( hPlayer.Get() );

Siehe auch