【暇つぶしのUSシナリオ】読書ノート4


読書ノート3は座礁して、UDN教程の上の砲台模型の骨格の座標が問題が発生するのかも知れなくて、yaw pitch roll変数はすべて乱れて、もし彼のその座標によって来るならば、私は気が狂うことができると推測して、先に4を書きましょう
一、Delegates(代理)
1.先頭:
Delegatesは、インスタンス内の関数への参照です(cry、原文はどういう意味ですか)
Delegatesは、関数と変数の2つのプログラミング概念から構成されています.
エージェントは、値を格納し、実行時に変更できるため、変数と似ています.
2.概要:
実行時にコード実行にダイナミック性と柔軟性が要求される場合、通常はプロキシ(=.=マルチステート?)が使用されます.
2.1コード1
var int GlobalVar;
function Foo(float value)
{
	GlobalVar = value;
	Bar();
}
function Bar()
{
	switch(GlobalVar)
	{
		case 0:
			DoThis();
			break;
		case 1:
			DoThat();
			break;
		default:
			DoDefault();
			break;
	}
}

このコードは、実行時にコード実行を動的に変更する方法です.柔軟性がなく、多くの条件を追加する必要がある場合は、Bar()を維持するのに多くの精力が必要です.
2.2コード2
delegate Bar();

function Foo(float value)
{
	switch(value)
	{
		case 0:
			Bar = DoThis();
			break;
		case 1:
			Bar = DoThat();
			break;
		default:
			Bar = DoDefault();
			break;
	}
	Bar();
}

このコードは前のセグメントよりも良い点で、まず、グローバル変数を削除し、Bar()を実行したときの変数の判断を行います.
しかし、まだ面倒です.
2.3コード3
delegate Bar();

function Foo(delegate BarDelegate)
{
	Bar = BarDelegate;
	Bar();
}

このコードはもっと良くて、switchを削除しました.いくつの条件を追加しても、Foo()やBar()関数を維持する必要はありません(delegate内部はよくわかりませんが、下を見てください)
3.宣言エージェント(Delegate)
エージェント(Delgate)の宣言方法は関数宣言と同じです.しかし彼女はキーワードfunctionではなくキーワードdelegateを使っています
delegate Foo();
このクラスには現在Foo()という名前のエージェントがあります
3.1エージェントパラメータ
関数と同様に、エージェントはパラメータを持つことができます.関数とエージェントを組み合わせて使用する場合、関数にもエージェントと同じパラメータが含まれている必要があります.次の状況を考慮してください.
delegate Foo(const float Bar, const float Doh);
function FooBoom(const float Bar, const float Doh);
function FooFail(const float Bar);

FooBoom()をFoo()に割り当てるのは有効ですが、FooFail()をFoo()に割り当てるのは無効です.
注意:しかし、このような例外があります.
delegate Foo(const float Bar, const float Doh, optional float Moe);
function FooBoom(const float Bar, const float Doh);

いいでしょうFooBoom()はFoo()に割り当てられてもまだ幼いですが、FooBoom()でMoeを使用することはできません.プロキシには、戻りパラメータもあります.
3.2デフォルトの動作
delegate Foo()
{
	`Log("    !");
}

function Bar()
{
	`Log("      !");
}

function Bing()
{
	Foo = Bar;
	Foo();
	Foo() = none;
	Foo() ;
}

印刷:
デフォルトの動作ではありません!
デフォルトの動作!
小節:エージェントの意味はだいたい理解できますが、C++のようなものです..それは...私も忘れました.久しぶりにC++を見て忘れました.どうせあれみたいだったんですよ.
4.エージェント変数
変数を使用するようにエージェントを使用できます.算術計算はできませんが、値を割り当てることができます.
delegate Foo();
function Bar();
function PostBeginPlay()
{
	Foo = Bar;
}

エージェントを比較して、現在参照されている関数式を確認することがあります.次のことを考慮してください.
delegate Foo();
function Bar();
function Rod();
function PostBeginPlay()
{
	Foo = Bar;

	if(Foo == Bar)
	`Log("Foo Bar");
}

5.Delegateを関数に渡す
delegate Foo();
function Bar();
function PassDelegate()
{
	ReceiveDelegate(Bar);
}
function ReceiveDelegate(delegate FooDelegate)
{
	Foo = FooDelegate;
}

エージェントはプライベートまたは保護されているため、他のクラスはエージェントに正常にアクセスできません.たとえば、次のようにします.
class Pizza extends Object;
private delegate Eat();
function EatMe()
{
	Eat();
}
function HowToEat(delegate EatDelegate)
{
	Eat = EatDelegate;
}

class Mushroom extends Object;
function SpitOut()
{
	`Log("  ,   ,    ");
}
function EatPizza(Pizza pizza)
{
	if(pizza != none)
	{
		pizza.HowToEat(SpitOut);
		pizza.EatMe();
	}
}

6.エージェントとメモリ
エージェントが世界のactorインスタンスの純粋な関数を参照する場合、そのactorインスタンスを削除するのは安全です.
ただし、エージェントが別のオブジェクトインスタンスに存在する関数を参照する場合は、エージェントをnoneに設定する必要があります.
USは要求に従ってオブジェクトインスタンスを破棄することはできないので、すべてのループ参照を削除する必要があります.そうしないと、
このオブジェクトインスタンスをゴミ回収できると、現在のレベルが変更されたり、ゲームが終了したりしたときに発生する可能性があります.
預金漏れ