Cocos2D与UIViewController混用

 首先我们可能使用在自己的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等处理即可。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值