CocosViewController – How to use Storyboards and Cocos2d V3+

I will write this tutorial in English, so, sorry for the language errors ;)

Some weeks ago I wrote a simple class for Cocos2D v3+ to use Cocos2D and Storyboards called CocosViewController.

CocosViewController is a UIViewController subclass that create CCDirector and put it in the controller view.

So, with this class we can have a Cocos2D view controller inside a Storyboard environment but we can also add UIKit elements above the Cocos2D view.

So, start this little tutorial.

How to use CocosViewController.

Create a new project (or use an existing one, but I recommend you to start with a new one to become familiar with the class) with SpriteBuilder, you can use the latest 1.2 version with Cocos2D v3.2.

cvc_1

Remove AppDelegate class and replace with the one in the CocosViewController project. Then copy CocosViewController.h/mm files in your project directory and add it in the xcode project.


cvc_2

cvc_3

Now locate the file named main.mm and rename the @”AppController” string with @”AppDelegate”.
Note: you can also rename the AppDelegate class, but for this tutorial this is the fast way.

cvc_4

Now add a new Storyboard to the project, disable Autolayout and update the project to use iOS 6.0+ and the storyboards.

cvc_5 cvc_6

At this point you can create a new Class called SceneViewController as subclass of CocosViewController.
Add the following lines to the controller class.

@interface SceneViewController() <CocosViewControllerDelegate>
@end

@implementation SceneViewController

– (void)viewDidLoad
{
[super viewDidLoad];

self.delegate = self;
}

– (IBAction)dismiss:(id)sender
{
[self removeDirector];

[self.navigationController popViewControllerAnimated:YES];
}

#pragma mark CocosViewControllerDelegate

– (CCScene *)cocosViewControllerSceneToRun:(CocosViewController *)cocosViewController
{
return [CCBReader loadAsScene:@”MainScene”];
}

@end

You can watch at the screenshot.

cvc_7

Now go to the storyboard. Add a navigation controller, a menu view controller with a button and add the SceneViewController.
Link the navigation controller to the menu controller and the menu button to the SceneViewController with a push segue.
Now you only need to create an exit button in the SceneViewController and link to the -dismiss: method of the same controller.

cvc_8

Build and Run. If you followed all the steps you have now Cocos2D inside of a Storyboard app.

I hope you enjoy it and if you have some problems you can write here in the comments or in the Cocos2D forum post.

E se Apple lavorasse ad un visore?

E se anche Apple stesse lavorando a qualcosa tipo Oculus Rift?

Sarebbe un wearable product, e avrebbe tutta la tecnologia per farlo, compresi gli schermi..
Del resto tutti si stanno buttando su questa tecnologia, Facebook ha acquistato Oculus Rift, Microsoft sta lavorando (sembra) ad un visore, Sony ha presentato Project Morpheus.. Insomma, sappiamo bene che sarà la tecnologia del futuro ed è ovvio che tutti ci si butteranno a capofitto.. ma Apple potrebbe avere delle marce in più.. Chi vivrà vedrà!

oh! se dov’esse essere così voglio lo scoop! :)

XCode e le traduzioni

In questi giorni ho avuto l’opportunità di lavorare con XCode 5 e mi sono accorto che ha una nuova gestione delle Storyboards e in particolare divide in automatico il file per essere tradotto.

Quindi crea una versione “Base” e poi lo sviluppatore può decidere se e come tradurlo.
In particolare si può decidere se utilizzare, per le traduzioni, un file Storyboard o un file Strings.
L’unico neo è che quando si modifica il file “Base”, gli altri file non vengono aggiornati. Una grande scocciatura se dobbiamo fare delle modifiche.

Cercando in giro ho trovato uno sviluppatore che ha creato uno script Python che si occupa di ricreare i file Storyboards aggiornati. Qui potete vedere un video di spiegazione. Mentre qui invece potete scaricare lo script.

Ora, il problema è che su XCode 5 non sembra funzionare in modo corretto. In particolare non si aggiornano i file Storyboards ma solo i file Strings.

Se qualcuno trova una soluzione, fatemi sapere!

iOS7 [Aggiornato]

Non ho resistito, non ce l’ho fatta.. e ho installato iOS7. E siccome ci tengo molto all’argomento, ho deciso di parlarvene.

