De/CHandle: Difference between revisions
(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…') |
m (obsolete language category) |
||
(8 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{lang|title=CHandle|CHandle}} | ||
| | |||
}} | |||
{{toc-right}} | {{toc-right}} | ||
'''CHandle''' ist eine C++ Klasse, die eine eindeutige 32-Bit ID (entindex + serial number) für jede | '''CHandle''' ist eine C++ Klasse, die eine eindeutige 32-Bit ID (entindex + serial number) für jede entfernte und neu erstellte Entity im Spiel darstellt. Es wird verwendet, um auf Entities zu verweisen, wo {{L|Accessing Other Entities|Pointer}} und {{L|entity index|Entity Indizes}} unsicher sind; hauptsächlich über die Client-/Server-Kluft und nach dem Laden eines Spielstandes. | ||
{{tip | {{tip|Zugriffe auf CHandles sind langsamer als Zugriffe auf Pointer. Wenn man Pointer zu Zugriffszwecken erzeugt und sie Spielstände unterstützen sollen, muss man sie über <code>{{L|Restore()}}</code> neu definieren!}} | ||
== Gebrauch == | == Gebrauch == | ||
Line 12: | Line 10: | ||
CHandle<YourStoredClass> hMyHandle; | CHandle<YourStoredClass> hMyHandle; | ||
Ein CHandle ist den Pointern sehr ähnlich, aber weil es eine maßgeschneiderte C++ Klasse ist und kein | Ein CHandle ist den Pointern sehr ähnlich, aber weil es eine maßgeschneiderte C++ Klasse ist und kein built-in Feature, ist eine besondere Syntax an manchen Stellen notwendig: | ||
* Man muss einen Pointer zum Objekt anbinden, nicht das Objekt selbst. | * Man muss einen Pointer zum Objekt anbinden, nicht das Objekt selbst. | ||
* Des <code>CHandle</code>s <code>Get()</code> Funktion oder ein Cast ist erforderlich, um auf die gespeicherte Klasse zuzugreifen. | * Des <code>CHandle</code>s <code>Get()</code> Funktion oder ein Cast ist erforderlich, um auf die gespeicherte Klasse zuzugreifen. | ||
* <code>IsValid()</code> wird benutzt, um zu überprüfen, ob ein Wert gespeichert wird. | * <code>IsValid()</code> wird benutzt, um zu überprüfen, ob ein Wert gespeichert wird. | ||
* | * Um ein <code>CHandle</code> ungültig zu machen, muss <code>Term()</code> aufgerufen oder <code>INVALID_EHANDLE_INDEX</code> zugeordnet werden. | ||
== EHANDLE == | == EHANDLE == | ||
CHandle wird häufig durch das <code>EHANDLE</code> typedef | CHandle wird häufig durch das <code>EHANDLE</code> typedef benutzt, welches die Kurzform für <code>CHandle<C_BaseEntity></code> ist. Wenn man eine bestimmte Klasse speichern will, ist es besser, einen spezifischeren CHandle manuell zu deklarieren (siehe vorheriger Abschnitt). | ||
== Beispiel == | == Beispiel == | ||
Line 28: | Line 26: | ||
CBasePlayer* pPlayer = gEntList.FindEntityByClassname( NULL, "player" ); | CBasePlayer* pPlayer = gEntList.FindEntityByClassname( NULL, "player" ); | ||
// speichere es(zwei Mal, zu Demonstrationszwecken) | // speichere es (zwei Mal, zu Demonstrationszwecken) | ||
EHANDLE hPlayer = pPlayer; | EHANDLE hPlayer = pPlayer; | ||
CHandle<CBasePlayer> hPlayer_ = pPlayer; | CHandle<CBasePlayer> hPlayer_ = pPlayer; | ||
Line 37: | Line 35: | ||
== Siehe auch == | == Siehe auch == | ||
* | * {{L|Accessing Other Entities}} | ||
* | * {{L|Entity index}} | ||
* | * {{L|Networking Entities#Networking_entities|Networking Entities}} | ||
{{ACategory|Variables}} | |||
{{ACategory|Glossary}} | |||
[[Category:German]] | [[Category:German]] |
Latest revision as of 03:09, 22 August 2024
CHandle ist eine C++ Klasse, die eine eindeutige 32-Bit ID (entindex + serial number) für jede entfernte und neu erstellte Entity im Spiel darstellt. Es wird verwendet, um auf Entities zu verweisen, wo Pointer und Entity Indizes unsicher sind; hauptsächlich über die Client-/Server-Kluft und nach dem Laden eines Spielstandes.

Restore()
neu definieren!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 eine besondere Syntax an manchen Stellen notwendig:
- Man muss einen Pointer zum Objekt anbinden, nicht das Objekt selbst.
- Des
CHandle
sGet()
Funktion oder ein Cast ist erforderlich, um auf die gespeicherte Klasse zuzugreifen. IsValid()
wird benutzt, um zu überprüfen, ob ein Wert gespeichert wird.- Um ein
CHandle
ungültig zu machen, mussTerm()
aufgerufen oderINVALID_EHANDLE_INDEX
zugeordnet werden.
EHANDLE
CHandle wird häufig durch das EHANDLE
typedef benutzt, welches die Kurzform 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() );