1

アイデアは、マクロを使用していくつかの固定CGPoint値を設定し、それらをコードで柔軟に(ランダムまたは提供された整数値で)読み取ることです

次のようないくつかの CGPoints 値を定義するヘッダー ファイルがあります。

#define kSpawnPoint1 {550,20}
#define kSpawnPoint2 {550,80}
#define kSpawnPoint3 {200,175}

コードで 1 から 3 までのランダムな整数を生成しており、整数値に従ってマクロで CGPoint 値を読み取る予定です。しかし、それを行う方法がわかりません。プリプロセッサに関する他のチュートリアルを学習した後、次のようにコードを記述します。

#define kSpawnPoint1 {550,20}
#define kSpawnPoint2 {550,80}
#define kSpawnPoint3 {200,175}
#define kSpawnPoint(x) kSpawnPoint##x

m ファイルで:

int tempInt = 1;
CGPoint tempSpawnPoint = kSpawnPoint(temInt);

ただし、機能しません。(警告: 宣言されていない識別子 'kSpawnPointspawnPoint') どうすればこれを正しく行うことができますか? 複数の CGPoint を事前に定義するのは正しい方法ですか? 将来のマルチスクリーン解像度のサポートはマクロでも実装しやすくなり、kSpawnPoints は異なるスクリーン解像度で同じにならないことを考慮して、これを実現するにはプリプロセッサを使用する必要があると思います。

4

1 に答える 1

1

マクロは、変数の値ではなく、テキストに対してのみ作用します。を記述するkSpawnPoint(an_int)と、プリプロセッサはリテラル文字列「an_int」を取得して貼り付けるため、kSpawnPointan_int. したがって、ポイントの 1 つになるには、引数としてリテラル番号を入力する必要があります: kSpawnPoint(1)-> kSpawnPoint1->{550, 20}

マクロの中からランダムに選択するには、配列やswitchステートメントなど、実行時に存在する構造にマクロを配置する必要があります。

于 2013-10-28T09:38:53.227 に答える