如何将故事板合并到 cocos2d 2.0 项目中?如何将、并到、项目、故事

2023-09-06 09:25:11 作者:时光浪女

我在 cocos2d 2.0 中制作了一个项目,并希望使用情节提要合并一个主菜单.

I have made a project in cocos2d 2.0 and would like to incorporate a main menu using storyboards.

我在 tinytimgames.com 上尝试过 Jerrod Putnam 的教程(我无法提供链接,因为每个帖子只允许新用户 2 个链接,但如果你用谷歌搜索cocos2d storyboard",它是第一个链接)但这对我不起作用.我完全按照它(我认为).我打开我的 cocos2d 项目并从他的 github、CCViewController.m 和 .h 导入文件,然后创建一个新的故事板文件并按照教程进行操作.但是,当我运行它时,它只是直接在我的 cocos2d 游戏上启动,而不是在我刚刚创建的新菜单上.

I have tried Jerrod Putnam's tutorial here on tinytimgames.com (I can't provide the link because new users are allowed only 2 links per post, but if you google "cocos2d storyboard" it is the first link) but it did not work for me. I followed it exactly (I think). I opened my cocos2d project and imported the files from his github, the CCViewController.m and .h and then created a new storyboard file and followed the tutorial. However when I ran it, it just started straight on my cocos2d game and not on the new menu I just created.

我也试过这个教程:http://zackworkshopios.blogspot.com/2012/06/cocos2d-with-storyboard-example.html但它再次对我不起作用,因为我没有(或不知道在哪里找到/获取)libcocos2d.a 和 libCocosDenshion.a 文件.

I also tried this tutorial: http://zackworkshopios.blogspot.com/2012/06/cocos2d-with-storyboard-example.html but once again it did not work for me as I do not have (or do not know where to find/get) the libcocos2d.a and libCocosDenshion.a files.

这是我从 fidgetware 尝试的另一个教程:http://fidgetware.com/Tutorials/page15/page15.html我完成了本教程,但我的项目没有名为 RootViewController(.m 或 .h)的文件,因此我不确定将应该放入这些文件的代码放在哪里.

This is another tutorial I tried from fidgetware: http://fidgetware.com/Tutorials/page15/page15.html I did this tutorial but my project does not have a file called RootViewController (.m or .h) so I was not sure where to put the code that is supposed to go into those files.

还有 Ray Wenderlich 的教程,但他没有使用故事板.

There is also Ray Wenderlich's tutorial but his does not use storyboards.

如果有人能给我一个解决方案,说明为什么这些都不适合我,或者给我一步一步详细介绍如何将故事板合并到我的 cocos2d 2.0 项目中,我将不胜感激.另外我的另一个问题是我应该从 cocos2d 2.0 项目开始并合并故事板,还是应该从单视图应用程序项目(或不同的项目?)开始并合并我的 cocos2d 2.0 部分.提前致谢!

If anyone can give me a solution as to why none of these are working for me or give me a step by step detailed run through of how to incorporate storyboards into my cocos2d 2.0 project, I would GREATLY appreciate it. Also Another question I have is should I start with a cocos2d 2.0 project and incorporate storyboards or should I start with a single-view application project (or a different one?) and incorporate my cocos2d 2.0 part. Thanks in advance!

推荐答案

好的,在Jerrod Putnam 的大力帮助下,我终于搞定了,谢谢Jerrod!首先去他的教程:

Alright, I managed to finally figure it out with a lot of help from Jerrod Putnam, so thank you Jerrod! First go to his tutorial here:

http://www.tinytimgames.com/2012/02/07/cocos2d-and-storyboards/

并从 github 链接下载和导入文件.然后创建 CCViewController 的子类,命名为 cocos2dViewController.在 cocos2dViewController.h 中复制并粘贴:

and download and import the files from the github link. Then create a subclass of the CCViewController and call it cocos2dViewController. In cocos2dViewController.h copy and paste this:

#import "CCViewController.h"

@interface cocos2dViewController : CCViewController

@end

在 cocos2dViewController.m 中复制并粘贴(来自 Putnam 的教程)

and in the cocos2dViewController.m copy and paste this (from the Putnam's tutorial)

#import "GamePlay.h"
#import "cocos2dViewController.h"

@interface cocos2dViewController ()

@end

@implementation cocos2dViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    CCDirector *director = [CCDirector sharedDirector];

    if([director isViewLoaded] == NO)
    {
        // Create the OpenGL view that Cocos2D will render to.
        CCGLView *glView = [CCGLView viewWithFrame:[[[UIApplication sharedApplication] keyWindow] bounds]
                                       pixelFormat:kEAGLColorFormatRGB565
                                       depthFormat:0
                                preserveBackbuffer:NO
                                        sharegroup:nil
                                     multiSampling:NO
                                   numberOfSamples:0];

        // Assign the view to the director.
        director.view = glView;

        // Initialize other director settings.
        [director setAnimationInterval:1.0f/60.0f];
        [director enableRetinaDisplay:YES];
    }

    // Set the view controller as the director's delegate, so we can respond to certain events.
    director.delegate = self;

    // Add the director as a child view controller of this view controller.
    [self addChildViewController:director];

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

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

    // Run whatever scene we'd like to run here.
    if(director.runningScene)
        [director replaceScene:[GamePlay scene]];
    else
        [director pushScene:[GamePlay scene]];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

您会注意到我导入了 GamePlay.h,这是因为 GamePlay.m 是我拥有游戏所有内容的地方.所以为你的游戏导入头文件.你也会看到我打电话

You'll notice that I imported GamePlay.h, that is because GamePlay.m is where I have all the content for my game. So import the header file for your game. Also you will see that I call

if(director.runningScene)
    [director replaceScene:[GamePlay scene]];
else
    [director pushScene:[GamePlay scene]];

确保将GamePlay"替换为包含您的游戏的场景名称.完成后,转到您的 AppDelegate.m 并替换您的

Make sure to replace "GamePlay" with the name of the scene which contains your game. Once you do that, go to your AppDelegate.m and replace your

application didFinishLaunchingWithOptions

这个功能:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{   
    return YES;
}

你快到了!现在,对于您的故事板文件,请按照提供的链接中的 Putnam 教程进行操作.他说并将其类分配给我们刚刚创建的类",将其分配给 cocos2dViewController.就是这样!运行该项目,它应该可以工作,如果您有任何问题,请随时提出.

You're almost there! Now for your storyboard file follow Putnam's tutorial in the link provided. Where he says "and assign its class to the one we just created", assign it to cocos2dViewController. And that's it! Run the project and it should work, if not feel free to ask any questions you have.