2013-01-23 94 views
1

我正在爲iOS 5和6的一個項目,iPad的時候如何開始的Cocos2D場景3推一個UIViewController

我的問題是我需要繪製的Cocos2D東西的場景,但它不起作用。

我開始代碼中的AppDelegate - 設置RootViewController的(MainViewController)

在這種MainViewController,我有一個按鈕,即觸發一個稱爲-draw方法:

的-draw:方法是很簡單。

DrawController * c = [DrawController alloc] init]; [self.navigationController pushViewController:c animated:YES];

現在,當應用程序按下DrawController時,我的應用程序應該使用CCDirector製作一個Cocos2D場景。

但它非常令人沮喪,因爲我總是在屏幕上出現黑屏。

DrawController

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

glView = [CCGLView viewWithFrame:[self.view bounds] 
        pixelFormat:kEAGLColorFormatRGB565 //kEAGLColorFormatRGBA8 
        depthFormat:0 //GL_DEPTH_COMPONENT24_OES 
       preserveBackbuffer:NO 
         sharegroup:nil 
        multiSampling:NO 
       numberOfSamples:0]; 

director_ = (CCDirectorIOS*) [CCDirector sharedDirector]; 

director_.wantsFullScreenLayout = YES; 

// Display FSP and SPF 
[director_ setDisplayStats:YES]; 

// set FPS at 60 
[director_ setAnimationInterval:1.0/60]; 


// attach the openglView to the director 
[director_ setView:glView]; 


// for rotation and other messages 
[director_ setDelegate:(id <CCDirectorDelegate>) [[UIApplication sharedApplication] delegate]]; 



UIButton * redColor = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
redColor.tag = 1; 
redColor.frame = CGRectMake(658, 80, 100, 30); 
[redColor setTitle:@"ROT" forState:UIControlStateNormal]; 
[redColor addTarget:self action:@selector(changeColor:) forControlEvents:UIControlEventTouchUpInside]; 
[glView addSubview:redColor]; 

UIButton * blueColor = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
blueColor.tag = 2; 
blueColor.frame = CGRectMake(658, 80+30+30, 100, 30); 
[blueColor setTitle:@"BLAU" forState:UIControlStateNormal]; 
[blueColor addTarget:self action:@selector(changeColor:) forControlEvents:UIControlEventTouchUpInside]; 
[glView addSubview:blueColor]; 

UIButton * undo = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
undo.tag = 1; 
undo.frame = CGRectMake(658, 80 +30+30 +30+30, 100, 30); 
[undo setTitle:@"UNDO" forState:UIControlStateNormal]; 
[undo addTarget:self action:@selector(changeHistory:) forControlEvents:UIControlEventTouchUpInside]; 
[glView addSubview:undo]; 

UIButton * foto = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
foto.tag = 1; 
foto.frame = CGRectMake(658, 80 +30+30 +30+30 +30+30, 100, 30); 
[foto setTitle:@"FOTO" forState:UIControlStateNormal]; 
[foto addTarget:self action:@selector(takeScreenshot:) forControlEvents:UIControlEventTouchUpInside]; 
[glView addSubview:foto]; 

UIStepper * overdrawStepper = [[UIStepper alloc] initWithFrame:CGRectMake(658, 80 +30+30 +30+30 +30+30 +30+30, 100, 30)]; 
overdrawStepper.value = 1; 
overdrawStepper.minimumValue = 1; 
overdrawStepper.maximumValue = 18; 
overdrawStepper.stepValue = 1; 
[overdrawStepper addTarget:self action:@selector(overdraw:) forControlEvents:UIControlEventValueChanged]; 

[glView addSubview:overdrawStepper]; 


UIStepper * thicknessStepper = [[UIStepper alloc] initWithFrame:CGRectMake(658, 80 +30+30 +30+30 +30+30 +30+30 +30+30, 100, 30)]; 
thicknessStepper.value = 3; 
thicknessStepper.minimumValue = 1; 
thicknessStepper.maximumValue = 30; 
thicknessStepper.stepValue = 1; 
[thicknessStepper addTarget:self action:@selector(thickness:) forControlEvents:UIControlEventValueChanged]; 

[glView addSubview:thicknessStepper]; 


UIStepper * alphaStepper = [[UIStepper alloc] initWithFrame:CGRectMake(658, 80 +30+30 +30+30 +30+30 +30+30 +30+30 +30+30, 100, 30)]; 
alphaStepper.value = 1; 
alphaStepper.minimumValue = 0.1; 
alphaStepper.maximumValue = 1; 
alphaStepper.stepValue = 0.1; 
[alphaStepper addTarget:self action:@selector(alpha:) forControlEvents:UIControlEventValueChanged]; 

[glView addSubview:alphaStepper]; 

UIButton * eraser = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
eraser.tag = 1; 
eraser.frame = CGRectMake(658, 80 +30+30 +30+30 +30+30 +30+30 +30+30 +30+30 +30+30, 100, 30); 
[eraser setTitle:@"Eraser" forState:UIControlStateNormal]; 
[eraser addTarget:self action:@selector(erase:) forControlEvents:UIControlEventTouchUpInside]; 
[glView addSubview:eraser]; 



