0

CCscene UserLevelCreation でシーンを切り替える (またはスプライトを表示する) のに少し問題がありますが、それは UIImagePickerController を使用して写真を撮ったり受け取ったりした後にのみ発生し、シーンを切り替えようとすると、エラーでクラッシュします:

"Could not attach texture to framebuffer"

これは私が写真を撮るために使用するコードです:

-(void)takePhoto{
AppController *appdel = (AppController*) [[UIApplication sharedApplication] delegate];
@try {

    uip = [[UIImagePickerController alloc] init] ;
    uip.sourceType = UIImagePickerControllerSourceTypeCamera;
    uip.allowsEditing = YES;
    uip.delegate = self;
}
@catch (NSException * e) {
    uip = nil;
}
@finally {
    if(uip) {
        [appdel.navController presentModalViewController:uip animated:NO];
    }
}
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
NSString * LevelImage;
LevelImage=[info objectForKey:UIImagePickerControllerOriginalImage];
AppController *appdel = (AppController*) [[UIApplication sharedApplication] delegate];
[appdel.navController dismissModalViewControllerAnimated:YES];

[NSThread detachNewThreadSelector:@selector(writeImgToPath:) toTarget:self withObject:LevelImage];
}

そして WriteImageToPath 関数:

-(void)writeImgToPath:(id)sender
{
UIImage *image = sender;
NSArray *pathArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                       NSUserDomainMask,
                                                       YES);
CGSize size;
int currentProfileIndex = 1;
NSString *path = [[pathArr objectAtIndex:0]
                  stringByAppendingPathComponent:[NSString stringWithFormat:@"CustomLevel_%d.png",currentProfileIndex]];

size = CGSizeMake(1136, 640);
UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0, 0, 1136, 640)];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSData *data = UIImagePNGRepresentation(image);
[data writeToFile:path atomically:YES];
CCLOG(@"saved...");

CGRect r = CGRectMake(0, 0, 1136, 640);
UIGraphicsBeginImageContext(r.size);

UIImage *img1;

[image drawInRect:r];
img1 = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(img1, nil, nil, nil);
currentProfileIndex++;
[[CCDirector sharedDirector] replaceScene:[LevelEditor Scene]
                           withTransition:[CCTransition transitionPushWithDirection:CCTransitionDirectionLeft duration:1.0f]];
}

-アップデート - - - - - - - - - - - - - - - - - - - - - - - - ---------------------------------- コードのさまざまな場所でシーンを切り替えてみたところ、切り替えることができますシーンまで自由自在 機能:

- (void)imagePickerController:(UIImagePickerController *)ピッカー didFinishPickingMediaWithInfo:(NSDictionary *)info{

その機能に問題があるのではないかと思います。

これまでのところ、次のことを試みました。

1.写真を撮る前にシーンを切り替えると、うまくいきます

2.画像​​のサイズを変更していた可能性があると読みましたが、コメントアウトしても違いはありませんでした。

3.シーンが切り替わる前にブレークポイントも追加しましたが、シーンはゼロではありません

4.最後に、uip UIImagePickerControllerを却下しましたが、それでも違いはありませんでした。

長い投稿で申し訳ありません/: 誰かが何が起こっているのか知っていれば、どんな助けも本当に素晴らしいでしょう.

4

1 に答える 1

1

わかりましたので、問題は次の行であることがわかりました。

[NSThread detachNewThreadSelector:@selector(writeImgToPath:) toTarget:self withObject:LevelImage];
}

どうやら Uikit の一部はスレッドに対応していないようです。

 [self writeImgToPath];

これが同じ問題を抱えている人に役立つことを願っています。

于 2014-10-17T00:16:13.140 に答える