私のゲームiOSプロジェクトでは、リングバッファが必要です。要素が出入りするキューと同様に機能する必要がありますが、バッファ内の要素の合計量は同じままである必要があります。
Javaを使用してリングバッファを正常に実装しましたが、Objective-cにはあまり詳しくありません。CHCircularBufferというWeb上でリングバッファの実装を見つけました:https ://bitbucket.org/devartum/chdatastructures/src/4d6d7194ee94/source/CHCircularBuffer.mしかし、正しく実装できませんでした。
循環バッファは、すべての数学的な地形生成を行うTerrainManagerと呼ばれるクラスのプロパティです。
@interface TerrainManager : NSObject{
int terrainParts;
CHCircularBuffer* circularTerrainBuffer;
}
@property(nonatomic, retain) CHCircularBuffer *circularTerrainBuffer;
@end
これは、TerrainManagerの実装でリングバッファが初期化される方法です。
circularTerrainBuffer = [[CHCircularBuffer alloc] initWithCapacity:parts];
これにより、バッファのインスタンスが作成され、sizeプロパティがpartsに設定されます。次に、addObjectメソッドを使用してオブジェクトをバッファに追加します。
[circularTerrainBuffer addObject:[NSNumber numberWithDouble:0.2]];
この行に「exec_bad_access」というエラーが表示されることがあります。たとえば、容量が15のバッファを初期化すると、すべてが正常になり、20の場合はエラーが発生します。
ここで、描画が行われる地形クラスからバッファにアクセスしようとします。しかし、オブジェクトにアクセスしようとすると、「bad_access」エラーが発生します。
NSArray *arr = [terrainManager.circularTerrainBuffer allObjects];
たとえば、この行はエラーを作成します。
だから私のコードに何か問題があります。たぶん私はバッファを理解しておらず、間違った方法でオブジェクトを追加しています。知らない。何かアイデアや提案はありますか?