25. Test - position (0,0) with default Anchor Point
self.player = [SKSpriteNode spriteNodeWithImageNamed:@"player"];!
self.player.position = CGPointMake(0, 0);!
[self addChild:self.player];
26. Test - position (0,0) with default Anchor Point(0,0)
self.player = [SKSpriteNode spriteNodeWithImageNamed:@"player"];!
self.player.position = CGPointMake(0, 0);!
self.player.anchorPoint = CGPointMake(0, 0);!
[self addChild:self.player];
27. Add enemy in MyScene.m (1)
- (void)addMonster {!
// Create sprite!
SKSpriteNode * monster = [SKSpriteNode
spriteNodeWithImageNamed:@"monster"];!
!
// Determine where to spawn the monster along the Y axis!
int minY = monster.size.height / 2;!
int maxY = self.frame.size.height - monster.size.height / 2;!
int rangeY = maxY - minY;!
int actualY = (arc4random() % rangeY) + minY;!
!
monster.position = CGPointMake(self.frame.size.width +
monster.size.width/2, actualY);!
[self addChild:monster];!
}
28. Add enemy in MyScene.m (2)
- (void)addMonster {!
!
//…!
// Determine speed of the monster!
int minDuration = 2.0;!
int maxDuration = 4.0;!
int rangeDuration = maxDuration - minDuration;!
int actualDuration = (arc4random() % rangeDuration) + minDuration;!
!
// Create the actions!
SKAction * actionMove = [SKAction moveTo:CGPointMake(-monster.size.width/2,
actualY) duration:actualDuration];!
SKAction * actionMoveDone = [SKAction removeFromParent];!
[monster runAction:[SKAction sequence:@[actionMove, actionMoveDone]]];!
!
}
50. Use the power of Physic Engine
Set gravity!
!
Set contact delegate
self.physicsWorld.gravity = CGVectorMake(0,0);
self.physicsWorld.contactDelegate = self;
54. physics attributes
// movable!
monster.physicsBody.dynamic = YES;!
!
// like ID!
monster.physicsBody.categoryBitMask = monsterCategory;!
!
// which ID will be contact!
monster.physicsBody.contactTestBitMask = projectileCategory;!
!
// can be contact or not!
monster.physicsBody.collisionBitMask = 0