zoukankan      html  css  js  c++  java
  • cocos2d-x 3.1.1 学习笔记[21]cocos2d-x 创建过程

    文章出自于  http://blog.csdn.net/zhouyunxuan


    RootViewController.h

    #import <UIKit/UIKit.h>
    
    @interface RootViewController : UIViewController {
    
    }
    - (BOOL) prefersStatusBarHidden;
    
    @end


    RootViewController.cpp


    #import "RootViewController.h"
    #import "cocos2d.h"
    #import "CCEAGLView.h"
    
    @implementation RootViewController
    
    /*
     // The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
            // Custom initialization
        }
        return self;
    }
    */
    
    /*
    // Implement loadView to create a view hierarchy programmatically, without using a nib.
    - (void)loadView {
    }
    */
    
    /*
    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    
    */
    // Override to allow orientations other than the default portrait orientation.
    // This method is deprecated on ios6
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        return UIInterfaceOrientationIsLandscape( interfaceOrientation );
    }
    
    // For ios6, use supportedInterfaceOrientations & shouldAutorotate instead
    - (NSUInteger) supportedInterfaceOrientations{
    #ifdef __IPHONE_6_0
        return UIInterfaceOrientationMaskAllButUpsideDown;
    #endif
    }
    
    //是否自己主动旋转
    - (BOOL) shouldAutorotate {
        return YES;
    }
    
    //这个函数时用来确定我们的应用所支持的旋转方向。假设想要支持每一个方向则直接返回YES即可,还能够单独推断某一方向:
    - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
        [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
        
        //设置旋转到某个地方
        /*
         UIInterfaceOrientationPortrait: 正常
         UIInterfaceOrientationPortraitUpsideDown: 转180度
         UIInterfaceOrientationLandscapeLeft: 向左转90度
         UIInterfaceOrientationLandscapeRight: 向右转90度
         */
        //处理转移到某个角度的时候要做的事情
        if (fromInterfaceOrientation == UIInterfaceOrientationPortrait) {
            //
        }
        else if (fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
            //
        }
        else if (fromInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){
            //
        }
        else if (fromInterfaceOrientation == UIInterfaceOrientationLandscapeRight){
            //
        }
    
        
        
        cocos2d::GLView *glview = cocos2d::Director::getInstance()->getOpenGLView();
    
        if (glview)
        {
            CCEAGLView *eaglview = (CCEAGLView*) glview->getEAGLView();
    
            if (eaglview)
            {
                CGSize s = CGSizeMake([eaglview getWidth], [eaglview getHeight]);
                cocos2d::Application::getInstance()->applicationScreenSizeChanged((int) s.width, (int) s.height);
            }
        }
    }
    
    //fix not hide status on ios7
    - (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
    
    - (void)didReceiveMemoryWarning {
        // Releases the view if it doesn't have a superview.
        [super didReceiveMemoryWarning];
    
        // Release any cached data, images, etc that aren't in use.
    }
    
    - (void)viewDidUnload {
        [super viewDidUnload];
        // Release any retained subviews of the main view.
        // e.g. self.myOutlet = nil;
    }
    
    
    - (void)dealloc {
        [super dealloc];
    }
    
    
    @end



    AppController.h

    #import <UIKit/UIKit.h>
    
    @class RootViewController;
    
    @interface AppController : NSObject <UIApplicationDelegate> {
        UIWindow *window;
    }
    
    @property(nonatomic, readonly) RootViewController* viewController;
    
    @end


    AppController.mm

    #import "AppController.h"
    #import "CCEAGLView.h"
    #import "cocos2d.h"
    #import "AppDelegate.h"
    #import "RootViewController.h"
    
    @implementation AppController
    
    #pragma mark -
    #pragma mark Application lifecycle
    
    // cocos2d application instance
    static AppDelegate s_sharedApplication;
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    
        // Override point for customization after application launch.
    
        // Add the view controller's view to the window and display.
        window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
    
        // Init the CCEAGLView
        CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [window bounds]
                                         pixelFormat: kEAGLColorFormatRGBA8
                                         depthFormat: GL_DEPTH24_STENCIL8_OES
                                  preserveBackbuffer: NO
                                          sharegroup: nil
                                       multiSampling: NO
                                     numberOfSamples: 0];
    
        // Use RootViewController manage CCEAGLView 
        _viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
        _viewController.wantsFullScreenLayout = YES;
        _viewController.view = eaglView;
    
        // Set RootViewController to window
        if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)
        {
            // warning: addSubView doesn't work on iOS6
            [window addSubview: _viewController.view];
        }
        else
        {
            // use this method on ios6
            [window setRootViewController:_viewController];
        }
    
        [window makeKeyAndVisible];
    
        [[UIApplication sharedApplication] setStatusBarHidden:true];
    
        // IMPORTANT: Setting the GLView should be done after creating the RootViewController
        cocos2d::GLView *glview = cocos2d::GLView::createWithEAGLView(eaglView);
        cocos2d::Director::getInstance()->setOpenGLView(glview);
    
        cocos2d::Application::getInstance()->run();
    
        return YES;
    }
    
    
    - (void)applicationWillResignActive:(UIApplication *)application {
        /*
         Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
         Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
         */
         //We don't need to call this method any more. It will interupt user defined game pause&resume logic
        /* cocos2d::Director::getInstance()->pause(); */
    }
    
    - (void)applicationDidBecomeActive:(UIApplication *)application {
        /*
         Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
         */
         //We don't need to call this method any more. It will interupt user defined game pause&resume logic
        /* cocos2d::Director::getInstance()->resume(); */
    }
    
    - (void)applicationDidEnterBackground:(UIApplication *)application {
        /*
         Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
         If your application supports background execution, called instead of applicationWillTerminate: when the user quits.
         */
        cocos2d::Application::getInstance()->applicationDidEnterBackground();
    }
    
    - (void)applicationWillEnterForeground:(UIApplication *)application {
        /*
         Called as part of  transition from the background to the inactive state: here you can undo many of the changes made on entering the background.
         */
        cocos2d::Application::getInstance()->applicationWillEnterForeground();
    }
    
    - (void)applicationWillTerminate:(UIApplication *)application {
        /*
         Called when the application is about to terminate.
         See also applicationDidEnterBackground:.
         */
    }
    
    
    #pragma mark -
    #pragma mark Memory management
    
    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
        /*
         Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later.
         */
    }
    
    
    - (void)dealloc {
        [window release];
        [super dealloc];
    }
    
    
    @end




    didFinishLaunchingWithOptions
    2014-07-28 10:07:41.247 SKT iOS[1024:60b] cocos2d: surface size: 1024x768
    cocos2d: GLView End
    cocos2d: 
    {
    	cocos2d.x.version: cocos2d-x 3.1.1 - modify by zyx
    	cocos2d.x.compiled_with_gl_state_cache: true
    	cocos2d.x.build_type: DEBUG
    	gl.supports_vertex_array_object: true
    	cocos2d.x.compiled_with_profiler: false
    	gl.renderer: Apple Software Renderer
    	gl.vendor: Apple Computer, Inc.
    	gl.max_texture_size: 4096
    	gl.max_samples_allowed: 4
    	gl.version: OpenGL ES 2.0 APPLE-9.4.3
    	gl.supports_S3TC: false
    	gl.supports_ATITC: false
    	gl.supports_ETC1: false
    	gl.max_texture_units: 8
    	gl.supports_PVRTC: true
    	gl.supports_NPOT: true
    	gl.supports_discard_framebuffer: true
    	gl.supports_BGRA8888: false
    }
    
    
    libpng warning: iCCP: known incorrect sRGB profile
    cocos2d: GLProgramState::init
    cocos2d: Director End
    AppDelegate::applicationDidFinishLaunching()
    cocos2d: Application End
    applicationDidBecomeActive



    Application 单例的实现方法
    //静态函数调用的时候会运行一次构造函数,这个时候就初始化这个对象了。
    Application* Application::getInstance()
    {
        CC_ASSERT(sm_pSharedApplication);
        return sm_pSharedApplication;
    }
    //初始化
    Application* Application::sm_pSharedApplication = 0;
    //Application的构造函数
    Application::Application()
    {
        //在构造函数里面初始化sm_pSharedApplication
        CC_ASSERT(! sm_pSharedApplication);
        sm_pSharedApplication = this;
    }
    //Application的析构函数
    Application::~Application()
    {
        CC_ASSERT(this == sm_pSharedApplication);
        sm_pSharedApplication = 0;
    }



    Director 单例实现方法
    static DisplayLinkDirector *s_SharedDirector = nullptr;
    static Director* getInstance();
    Director* Director::getInstance()
    {
        if (!s_SharedDirector)
        {
            s_SharedDirector = new DisplayLinkDirector();
            s_SharedDirector->init();
        }
    
        return s_SharedDirector;
    }




    void Director::setOpenGLView(GLView *openGLView)
    {
        CCASSERT(openGLView, "opengl view should not be null");
    
        if (_openGLView != openGLView)
        {
            // Configuration. Gather GPU info
            Configuration *conf = Configuration::getInstance();
            conf->gatherGPUInfo();
            CCLOG("%s
    ",conf->getInfo().c_str());
    
            if(_openGLView)
                _openGLView->release();
            _openGLView = openGLView;
            _openGLView->retain();
    
            // set size
            _winSizeInPoints = _openGLView->getDesignResolutionSize();
    
            createStatsLabel();
    
            if (_openGLView)
            {
                setGLDefaultValues();
            }
    
            //初始化renderer
            _renderer->initGLView();
    
            CHECK_GL_ERROR_DEBUG();
    
            if (_eventDispatcher)
            {
                _eventDispatcher->setEnabled(true);
            }
        }
    }
    










  • 相关阅读:
    hdfs搭建常见问题
    [转]opencv与Labview的结合(Dll调用)
    [转]opencv二值化的cv2.threshold函数
    忙在比赛前
    [转]使用charls抓包微信小程序的解决方案
    [转]Python调用C语言
    [转]基于Python实现matplotlib中动态更新图片(交互式绘图)
    [转]Python十六进制与字符串的转换
    STM32学习日记
    [转]Linux下的softlink和hardlink
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4086621.html
Copyright © 2011-2022 走看看