2009-06-16 7 views
1

私はthis gameのiPhoneの適応であるゲームを持っています。ここで私の船は道を作って、囲まれた場所に敵がいなければ包囲された道がいっぱいになります。iPhoneで「ピクセル単位」の色を変更する最善の方法は何ですか?

私はplayFieldを2次元配列として取りました(int playField [300] [300])。

囲まれたパスの色は、それが満たされていることを示すために変更する必要がある場合、私は

playFieldCountX=300, playFieldCountY=300; 
for (int i=0; i<playFieldCountX; i++) { 
    for (int j=0; j<playFieldCountY; j++) { 
     if(playField[i][j]==0){ 
         "What comes here??" } 
領域を埋めるしている船のパスが2フラグが立てられ、囲まれた領域が1フラグが立てられています

現在、CGContextMoveToPoint、AddLineToPoint、そしてQuartzのStrokePathでパスを埋めるのに時間がかかりすぎます。

もっと簡単なことはありますか? 1x1画像をあらかじめ定義して、それをすべてのピクセルでレンダリングするのと同じですか?または、各ピクセルの色を取得して設定するだけですか?

PS:私はOpenGLを知らない。あなたが説明していることがOpenGLに関係している場合、それについてもっと詳しく説明してください。ありがとうございました。

答えて

3

あなたには、画像データを格納するデータバッファを取るCGBitmapContextを作成する必要があります。あなたはCGBitmapContextを作成するときに、あなたがピクセルデータを格納するためにどのような形式を指定します。

次に画像を変更するには、単純にバッファを変更してからUIImageを再作成して、それを画面に描画することができます。

+1

私は、ビューのinitメソッドでCGBitmapContextを作成しています: CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); _myContext = CGBitmapContextCreate(NULL、self.frame.size.width、self.frame.size.height、8,4 * self.frame.size.width、colorSpace、kCGImageAlphaPremultipliedFirst); 次に、drawRectメソッドでこれを行います。 \t CGContextRef currentContext = UIGraphicsGetCurrentContext(); \t CGImageRefイメージ= CGBitmapContextCreateImage(_myContext); \t CGContextDrawImage(currentContext、[self bounds]、image); \t CGContextDrawLayerInRect(currentContext、[self bounds]、_myLayer); –

+0

しかし、私があなたに何をしているかを理解することはできません。あなたはこれで個々のピクセルごとに色を個別に変更できますか? 上記の混雑したコメントは申し訳ありません。 –

+0

最初のパラメータにNULLを渡さないでください。メモリを詰め込む(width * height * 4)。このデータポインタは、バッファを直接描画および変更する方法です。たとえば、data [x + y * width] = 0xFF0000はx、yに赤のピクセルを設定します(データがint *であると仮定します)。 – NilObject

関連する問題