お疲れさまです!!
気付くの遅かったけど
SpriteKitっていう新しいフレームワークが追加されてんな…
ゲームを作成するためのフレームワークらしい!
Xcode初心者の僕でも簡単にゲームを作れるらしい!?
吉報ですな。
とりあえず触ってみましょう!!
===========================================================
さっと触ってみて思ったことは以下の通りです。
・cocos2dみたいに扱えるやん。
・物理エンジンもついてるやん。
・UIKitみたいに扱えるやん。
・Particleも簡単に使えちゃうじゃん。
===========================================================
とりあえずプロジェクト立ち上げて実行!

デザインが一際目立つな…
なんかフラットデザインに合ってないような…
とりあえず立ち上げるで!!


ふむ。本当にcocos2dみたいやね…
触ったら戦闘機が永遠に増えていく…
怖い…
===========================================================
デフォルトであったファイルはこんなん。
・AppDelegateクラス
・ViewControllerクラス
・MainSceneクラス
===========================================================
MainSceneにおもに画面のレイアウトが書いていて
ViewControllerでSpriteKitのView貼っつけてその上に
Sceneとして取得していますね。
ViewController.mのviewDidLoadが
画面をロードした後に呼ばれるメソッドなんですが、
そこで見慣れないクラスがちらほら。
- (void)viewDidLoad { [super viewDidLoad]; // Configure the view. SKView * skView = (SKView *)self.view; skView.showsFPS = YES; skView.showsNodeCount = YES; // Create and configure the scene. SKScene * scene = [colorBBAMainMyScene sceneWithSize:skView.bounds.size]; scene.scaleMode = SKSceneScaleModeAspectFill; // Present the scene. [skView presentScene:scene]; }
①SKView:SpriteKitのSpriteなどをのせる基礎となるView
②SKScene:ゲーム内にある場面毎に用意する素材。基本的に一つやで。
ちなみにSpriteはゲームに登場する「敵」であったり、
「主人公」であったり、いわゆる背景とは違い、
独立的に動作する絵みたいなイメージです。
showFPSとshowNodeCountが右下の数値です。
FPSはFrame Per Second。
要するに1秒に何フレーム?みたいな意味です。
もっと言うとパラパラ漫画みたいな要領です。
showNodeCountはそのシーンに対して
何Nodeあるかです。
ちなみに上の画面ではラベルと戦闘機がNodeですな。
どちらもYESだから見えるんやー!!
次はMainSceneです。
-(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { //ここにシーン表示時したいことを書く。 //背景色設定 self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0]; //HelloWorldラベル生成 SKLabelNode *myLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"]; //テキスト、フォントの大きさ、位置を指定。 myLabel.text = @"Hello, World!"; myLabel.fontSize = 30; myLabel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)); //自分自身(MainScene)にラベルを追加。(描画) [self addChild:myLabel]; } return self; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //タッチされた際、呼ばれます。 for (UITouch *touch in touches) { //タッチされた位置取得。 CGPoint location = [touch locationInNode:self]; //スプライトを生成。 SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; //スプライトのポジションをタッチ位置に指定。 sprite.position = location; //回転するアクション生成 SKAction *action = [SKAction rotateByAngle:M_PI duration:1]; //回転アクションを永遠にしてスプライトのアクションに追加。 [sprite runAction:[SKAction repeatActionForever:action]]; //自分自身(MainScene)にスプライトを追加。(描画) [self addChild:sprite]; } } -(void)update:(CFTimeInterval)currentTime { //FPS/1000s毎に呼ばれます。 }
ってことで基本的なことはSceneに書けば、
いいんですよね〜。
戦闘機がぐるぐると怖いので
少し戦闘機らしい動きをしてもらいましょう!

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //タッチされた際、呼ばれます。 for (UITouch *touch in touches) { //タッチされた位置取得。 CGPoint location = [touch locationInNode:self]; //スプライトを生成。 sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; //スプライトのポジションをタッチ位置に指定。 sprite.position = location; //自分自身(MainScene)にラベルを追加。 [self addChild:sprite]; //ちっちゃくなって SKAction *scaleMin = [SKAction scaleTo:0.2f duration:1.0f]; //飛んでっちゃえーー SKAction *up = [SKAction moveToY:900 duration:1.0f]; //アクションを組み合わす。 SKAction *seq = [SKAction sequence:@[scaleMin, up]]; [sprite runAction:seq]; } }
これで降下して発進!みたいな感じですね!
うん!怖くなくなった。
そしてこの一行を足すだけで仮想的な重力を適用できます!
sprite.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:sprite.frame.size];
是非試して下さい!(挙動は少し変ですが…)
今回は簡単に解説をした感じでしたが、
次回はしっかり作成していきまっせー。
コメントを残す