2017-06-22 81 views
0

我正在努力解決標題中提到的問題。現在我在構造函數中設置了默認值,然後我想用我的函數對其進行更改,但它似乎不起作用。在運行時創建並更改遊戲狀態

void AMyGameModeBase::SwapGameState(AGameStateBase* GameStateVariable) 
    { 
     GameStateClass = GameStateVariable->StaticClass(); 
    } 

我該如何正確地做到這一點?很好的解釋將是真棒:)

編輯:

所以這是我的全部代碼: MyGameModeBase.h

#pragma once 

#include "GameFramework/GameMode.h" 
#include "MyGameModeBase.generated.h" 

/** 
* 
*/ 
UCLASS() 
class PROJECT_API AMyGameModeBase : public AGameMode 
{ 
    GENERATED_BODY() 

public: 

    AMyGameModeBase(); 

    UFUNCTION(BlueprintCallable, Category="GameState") 
    void SwapGameState(AGameStateBase* GameStateVariable); 
}; 

MyGameModeBase.cpp

#include "Project.h" 
#include "MyGameModeBase.h" 


AMyGameModeBase::AMyGameModeBase() 
{ 
    GameStateClass = AGameStateBase::StaticClass(); 
} 


void AMyGameModeBase::SwapGameState(AGameStateBase* GameStateVariable) 
{ 
    GameStateClass = GameStateVariable->StaticClass(); 
} 

我在做什麼然後是: 1.打開GameMode藍圖 2.從Event開始播放並撥打SwapGameState 3.我正在創建引用MyGameState的變量。 4.然後,我使用打印字符串名稱打印節點「GetGameState」,並且看到它沒有更改。

我想實現的是: 1.運行時創建遊戲狀態 2.在運行時將其設置爲使用的默認遊戲狀態。

+0

你得到什麼錯誤的靜態函數?你確切的問題是什麼?所有這些類型的定義和這些變量和函數的聲明是什麼?請提供[最小,**完整**和可驗證示例](https://stackoverflow.com/help/mcve)並更全面地解釋您的情況。 – InternetAussie

+0

我編輯了我的問題。沒有錯誤,它只是不工作。 –

+0

GameState用於從服務器向任何連接的客戶端傳遞信息。你爲什麼試圖將GameState設置爲其他東西? – JonS

回答

2

的StaticClass功能是,你這樣調用MyStateClass::StaticClass()

你想這是什麼

void AMyGameModeBase::SwapGameState(AGameStateBase* GameStateVariable) 
{ 
    GameStateClass = GameStateVariable->GetClass(); 
} 
+0

由於某種原因,執行此操作後,我得到訪問衝突錯誤: 異常拋出0x00007FFEBE7D2CDF(UE4Editor-Project.dll )在UE4Editor.exe中:0xC0000005:訪問衝突讀取位置0x0000000000000010。發生了 –

+0

您傳遞的變量可能爲空,如果您需要更多幫助,您必須顯示更多代碼 – lapinozz

+0

沒有更多代碼。只傳入GameState引用。所以我想這就是這種情況 –