// 2D projection 
[director_ setProjection:kCCDirectorProjection2D]; 
// [director setProjection:kCCDirectorProjection3D]; 

// Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices 
if(! [director_ enableRetinaDisplay:YES]) 
    CCLOG(@"Retina Display Not supported"); 


// set the Navigation Controller as the root view controller 
// there is a iOS 6 Bug, so we need have this workaround 


[self addChildViewController:director_]; 

// Add the director's OpenGL view as a subview so we can see it. 
[self.view addSubview:director_.view]; 

// Finish up our view controller containment responsibilities. 
[director_ didMoveToParentViewController:self]; 


//  director_.view.frame = CGRectMake(0, 0, 1024, 1024); 

// Default texture format for PNG/BMP/TIFF/JPEG/GIF images 
// It can be RGBA8888, RGBA4444, RGB5_A1, RGB565 
// You can change anytime. 
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]; 

// Assume that PVR images have premultiplied alpha 
[CCTexture2D PVRImagesHavePremultipliedAlpha:YES]; 

// and add the scene to the stack. The director will run it when it automatically when the view is displayed. 


self.view.backgroundColor = [UIColor orangeColor]; 

if ([self loadImage]) { 
    lineDrawer = [[LineDrawer alloc] initWithImage:[self loadImage]]; 
} else { 
    lineDrawer = [LineDrawer node]; 
} 


CCScene *scene = [CCScene node]; 
//[scene setContentSize:glView.frame.size]; 
[scene addChild:lineDrawer]; 
[director_ pushScene: scene]; 

NSLog(@"self.view.frame %@", NSStringFromCGRect(self.view.frame)); 

// Do any additional setup after loading the view. 



#import "cocos2d.h" 

@interface LineDrawer : CCLayer 

- (id)initWithImage:(UIImage*)imageName; 

// change the color of line 
- (void)changeLineColorToRed:(float)r_ green:(float)g_ blue:(float)b_ alpha:(float)a_; 

// the undo function to call. When you undo the last line, the also will be an change in line color 
- (void)undo; 

// get the actual drawing from screen 
- (UIImage*)getScreenShot; 

// property change methods 
- (void)changeOverdraw:(float)overdraw_; 
- (void)changeThikness:(int)thikness_; 
- (void)changeAlpha:(float)alpha_; 

@end 

- (id)initWithImage:(UIImage *)image 
{ 
self = [super init]; 
if (self) { 
    points = [NSMutableArray array]; 
    velocities = [NSMutableArray array]; 
    circlesPoints = [NSMutableArray array]; 

    _undoManager = [[RMUndoManager alloc] init]; 


    shaderProgram_ = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionColor]; 
    overdraw = 1.0f; 

    CCTexture2D * imageTexture = [[CCTexture2D alloc] initWithCGImage:image.CGImage 
                 resolutionType:kCCResolutioniPadRetinaDisplay]; 

    CCSprite *backGroundSprite = [[CCSprite alloc] initWithTexture: imageTexture]; 
    [backGroundSprite setPosition:CGPointMake(768/2, 1024/2)]; 

    renderTexture = [[CCRenderTexture alloc] initWithWidth:(int)self.contentSize.width 
                height:(int)self.contentSize.height 
               pixelFormat:kCCTexture2DPixelFormat_RGBA8888]; 

    renderTexture.anchorPoint = ccp(0,0); 

    renderTexture.position = ccp(1024 * 0.5f, 768 * 0.5f); 

    renderTexture.sprite = backGroundSprite; 


    [[renderTexture sprite] setBlendFunc:(ccBlendFunc){GL_ONE, GL_ONE_MINUS_SRC_ALPHA}]; 

    [renderTexture clear:1.0f g:1.0f b:1.0f a:0]; 


    [renderTexture begin]; 
    [backGroundSprite visit]; 
    [renderTexture end]; 

    [self addChild:renderTexture]; 



    self.isTouchEnabled = YES; 

    ccColor4F c = {0, 0, 190.0f/255.0f, 1}; 
    drawColor = c; 

    thikness = 3; 

    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self 
                          action:@selector(handlePanGesture:)]; 
    panGestureRecognizer.maximumNumberOfTouches = 1; 
    [self addGestureRecognizer:panGestureRecognizer]; 

    UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self 
                              action:@selector(handleLongPress:)]; 
    [self addGestureRecognizer:longPressGestureRecognizer]; 

    UITapGestureRecognizer * tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self 
                          action:@selector(handleTap:)]; 
    tapGestureRecognizer.numberOfTapsRequired = 1; 
    [self addGestureRecognizer:tapGestureRecognizer]; 
} 
return self; 
} 

有人可以幫助我?

https://dl.dropbox.com/u/15710714/iOS%20Simulator%20Bildschirmfoto%2023.01.2013%2016.17.57.png

回答

0

只需添加[director_ startAnimation]; 下面[director_ pushScene: scene];

相關問題