现在的位置: 首页 > 综合 > 正文

Cocos2D与UIViewController混用

2013年09月02日 ⁄ 综合 ⁄ 共 4451字 ⁄ 字号 评论关闭

 首先我们可能使用在自己的iOS代码中为了某种目的,而使用Cocos2D,于是就有了下面的情况, 

1。 在Cocos2D项目中加入UIViewController的界面 (直接上代码,代码是从网上找的,应该是可以的)

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
- (void) showUIViewController{
    
    if(firstViewController==nil){
        firstViewController=[[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
    }

    [director pause];
    [director stopAnimation];
    [[director view] setUserInteractionEnabled:NO];
    
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:.5];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:[[director view] window] cache:YES];
    
    [[[director view] window]addSubview:firstViewController.view];
    
    [UIView commitAnimations];
}

- (void) hideUIViewController
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:.5];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animDone:finished:context:)];
    
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:[[director view]window] cache:YES];
    
    [firstViewController.view removeFromSuperview];
    
    [UIView commitAnimations];
    
    [[director view] setUserInteractionEnabled:YES];
    [director startAnimation];
    [director resume];
}

+(AppController*)app{
    return (AppController*)[[UIApplication sharedApplication]delegate];
}
 
在CC的界面中加入:

-(void) registerWithTouchDispatcher {
    [[[CCDirector sharedDirector] touchDispatcher] addStandardDelegate:self priority:0]; 
}

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"HI");
    [[AppController app] showUIViewController];

 
在UIViewController中加入:
 
#import "AppDelegate.h"

-(IBAction)buttonClicked:(id)sender{
    [[AppController app] hideUIViewController];
}

2。 在iOS项目中加入Cocos2D

这种情况就比较麻烦一些了, 光是引入cocos2d中的那些libs文件,就得麻烦半天。 不过为了使用cocos2D中的好处,比如其中的Box2D引擎, 不得不用啊。

算了, 老规矩, 上代码。

#import <UIKit/UIKit.h>

#import "cocos2d.h"

@interface SecondViewController :
UIViewController <CCDirectorDelegate>

{

   
CCDirectorIOS
*director_;

}

@property (readonly)
CCDirectorIOS *director;

@end

实现文件

@interface
SecondViewController ()

@end

@implementation SecondViewController

@synthesize director=director_;

- (void)viewDidLoad

{

    [super
viewDidLoad];

// Create an CCGLView with a RGB565 color buffer, and a depth buffer of 0-bits

CCGLView *glView = [CCGLView
viewWithFrame:self.view.bounds

  pixelFormat:kEAGLColorFormatRGB565
//kEAGLColorFormatRGBA8

  depthFormat:0
//GL_DEPTH_COMPONENT24_OES

preserveBackbuffer:NO

sharegroup:nil

multiSampling:NO

  numberOfSamples:0];

    

// Enable multiple touches

[glView setMultipleTouchEnabled:YES];

    

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:self];

// 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");

// 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];

// If the 1st suffix is not found and if fallback is enabled then fallback suffixes are going to searched. If none is found, it will try with the name without suffix.

// On iPad HD  : "-ipadhd", "-ipad",  "-hd"

// On iPad     : "-ipad", "-hd"

// On iPhone HD: "-hd"

CCFileUtils *sharedFileUtils = [CCFileUtils
sharedFileUtils];

[sharedFileUtils
setEnableFallbackSuffixes:NO];
// Default: NO. No fallback suffixes are going to be used

[sharedFileUtils
setiPhoneRetinaDisplaySuffix:@"-hd"];
// Default on iPhone RetinaDisplay is "-hd"

[sharedFileUtils
setiPadSuffix:@"-ipad"];
// Default on iPad is "ipad"

[sharedFileUtils
setiPadRetinaDisplaySuffix:@"-ipadhd"];
// Default on iPad RetinaDisplay is "-ipadhd"

// 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.

// [director_ pushScene: [IntroLayer scene]];

    [director_
pushScene: [PinballTable
scene]];

    [self.view
addSubview:director_.view];

}

- (void)viewWillAppear:(BOOL)animated {

    [director_
startAnimation];

}

- (void)viewWillDisappear:(BOOL)animated {

    [director_
stopAnimation];

}

这样就加入了这个Cocos2D界面。然后在cocos2D界面中, 可以注册交互事件, 然后让其它的上层的view, 或者viewController处理,比如可以直接把自己这个director_.view移除掉。当然会需要做一些stopAnimation, end等处理即可。

抱歉!评论已关闭.