Non parlerò dei Bugs perché è una beta e tutti sappiamo che la versiona beta di un software ha dei problemi, iOS7 compreso, e ne ha tanti, un’enormità :D
Parlerò dell’interfaccia grafica e della nuova esperienza ma non delle funzionalità.

Quindi inizierò dicendovi che cosa mi piace.
Anzitutto sono contento che Apple abbia aggiornato la UI, ce n’era bisogno.
Non è cambiata solo grafica ma anche la User Experience, cioè il modo in cui si fanno le cose e il feeling che si ha con il dispositivo stesso.

Lo stile generale è interessante. Molto piatto, senza ombre o effetti tridimensionali ed hanno aggiunto una nuova interpretazione dell’interfaccia. Adesso avremo di fronte una UI ‘a pieno schermo’ ed ogni oggetto di navigazione è traslucido e tutto ciò che sta sotto viene sfuocato. Avete presente l’interfaccia Aero di Windows? Ecco, così. L’effetto è gradevole.
Poi hanno aggiunto una nuova caratteristica alla quale non so dare un nome (Edit: mi hanno ricordato che si chiama ‘Parallasse’..  che vergogna esserselo dimenticato!). In pratica tutti gli elementi della UI che sono ‘sopra’ ad altri (tipo gli Alert o le icone) o che stanno particolarmente ‘sotto’ (tipo lo sfondo) hanno un effetto tridimensionale in base alla posizione del device. Quindi, muovendo l’iPhone, si vedranno questi oggetti muoversi leggermente mostrando cosa c’è sotto (o sopra). Il tutto è molto bello e da un effetto 3D (tipo i film 3D :D) interessante.
In alcuni casi questo effetto è applicato anche ad altre parti dell’interfaccia.
Continuando si notano nuove transizioni e nuove animazioni. Alcune molto belle e funzionali, altre invece meno, ma nel complesso danno una sensazione gradevole.

Ecco, queste sono le cose che ho apprezzato. Ora invece tocca alle cose che non ho apprezzato e che proprio non mi vanno giù.

Le Icone. :) Ok lo so, sembra che abbiano dichiarato qualcosa riguardo al fatto che non le hanno disegnate i team delle apps ma degli agenti di marketing. E questo fatto è ancora più grave.
Andando avanti, non mi piace per niente lo stile della springboard (schermata dove ci sono tutte le apps). Sembra decisamente un work-in-progress e il look delle Folders è decisamente abbozzato. Gli angoli troppo arrotondati, i colori troppo saturi.
Poi non c’è coerenza nei singoli pezzi dell’interfaccia. E’ tutta molto piatta e senza effetti tridimensionali quali ombre e punti luce e poi hanno fatto alcuni elementi con un effetto 3D tipo gli switch o gli slider.. per non parlare di quei nuovi Picker così orrendi.

Poi le apps di sistema.
Gironzolando qua e là si ha l’impressione che i vari team al lavoro su iOS7 non avessero idea di quale stile adottare e quali linee guida seguire.
Ce ne sono alcune davvero carine, come Calendario e Foto, ma altre che proprio sarebbero da rifare come Reminders (??? ma non avevano detto che lo scheumorfismo era cosa brutta??) o Passbook.. o addirittura Newstand.

Insomma, iOS7 è davvero potente a livello di programmabilità e loro sono riusciti, per adesso, a fare qualcosa di mal riuscito, abbozzato e per di più poco innovativo.

Voglio sperare che la beta 1 sia più un’alpha che una beta e di vedere, nelle prossime build, dei progressi significativi.

[Aggiornamento]

Domani tornerò ad iOS6. La motivazione è che il sistema è ancora troppo buggato per essere utilizzato come principale e in secondo luogo, non mi piace. Non mi ci trovo, è più forte di me.
Ci sono altre cose che proprio lo rendono meno “usabile” del suo precedessore. In primis la velocità delle transizioni. Sono lente. Troppo lente e quindi sembra che il device non risponde ai comandi. Questo è frustrante perché per mandare un SMS, fare una foto, aprire una cartella, il tempo si è raddoppiato creando una sensazione di pesantezza inutile.
Spero che dalla seconda beta Apple prenda la giusta direzione, altrimenti dovrò cercare un’alternativa al mio telefono principale..

Ovviamente questa è la mia opinione e magari sarò l’unico a pensarla così, quindi non prendetela come dato di fatto.