火ボタンを押すと気球が上にあがっていくiPhoneアプリのサンプルコードを描いてみます。
#import “ViewController.h”
#import <SpriteKit/SpriteKit.h>
@interface BalloonScene : SKScene
@property (nonatomic) BOOL fire;
@end
@implementation BalloonScene
– (void)didMoveToView:(SKView *)view
{
self.backgroundColor = [SKColor colorWithWhite:0.98 alpha:1];
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
self.physicsWorld.gravity = CGVectorMake(0, –0.1);
[self createBalloon];
[self createFireButton];
}
– (void)createBalloon
{
SKNode *balloon = [SKNode node];
balloon.name = @”balloon”;
balloon.position = CGPointMake(160, 200);
[self addChild:balloon];
UIBezierPath *pathA = [UIBezierPath bezierPathWithArcCenter:CGPointZero radius:80 startAngle:0 endAngle:2.0*M_PI clockwise:NO];
SKShapeNode *circle = [SKShapeNode node];
circle.position = CGPointMake(0, 80);
circle.path = pathA.CGPath;
circle.fillColor = [SKColor greenColor];
[balloon addChild:circle];
SKSpriteNode *line = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(155, 20)];
line.position = CGPointMake(0, 80);
[balloon addChild:line];
UIBezierPath *pathB = [UIBezierPath bezierPath];
[pathB moveToPoint:CGPointMake(-24, –50)];
[pathB addLineToPoint:CGPointMake(-82, 80)];
[pathB addLineToPoint:CGPointMake(82, 80)];
[pathB addLineToPoint:CGPointMake(24, –50)];
SKShapeNode *wire = [SKShapeNode node];
wire.path = pathB.CGPath;
wire.strokeColor = [SKColor blackColor];
wire.lineWidth = 3;
wire.fillColor = [SKColor clearColor];
[balloon addChild:wire];
SKSpriteNode *basket = [SKSpriteNode spriteNodeWithColor:[SKColor brownColor] size:CGSizeMake(50, 50)];
basket.position = CGPointMake(0, –80);
[balloon addChild:basket];
balloon.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(160, 200)];
balloon.physicsBody.linearDamping = 1.0;
}
– (void)createFireButton
{
SKSpriteNode *fireBtn = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(60, 60)];
fireBtn.name = @”fire”;
fireBtn.position = CGPointMake(270, 50);
[self addChild:fireBtn];
SKLabelNode *l = [SKLabelNode node];
l.text = @”火“;
l.fontSize = 50;
l.verticalAlignmentMode = SKLabelVerticalAlignmentModeCenter;
l.position = CGPointMake(0, 0);
[fireBtn addChild:l];
}
– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint p = [[touches anyObject] locationInNode:self];
SKNode *fire = [self childNodeWithName:@”fire”];
if ([fire containsPoint:p]) {
self.fire = YES;
SKNode *balloon = [self childNodeWithName:@”balloon”];
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(-10, –20, 20, 40)];
SKShapeNode *f = [SKShapeNode node];
f.path = path.CGPath;
f.name = @”fire effect”;
f.fillColor = [SKColor yellowColor];
f.lineWidth = 4;
f.strokeColor = [SKColor redColor];
f.position = CGPointMake(0, –30);
[balloon addChild:f];
[f runAction:[SKAction repeatActionForever:[SKAction sequence:@[[SKAction fadeAlphaTo:0.3 duration:0.5], [SKAction fadeAlphaTo:1.0 duration:0.4]]]]];
}
}
– (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if (self.fire) {
SKNode *balloon = [self childNodeWithName:@”balloon”];
SKNode *fire = [balloon childNodeWithName:@”fire effect”];
[fire removeFromParent];
self.fire = NO;
}
}
– (void)update:(NSTimeInterval)currentTime
{
SKNode *balloon = [self childNodeWithName:@”balloon”];
if (self.fire) {
balloon.physicsBody.velocity = CGVectorMake(0, 10);
}
}
@end
@interface ViewController ()
@end
@implementation ViewController
– (void)viewDidLoad
{
[super viewDidLoad];
SKView *spriteView = [[SKView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:spriteView];
SKScene *scene = [[BalloonScene alloc] initWithSize:spriteView.frame.size];
[spriteView presentScene:scene];
}
– (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end