Tworzenie funkcji ItemCollected w C++
W poprzednim artykule widzieliśmy podstawowe pojęcia operatorów i warunkowe. W tym artykule zobaczymy te koncepcje w praktyce podczas implementowania funkcji ItemCollected () w klasie ATutoProjectGameMode C ++.
Ta funkcja zostanie wywołana przez klasę TutoProjectCollectable, gdy gracz zbierze przedmiot w grze. W naszej grze przedmiot jest wizualnie reprezentowany przez posąg, ale w innym artykule zobaczymy, jak zmienić jego wygląd.
Funkcja ItemCollected () musi wykonywać następujące czynności:
- Dodaje wartość do zmiennej Score , gdy gracz zbierze przedmiot, który zostanie obliczany za pomocą wyrażenia 10 x PlayerLevel.
- Dodaje wartość 1 do zmiennej ItemCount, która przechowuje liczbę zebranych elementów.
- Sprawdza, czy wartość zmiennej ItemCount jest wielokrotnością 5. Jeśli to prawda, wykonuje następujące czynności:
- Dodaje wartość 15 do zmiennej Time.
- Dodaje wartość 1 do zmiennej PlayerLevel, przy czym maksymalna wartość zmiennej PlayerLevel jest ograniczona do 5.
Za każde 5 zebranych przedmiotów gracz podnosi poziom i zyskuje 15 sekund czasu.
Deklaracja funkcji ItemCollected () jest wykonywana w pliku nagłówkowym TutoProjectGameMode.h poniżej deklaracji funkcji StartGame (), jak pokazano na poniższym fragmencie kodu. Funkcja ItemCollected () jest publiczna, ponieważ będzie wywoływana przez inną klasę C ++.
...
UCLASS(minimalapi)
class ATutoProjectGameMode : public AGameModeBase
{
GENERATED_BODY()
public:
ATutoProjectGameMode();
void StartGame();
void ItemCollected();
...
Używam wielokropka (…) aby wskazać, że wyświetlany kod źródłowy nie jest kompletny
Treść funkcji ItemCollected () należy umieścić w pliku TutoProjectGameMode.cpp poniżej funkcji BeginPlay ():
...
void ATutoProjectGameMode::BeginPlay()
{
Super::BeginPlay();
StartGame();
}
void ATutoProjectGameMode::ItemCollected()
{
Score += PlayerLevel * 10;
ItemCount++;
if (ItemCount % 5 == 0)
{
Time += 15;
if (PlayerLevel < 5)
{
PlayerLevel++;
}
}
}
Przyjrzyjmy się każdej akcji wykonywanej przez funkcję ItemCollected () wraz z odpowiadającym jej kodem źródłowym.
- Dodaje do wartości zmiennej Score punkty uzyskane, gdy gracz zbierze przedmiot, które są obliczane za pomocą wyrażenia 10 x PlayerLevel.
Score += PlayerLevel * 10;
Używam skrótu operatora + =, który jest operatorem arytmetycznym razem z operatorem przypisania. Operator + = dodaje wynik wyrażenia po prawej stronie do bieżącej wartości zmiennej Score.
Jedną z zalet języka C ++ w stosunku do Blueprints jest pisanie wyrażeń. Złożone wyrażenia można zapisać w jednym wierszu kodu C ++, podczas gdy w Blueprints to samo wyrażenie będzie wymagało od nas napisania wielu węzłów Blueprints.
- Dodaje wartość 1 do zmiennej ItemCount, która przechowuje liczbę zebranych elementów.
ItemCount++;
Używam operatora przyrostu ++, który dodaje 1 do bieżącej wartości zmiennej ItemCount.
- Sprawdza, czy wartość zmiennej ItemCount jest wielokrotnością 5. Jeśli prawda, wykonuje poniższe czynności.
if (ItemCount % 5 == 0)
Blok kodu poniżej warunku if, który jest ujęty w nawiasy klamrowe {}, zostanie wykonany tylko wtedy, gdy wynik wyrażenia w nawiasach jest prawdziwy. W wyrażeniu używam operatora %, który zwraca pozostałą część dzielenia. Operator % jest znany jako Modulo. Gdy ItemCount ma wartość będącą wielokrotnością 5, to pozostała część dzielenia przez 5 wynosi 0. Operator % ma pierwszeństwo przed operatorem “==”, więc pozostała część dzielenia jest wykonywana przed porównaniem z 0.
- Dodaje wartość 15 do zmiennej Time.
Time += 15;
Ta linia daje graczowi kolejne 15 sekund czasu gry.
- Dodaje wartość 1 do zmiennej PlayerLevel, przy czym maksymalna wartość zmiennej PlayerLevel jest ograniczona do 5.
if (PlayerLevel < 5)
{
PlayerLevel++;
}
Używam warunku if, aby zapobiec osiągnięciu wyższego poziomu w PlayerLevel niż 5.
Źródło:https://romeroblueprints.blogspot.com/2020/08/creating-itemcollected-function-in-c.html
Leave a Reply