我一直在改装这个游戏叫做“Outlast”,它基于虚幻引擎3.5一段时间了,而且我遇到了一个更多C++相关的问题,因为虚幻脚本基于C++ :虚幻脚本代码改变奇怪的问题
我打电话的游戏,需要一个字符串和布尔现有的功能,这是一个功能:
event StartNewGameAtCheckpoint(string CheckpointStr, bool bSaveToDisk){
local OLCheckpoint CheckCP, startCP;
local OLHero Hero;
local OLGame CurrentGame;
local OLEngine Engine;
// End:0x33
if(CheckpointStr == "KillHero") >>> this if is new code that I added myself
{
NumBatteries = 86;
NotifyDifficultyChanged();
return;
} ... more irrelevant code comes after this > }
我打电话这里功能(2种可能):
Method A:
class'OLGFxMoviePlayer'.static.GetOLPC().StartNewGameAtCheckpoint("KillHero", false);
Method B:
Outer.GetOLPC().StartNewGameAtCheckpoint("KillHero", false);
我在这里有一个奇怪的问题,“KillHero”字符串由于某种原因(两种方法)没有将其设置为该函数,因此if语句将失败,因为“CheckpointStr”不是“KillHero”at所有!
对于任何人想知道GetOLPC是从哪里来的,它是让当前的PlayerController和功能是这样的:
function OLPlayerController GetOLPC(){
return OLPlayerController(GetPC());
//return ReturnValue;
}
并通过此功能,您可以访问其持有类“OLPlayerController” “StartNewGameAtCheckpoint”
我知道这是如果因为如果我把numbatteries和notifydifficultychanged以外的,如果它工作正常。
应该在技术上的工作作为别处游戏是这样做的:
Outer.consolecommand("camera freecam");
也使用内部的字符串,但能正常工作。
有谁知道错在哪里?
谢谢
我不知道UnrealScript,但在C++,在这种情况下使用'=='运算符是不正确的。你需要像下面这样的东西:'if(!strcmp(CheckpointStr,“Kill Hero”))' – TriskalJM
@TriskalJM由于'CheckpointStr'被定义为'string'(如果我们可以假设'std :: string'正在谈论C++),'operator =='会按预期工作(因为'std :: string'已经以各种方式重载了它们),并且你的建议甚至不会编译。它是C++,而不是C. –
@AlgirdasPreidžius公平点。 – TriskalJM