私は通常javaまたはc++でプログラミングし、最近Objective-cから始めました。Objective-cでベクトルを探したところ、最良のオプションと思われるNSMutableArrayが見つかりました。私はopenglゲームに取り組んでおり、スプライト用にテクスチャードクワッドのNSMutableArrayを作成しようとしています。関連するコードは次のとおりです。
テクスチャードクワッドを定義します。
typedef struct {
CGPoint geometryVertex;
CGPoint textureVertex;
} TexturedVertex;
typedef struct {
TexturedVertex bl;
TexturedVertex br;
TexturedVertex tl;
TexturedVertex tr;
} TexturedQuad;
インターフェイスに配列を作成します。
@interface Sprite() {
NSMutableArray *quads;
}
配列を開始し、単一のスプライトの次元である「width」と「height」、およびの次元である「self.textureInfo.width」と「self.textureInfo.height」に基づいてtexturedQuadsを作成します。スプライトシート全体:
quads = [NSMutableArray arrayWithCapacity:1];
for(int x = 0; x < self.textureInfo.width/width; x++) {
for(int y = 0; y < self.textureInfo.height/height; y++) {
TexturedQuad q;
q.bl.geometryVertex = CGPointMake(0, 0);
q.br.geometryVertex = CGPointMake(width, 0);
q.tl.geometryVertex = CGPointMake(0, height);
q.tr.geometryVertex = CGPointMake(width, height);
int x0 = (x*width)/self.textureInfo.width;
int x1 = (x*width + width)/self.textureInfo.width;
int y0 = (y*height)/self.textureInfo.height;
int y1 = (y*height + height)/self.textureInfo.height;
q.bl.textureVertex = CGPointMake(x0, y0);
q.br.textureVertex = CGPointMake(x1, y0);
q.tl.textureVertex = CGPointMake(x0, y1);
q.tr.textureVertex = CGPointMake(x1, y1);
//add q to quads
}
}
問題は、クワッド「q」を配列「quads」に追加する方法がわからないことです。パラメータはTexturedQuadではなくidである必要があるため、単純な書き込み[quads addObject:q]は機能しません。intなどからIDを作成する方法の例を見てきましたが、TexturedQuadのようなオブジェクトでそれを行う方法がわかりません。