iOS 7ã®åºçŸã«ãããäžçã«ã¯Appleã®æ°ããã²ãŒã ãšã³ãžã³
SpriteKitãç»å ŽããŸãã ã 圌ãæè¿ç»å Žãããšããäºå®ã«ç
§ãããŠããã®ãšã³ãžã³ã«ã€ããŠã¯ã»ãšãã©æžãããŠããŸããããã¡ããããããã¯ãŒã¯äžã§ããã€ãã®ãã¥ãŒããªã¢ã«ãèŠã€ããããšãã§ããŸãããåºæ¬çã«ã¯ãã¹ãŠè±èªã§ãã ãã®ããã«ããã®çŽ ââæŽããããšã³ãžã³ã«é¢ãã詳现ãªãã¥ãŒããªã¢ã«ãäœæããŸããã
ããã§ã¯ãSpriteKitãšã¯æ£ç¢ºã«ã¯äœã§ããïŒ
SpriteKitã¯ãAppleããã€ã¹åãã®ã²ãŒã ãäœæããããã«æé©åããã2Dãšã³ãžã³ã§ãã ããã¯ã人æ°ã®ãã
Box 2Dç©çãšã³ãžã³ã«åºã¥ããŠããŸãã éçºè
ãAppleããã€ã¹å°çšã«äœæãããããä»ã®ãšã³ãžã³ããã倧å¹
ã«åªããŠããŸãã
SpriteKitã§ã¯ãOpenGlã¯ã°ã©ãã£ãã¯ã¹ã®æé©åãšæç»ã®å
šåœ¹å²ãæ
ããŸãããã¹ãŠäœã¬ãã«ã§è¡ããããããããé«ãã¬ãã«ã®åé¡ã®è§£æ±ºãšå€§èŠæš¡ãª2Dã²ãŒã ã®äœæã«éäžã§ããŸãã SpriteKitã§ã²ãŒã ãäœæããã«ã¯ã
Objective-cèšèªã䜿çšãããŸããã
iOS 8ãšæ°ãã
Swiftèšèªã®ãªãªãŒã¹ã«ãããã²ãŒã ãäœæããããšãã§ããŸãã
ç§èªèº«ã§ãäœããã®æ¹æ³ã§
Swiftã§æžãã®ãããã«ç°¡åã§ããããšãä»ãå ããããšæããŸããã§ããããããå§ããã°ããã§ãã©ã®èšèªãéžã¶ã¹ãããèããŠãããªãã
Swiftãéžã¶ããšããå§ãããŸãã
以äžã«ãSpriteKitã®ã²ãŒã ãã¬ã€ã瀺ããããªãæäŸããŸãããèå³ããæã¡ã®æ¹ã¯å€§æè¿ã§ãã
éå§ãã
ããã§ã¯å§ããŸããããXcodeãéããŸãã
ã¢ããªã±ãŒã·ã§ã³ãã³ãã¬ãŒããéžæããããã«æ±ããããããæ°ãããããžã§ã¯ããäœæããã²ãŒã ã®çš®é¡ãéžæããŸãã

次ã«ãããŒã¿ãå
¥åããåŸãèšèªãéžæããããã«æ±ããããŸãïŒèšèªã¯
Objective-cãŸãã¯å®å
šã«æ°ãã
Swiftã§ãã
ãããããéžæã§ããŸãããã®èšäºã§ã¯ãäž¡æ¹ã«äŸã瀺ããŸãã
次ã«ã
Game Tehnologyã®äžã§
SpriteKitãéžæããŸãã
ãŸããæžã察象ã®ããã€ã¹ãéžæããããšãå¿ããªãã§ãã ããããã®å Žåãããã¯Iphoneã§ãã

ããã§ããããžã§ã¯ããäœæããŸãããå·ŠåŽã«ã¯ã
Objective-Cã®ãã¡ã€ã«ããããŸãã
Swiftã®å Žå ïŒ
æ¢ã«ãæ°ä»ãã®ããã«ã
Swiftã䜿çšãããããžã§ã¯ãã«ã¯ãã¡ã€ã«ãååãããããŸããã
å·ŠåŽã«è¡šç€ºãããŸãïŒ
1ïŒ AppDelegateã¯ãããžã§ã¯ãã®ããªã²ãŒãã§ãã 2ïŒ GameViewController-ãããžã§ã¯ãã®ã³ã³ãããŒã©ãŒã 3ïŒ GameSceneã¯ãã²ãŒã ã®ã¡ã€ã³ã·ãŒã³ã§ãã 4ïŒ GameScene.sksã¯ã·ãŒã³ã®ããžã¥ã¢ã«ã³ã³ã¹ãã©ã¯ã¿ãŒã§ããã iOS 8ã®ãªãªãŒã¹ã§è¿œå ãããããã€ãã®èŠçŽ ãèŠèŠçã«è¿œå ããã®ã«åœ¹ç«ã¡ãŸãã
|
ããã€ãã®ãã¡ã€ã«ãèŠãŠãäžã«äœããããèŠãŠã¿ãŸãããã
Gameviewcontroller
GameViewController-圌ã¯ã·ãŒã³ã®äœæãšåæåãæ
åœããŠããŸãã ã·ãŒã³ã®è¡šç€ºã«äœ¿çšããããã¹ãŠã®åæèšå®ã¯ãããã§è¡ãå¿
èŠããããŸãã
äžè¬ã«ã
GameViewControllerã§çºçãããã¹ãŠ
ã¯ãäž¡æ¹ã®èšèªã§åãã§ãã
æåã«ãã¡ãœãããŸãã¯é¢æ°
viewDidLoadã
åŒã³åºãããŸãã
ãã®ã¡ãœãããŸãã¯é¢æ°ã§ã¯ãã·ãŒã³ãšãã®è¡šç€ºçšã®ãã©ã¡ãŒã¿ãŒãäœæããŠèšå®ããŸãã
Objective-c- (void)viewDidLoad { [super viewDidLoad]; // Configure the view. SKView * skView = (SKView *)self.view; // SKView View. skView.showsFPS = YES; // skView.showsNodeCount = YES; // Node ( ). /* Sprite Kit applies additional optimizations to improve rendering performance */ skView.ignoresSiblingOrder = YES;// // Create and configure the scene. GameScene *scene = [GameScene unarchiveFromFile:@"GameScene"]; // . scene.scaleMode = SKSceneScaleModeAspectFill; // ScaleMode Scene SKSceneScaleModeAspectFill. // Present the scene. // presentScene, skView [skView presentScene:scene]; }
ã¹ã€ãã override func viewDidLoad() { super.viewDidLoad() // if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene // GameScene { // Configure the view. let skView = self.view as SKView // SKView UIView skView.showsFPS = true // skView.showsNodeCount = true // Node ( ). skView.ignoresSiblingOrder = true // scene.scaleMode = .AspectFill // ScaleMode Scene AspectFill. // presentScene, skView skView.presentScene(scene) } }
æåã«ã
SKViewåã®ãªããžã§ã¯ããžã®ãã€ã³ã¿ãŒãŸãã¯å®æ°ããã®ã¡ãœãããŸãã¯é¢æ°ã§äœæãããçŸåšã®
ãã¥ãŒãããã«å²ãåœãŠãããŸãã
SKViewã¯UIViewã®åå«ã§ãããã·ãŒã³ã衚瀺ããã®ã«åœ¹ç«ã¡ãŸãã次ã«ã SKViewã®åºæ¬çãªããããã£ãèšå®ããŸããshowFPS-ãã®ããããã£ã¯ãã·ãŒã³ã®ãªãã¬ãã·ã¥ã¬ãŒãã衚瀺ããŸãã showsNodeCount-ããŒãïŒã·ãŒã³å
ã®ãªããžã§ã¯ãïŒã®æ°ã瀺ããŸãã ignoressSiblingOrder-è¿œå ã®æé©åãé©çšããŠãã¬ã³ããªã³ã°ã®ããã©ãŒãã³ã¹ãæ¹åããŸãã ãªã¹ããããŠãããã®ã«å ããŠã SKViewã«ã¯ä»ã«ãå€ãã®äŸ¿å©ãªããããã£ããããŸãã |
次ã¯ãã·ãŒã³ã®ãªããžã§ã¯ãã§ãã
GameSceneã®äœæã§ãã
Swiftã®å Žåã
Viewã®æ§æåã«æ¢ã«äœæãããŠã
ãŸã ã
ããã©ã«ãã§ã¯ãã·ãŒã³ãªããžã§ã¯ãã¯ã¡ãœãããŸãã¯é¢æ°åŒã³åºãã§åæåãããŸãã
Objective-c + (instancetype)unarchiveFromFile:(NSString *)file { NSString *nodePath = [[NSBundle mainBundle] pathForResource:file ofType:@"sks"]; NSData *data = [NSData dataWithContentsOfFile:nodePath options:NSDataReadingMappedIfSafe error:nil]; NSKeyedUnarchiver *arch = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; [arch setClass:self forClassName:@"SKScene"]; SKScene *scene = [arch decodeObjectForKey:NSKeyedArchiveRootObjectKey]; [arch finishDecoding]; return scene; }
ã¹ã€ãã class func unarchiveFromFile(file : NSString) -> SKNode? { let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") var sceneData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil) var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData) archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene") let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene archiver.finishDecoding() return scene }
åŒã³åºããããšãã«äœãèµ·ããããããžã¥ã¢ã«ã³ã³ã¹ãã©ã¯ã¿ãŒ
GameScene.sksã®ãã¡ã€ã«ãèŠã€ããŠ
解åãããã®åŸã®ã·ãŒã³ã®åæåã®ããã«ã¿ã€ã
SKSceneã®ãªããžã§ã¯ããè¿ããŸãã
ã·ãŒã³ã®ãªããžã§ã¯ãã«ã¯ããããã£ãããããšã«æ³šæããŠãã ããïŒ
ååãã
ãããããã«ã
scaleModeã¯ããã®ããããã£ãç»é¢å
šäœã«ã·ãŒã³ãåŒã䌞ã°ããŸãããã®ããããã£ãè©ŠããŠãã ããïŒ
SKViewãã«ã¹ã¿ãã€ãºããã·ãŒã³ã®ãªããžã§ã¯ããäœæã
ãã ã衚瀺ã§ããããã«ãªããŸããã ããã¯éåžžã«ç°¡åã«è¡ããã
SKViewã¯ã©ã¹ã®é¢æ°ãŸãã¯ã¡ãœãããåŒã³åºããŸãã
Objective-c
- (void)presentScene:(SKScene *)scene transition:(SKTransition *)transition; ã¹ã€ãã
func presentScene(scene: SKScene!, transition: SKTransition!) ãããŠãã·ãŒã³ã®ãªããžã§ã¯ãããã©ã¡ãŒã¿ãŒãšããŠæž¡ããŸããããã§ãã³ã³ãã€ã«ãå®äºããã·ãŒã³ã®æºåãæŽããŸããã |
以äžã«
ãå®å
šãª
GameViewControllerã³ãŒãã
æäŸããŸãã ã

Objective-c #import "GameViewController.h" #import "GameScene.h" @implementation SKScene (Unarchive) + (instancetype)unarchiveFromFile:(NSString *)file { NSString *nodePath = [[NSBundle mainBundle] pathForResource:file ofType:@"sks"]; NSData *data = [NSData dataWithContentsOfFile:nodePath options:NSDataReadingMappedIfSafe error:nil]; NSKeyedUnarchiver *arch = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; [arch setClass:self forClassName:@"SKScene"]; SKScene *scene = [arch decodeObjectForKey:NSKeyedArchiveRootObjectKey]; [arch finishDecoding]; return scene; } @end @implementation GameViewController - (void)viewDidLoad { [super viewDidLoad];
ã¹ã€ãã import UIKit import SpriteKit extension SKNode { class func unarchiveFromFile(file : NSString) -> SKNode? { let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") var sceneData = NSData.dataWithContentsOfFile(path, options: .DataReadingMappedIfSafe, error: nil) var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData) archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene") let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene archiver.finishDecoding() return scene } } class GameViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene { // Configure the view. let skView = self.view as SKView skView.showsFPS = true skView.showsNodeCount = true skView.ignoresSiblingOrder = true scene.scaleMode = .AspectFill skView.presentScene(scene) } } override func shouldAutorotate() -> Bool { return true } override func supportedInterfaceOrientations() -> Int { if UIDevice.currentDevice().userInterfaceIdiom == .Phone { return Int(UIInterfaceOrientationMask.AllButUpsideDown.toRaw()) } else { return Int(UIInterfaceOrientationMask.All.toRaw()) } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Release any cached data, images, etc that aren't in use. } }
ã²ãŒã ã·ãŒã³
ããŠãã·ãŒã³ãã»ããã¢ããããåŸãããã¯æµå¯Ÿå¿ã®æºåãã§ããŠãããããã§ç§ã®å人ã¯ãã¹ãŠã®æ¥œãã¿ãå§ãŸããŸãïŒæ¢ã«ãæ°ã¥ãã®ããã«ãããã©ã«ãã§ã¯ããã§ã«ãªããžã§ã¯ããè¿œå ãããŠããã·ãŒã³ãéå§ããŸãã
GameSceneã®ãã¹ãŠãåé€ããŠã以äžã®ã³ãŒããšäžèŽããããã«ããŸãã
Objective-c #import "GameScene.h" @implementation GameScene -(void)didMoveToView:(SKView *)view { } @end
ã¹ã€ãã import SpriteKit class GameScene: SKScene { override func didMoveToView(view: SKView) { } }
ãããžã§ã¯ããã³ã³ãã€ã«ãããšã以äžã衚瀺ãããŸãã

空çœã®ç°è²ã®ç»é¢ã衚瀺ãããNodeãªããžã§ã¯ãã®æ°ãšã·ãŒã³ã®ãªãã¬ãã·ã¥ã¬ãŒããã衚瀺ãããªãã®ã§ã
GameSceneã®ã³ãŒããåæ¢ããŠåæããŸãã
ã·ãŒã³ãã©ã®ããã«æ©èœããããç解ããã«ã¯ããŸããã®äž»èŠãªã¡ãœãããŸãã¯æ©èœãç解ããå¿
èŠããããŸãã以äžã«äž»èŠãªãã®ãŸãã¯æ©èœã瀺ããŸããæ®ãã¯
.hãã¡ã€ã«ã§ç¢ºèªã§ããŸãã
äž»ãªããããã£ïŒ1ïŒ ãµã€ãº - ã·ãŒã³ã®ãµã€ãºã決å®ããŸãã 2ïŒ scaleMode- ã·ãŒã³ã®è¡šç€ºãå®çŸ©ããŸãã 3ïŒ backgroundColor- ã·ãŒã³ã®è²ãå®çŸ©ããŸããããã©ã«ãã§ã¯ç°è²ã§ãïŒäžã§æ°ä»ããããã«ïŒã 4ïŒ anchorPoint- ã·ãŒã³ã®éå§ç¹ãå®çŸ©ããŸãã 5ïŒ view-å
ã®ãã¥ãŒã 6ïŒ physicsWorld- ããã¯ãã·ãŒã³ã®ç©çïŒéåãé床ïŒãæ
åœããéåžžã«éèŠãªããããã£ã§ãã詳现ã«ã€ããŠã¯åŸã§èª¬æããŸãã
|
åºæ¬çãªã¡ãœãããŸãã¯é¢æ°1ïŒ didMoveToViewïŒ - ã·ãŒã³ã衚瀺ãããåŸã«åŒã³åºãããŸãã 2ïŒ willMoveFromViewïŒ - ã·ãŒã³ãåé€ãããåŸã«åŒã³åºãããŸãã 3ïŒ didChangeSizeïŒ - ã·ãŒã³ã®ãµã€ãºãå€æŽãããšãã«åŒã³åºãããŸãã 4ïŒ convertPointToViewïŒ - 座æšå€æ㫠圹ç«ã¡ãŸã 5ïŒ convertPointFromViewïŒ - 座æšã®å€æ㫠圹ç«ã¡ãŸã 6ïŒ initWithSizeïŒ - ã·ãŒã³ãåæåããããšãã«åŒã³åºãããŸãã |
ç§ãã¡ã®ã·ãŒã³ã®äž»ãªã€ãã³ãã€ãã³ãã¯ãã²ãŒã ã®åºæ¬çãªããžãã¯ãèšè¿°ããããã«å¿
èŠã§ãããç§ãæžããé çªã©ããã«åŒã³åºãããŸãïŒ 1ïŒ æŽæ°ïŒ - ããã§ã¯ãã²ãŒã ã®åºæ¬çãªããžãã¯ãå®è£
ãããŠããŸãã 2ïŒ didEvaluateActions- ã¢ã¯ã·ã§ã³ã®èšç®ã« 圹ç«ã¡ ãŸã-ã¢ã¯ã·ã§ã³ã 3ïŒ didSimulatePhysics- ç©ççãªã€ãã³ãã®èšç®ã«äœ¿çšããŸãã 4ïŒ didApplyConstriants- å¶éã®èšç®ã«äœ¿çšããŸãã 5ïŒ didFinishUpdate- äžèšã®ãã¹ãŠã®ã€ãã³ããå®äºããåŸã«åŒã³åºãããŸãã |
å人ãã¡ãã·ãŒã³ã®åºæ¬çãªã¡ãœãããé¢æ°ãããããã£ãã€ãã³ããèŠãŠããã®ã§ãã³ãŒããå°ãå€æŽã§ããŸãã ã·ãŒã³ã®è²ãå€æŽããŠã¿ãŸãããããã®ããã
backgroundColorããããã£ã«åãæ¿ããŠãã·ãŒã³ããªã¬ã³ãžã§ãã€ã³ãããŸãã äžã§èŠãããã«ãã·ãŒã³ãåæåãããšãã¯ã
initWithSizeïŒã¡ãœãããŸãã¯é¢æ°ãæåã«åŒã³åºããã·ãŒã³ãæ¢ã«è¡šç€ºãããåŸã
didMoveToViewïŒã
åŒã³åºããŸãã ãã®å Žåãã·ãŒã³ã¯ã¡ãœãããŸãã¯é¢æ°
unarchiveFromFileãåŒã³åºãããšã§åæåããããããåæåã¡ãœããã
æžãæããããšã¯ã§ããŸããã ãããã£ãŠã
didMoveToViewïŒã§åæèšå®ãå®çŸ©ãã
å¿
èŠããããŸããObjective-c #import "GameScene.h" @implementation GameScene -(void)didMoveToView:(SKView *)view { [self SceneSetting];
ã¹ã€ãã import SpriteKit class GameScene: SKScene { override func didMoveToView(view: SKView) { SceneSetting() // SceneSetting } func SceneSetting() { self.backgroundColor = SKColor.orangeColor() // } }
äžèšã®äŸãããããããã«ã
didMoveToViewã¡ãœãããŸãã¯é¢æ°ãæåã«åŒã³åºããããã®åŸ
SceneSettingã¡ãœãããŸãã¯é¢æ°ã
åŒã³åºããïŒããïŒããã®åŸãã·ãŒã³ã®è²ãå€ãããŸãã è²ãå€æŽããããšã
以åãšåãããã«
UIColorãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ããã
SKColorã䜿çšã
ãŸããæ¬è³ªçã«ã¯
UIColorã
å®çŸ©ãã ã®ã§ ããã®ããã«æžãããšãã§ãããšã©ãŒã«ã¯ãªããŸããã ãããããå¥ã®ã¡ãœãããŸãã¯é¢æ°ã§èšå®ãè¡ã£ãçç±ãå°ããã§ãããã ããã¯å©äŸ¿æ§ã®ããã«è¡ã£ããã®ã§ã倧èŠæš¡ãªãããžã§ã¯ãã§ã¯ããã²ãŒãããã®ãéåžžã«å°é£ãªå Žåããããæåãããã¹ãŠãæ
éã«è¡ããšéåžžã«äŸ¿å©ã«ãªããŸãã
ãã®ãããäžã®ç»åã«è¡šç€ºãããŠãããã®ãã芧ãã ããã
ç§ãã¡ã®ã¹ããŒãžã§ã¯äœãèµ·ããŠããªãã®ã§ãåéã«çŽããŸãããïŒ
ãããªããã°ãããã§äœãããŠããã®ã§ãããïŒ
SKNode
ããŠãããªããèŠãããšãã§ããããã«ãå人ã¯ç§ãã¡ã®ã·ãŒã³ã®è²ãå€æŽããããããããªãã¯çåã«æã£ããããã ãã§ããïŒ ãã®ããã«ããã«è¡ããŸãããïŒå人ãã¡ãæ®å¿µãªããç§ãã¡ã®ã·ãŒã³ãæã£ãŠãããã¹ãŠã®åãããªãã«ç€ºãããšã¯ã§ããŸããããã®ããã«ããã1ã€ã®éåžžã«éèŠãªãã€ã³ãã§ãã
SKNodeãç 究ããå¿
èŠããããŸãã
SKNodeã¯äžå¯æ¬ ãªèŠçŽ ã§ãã
SpriteKitã§ã¯ããããã¡ã€ã³ãšã¿ãªãããä»ã®ãã¹ãŠã®èŠçŽ ã¯ããããç¶æ¿ãããŸãã
ç§ãã¡ã®ã·ãŒã³ã§ãããæ¬è³ªçã«ã¯çžç¶äººã§ããããã¹ãŠã®ããããã£ãæã£ãŠããŸãã
SKNodeã®ããããã£ãã¡ãœããããŸãã¯é¢æ°ãèŠãŠã¿ãŸãããã
ç©ä»¶1ïŒ ãã¬ãŒã - ããŒãã®åœ¢ç¶ãå®çŸ©ããŸãã 2ïŒ äœçœ® - ããŒãã®äœçœ®ãå®çŸ©ããŸãã 3ïŒ zPosition - Z軞ã«å¯ŸããNodeã®äœçœ®ã決å®ããŸãã 4ïŒ zRotation- ãªã€ã©ãŒè§ã®ããŒãã®å転ã決å®ããŸãã 5ïŒ xScale - x軞ã«æ²¿ã£ãããŒãã®ã¹ã±ãŒã«ã決å®ããŸãã 6ïŒ yScale - y軞ã«æ²¿ã£ãããŒãã®ã¹ã±ãŒã«ã決å®ããŸãã 7ïŒ é床 - ããŒãã®é床ã決å®ããŸãã 8ïŒ alpha - Nodeã®ã¢ã«ãã¡ã³ã³ããŒãã³ããå®çŸ©ããŸãã 9ïŒ äžæåæ¢ - ããŒããã¢ã¯ã·ã§ã³ïŒã¢ã¯ã·ã§ã³ïŒãå®è¡ããªãå Žåãã¯ããè¿ããŸãã 10ïŒ hidden-ããŒããé衚瀺ã®å Žåã¯Yesãè¿ããŸãã 11ïŒ isUserInteractionEnabled- ããŒããã¿ãããåãå
¥ãããšYesãè¿ããŸãã 12ïŒ parent- 芪ããŒããè¿ããŸãïŒnilãè¿ãå Žåãããèªäœã芪ããŒãã§ãïŒ 13ïŒ children- ããŒãã®ãã¹ãŠã®åå«ãè¿ããŸãã 14ïŒ name-ããŒãã®ååãå®çŸ©ããŸãã ïŒéåžžã«éèŠãªè²¡ç£ïŒ 15ïŒ ã·ãŒã³ - ããŒããçŸåšé
眮ãããŠããã·ãŒã³ã 16ïŒ physicsBody- ããŒãã®ç©ççããã£ïŒåŸã§è©³ãã説æããéåžžã«éèŠãªããããã£ïŒ 17ïŒ userData- æçšãªæ
å ±ãããŒãã«æžã蟌ãããšãã§ããå Žæãå®çŸ©ããŸãã 18ïŒ reachConstraints - IKïŒInverse Kinematics ïŒ -Action ã¢ã¯ã·ã§ã³ã®èªç±åºŠãå®çŸ©ããŸãã 19ïŒ å¶çŽ - å¶çŽ ã®ãªã¹ããå®çŸ©ããŸãã
|
ã¡ãœãããŸãã¯é¢æ°1ïŒ setScale- ã¹ã±ãŒã«ãèšå®ããŸãïŒXãšYã« åç ã«ïŒ 2ïŒ addChild- åå«ãè¿œå ããŸãïŒ1ã€ã®ããŒããå¥ã®ããŒãã«è¿œå ããŸãïŒã 3ïŒ insertChild- åã åé€ã ãŸãã 4ïŒ removeChildrenInArray- ãªã¹ãããåå«ãåé€ããŸãã 5ïŒ removeAllChildren- ãã¹ãŠã®åå«ãåé€ããŸãã 6ïŒ removeFromParent- 芪ããŒããåé€ããŸãã 7ïŒ childNodeWithName- ååã§åãè¿ããŸãã 8ïŒ enumerateChildNodesWithName- ãã¹ãŠã®åå«ãç¹å®ã®ååã§åèšç®ããŸãã 9ïŒ inParentHierarchy - NodeãHierarchyã®ã¡ã³ããŒã§ããå Žåã¯Yesã è¿ããŸã 10ïŒ runAction- ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã 11ïŒ runAction-å®äº - ã¢ã¯ã·ã§ã³ã®å®è¡-ã¢ã¯ã·ã§ã³;å®äºåŸãå®äºãããã¯ãåŒã³åºããŸãã 12ïŒ runAction-withKey- ã¢ã¯ã·ã§ã³ã®å®è¡-æå®ãããããŒãæã€ã¢ã¯ã·ã§ã³ã 13ïŒ hasAction- ããŒããã¢ã¯ã·ã§ã³ãå®è¡ããå Žåã¯Yesãè¿ããŸã-ã¢ã¯ã·ã§ã³ 14ïŒ actionForKey - Action- æå®ãããããŒãæã€ã¢ã¯ã·ã§ã³ãè¿ããŸãã 15ïŒ removeActionForKey - Remove Action- æå®ãããããŒãæã€ã¢ã¯ã·ã§ã³ã 16ïŒ removeAllActions- ãã¹ãŠã®ã¢ã¯ã·ã§ã³-ããŒãã®ã¢ã¯ã·ã§ã³ãåé€ããŸãã 17ïŒ containsPoint- ãã€ã³ããããŒãå
ã«ããå Žåã¯Yesãè¿ããŸã/ 18ïŒ nodeAtPoint- ãã®ãã€ã³ãã«ããSKNodeã¿ã€ãã®ãªããžã§ã¯ããè¿ããŸãã 19ïŒ nodesAtPoint- ãã®ãã€ã³ãã«ããSKNodeã¿ã€ãã®ãªããžã§ã¯ãã®ãªã¹ããè¿ããŸãã 20ïŒ convertPoint-fromNode- 座æšç³»ã®åº§æšãå€æããŠè¿ããŸãã 21ïŒ convertPoint-toNode- 座æšç³»ã§ã¯ãªã座æšãå€æããŠè¿ããŸãã 22ïŒ intersectionsNode- ããŒããå¥ã®ããŒãã®å¢çãšäº€å·®ããå Žåã¯Yesãè¿ããŸã 23ïŒ CalculateAccumulatedFrame- åå«ãå«ãå¢çã®åº§æšãè¿ããŸãã 24ïŒ locationInNode- ã¿ããããããŒãã®åº§æšãè¿ããŸãã 25ïŒ previousLocationInNode-å ã«ã¿ããããããŒãã®åº§æšãè¿ããŸãã |
ã»ãŒå®æã§ããå人ãã¡ã¯ããå°ãææ
¢ããŠãããŸãã ã芧ã®ãšããã
SKNodeã¯æ§é ãããã»ã©è€éã§
ã¯ãããŸããïŒ
ãšã«ããã
SpriteKitèªäœ
ã¯è€éã§
ã¯ãªããå°ãã®å¿èãå¿
èŠãªã ãã§ãã
ç¶ããŸããããããã€ãã®åºæ¬çãªãªããžã§ã¯ãã¯
SKNodeããç¶æ¿ãããŠããŸããããããç°¡åã«èŠãŠã¿ãŸãããã
1ïŒ SKSpriteNode- ããã¯æšæºã®ã¹ãã©ã€ãã§ãã
2ïŒ SKShapeNode- ããã¯è€åã¹ãã©ã€ãã§ã-ã»ãšãã©ãã¹ãŠã®åœ¢åŒãåãããšãã§ãããªããžã§ã¯ãã§ãã
3ïŒ SKFieldNode- ãããã¯ãä»ã®ç©äœã«ç©ççãªåã®åœ±é¿ãäžãããã£ãŒã«ãã§ãã
4ïŒ SKEmitterNode- ããã¯ç¹å¥ãªããŒãïŒããŒãã£ã¯ã«ïŒã§ãããããã¯ç¹å¥ãªããŒãã£ã¯ã«ã§ãããããããã¯ãŒã«ãªãšãã§ã¯ããäœæã§ããŸãã
5ïŒ SKLabelNode- ããã¯ãããŸããŸãªãªãã·ã§ã³ã§ããã¹ãã衚瀺ããããŒãã§ãã
6ïŒ SKEffectNode- ããã¯ãåå«ã«ç¹æ®å¹æãè¿œå ããããŒãã§ãã
7ïŒ SKLightNode- ããã¯Nodeã§ãããã·ãŒã³ã«å
ãšåœ±ãè¿œå ããiOS 8ã®ãªãªãŒã¹ã§ç»å ŽããŸããã
8ïŒ SKVideoNode- ããã¯ãã·ãŒã³ã«ãããªã衚瀺ã§ããããŒãã§ãã
9ïŒ SKCropNode- ããã¯ãç¹å®ã®åœ¢ç¶ã®ãªããžã§ã¯ãã®ãã¯ã¹ãã£ãå€æŽã§ããããŒãã§ãã
10ïŒ SK3DNode- ååã 瀺ãããã« ãããã¯3Dãªããžã§ã¯ããè¿œå ã§ããããŒãã§ãã
äžèšã®èŠçŽ ã¯ãã¹ãŠæã䜿çšããããªããžã§ã¯ãã§ããã SpriteKitã§ã²ãŒã ãäœæããããã®åºç€ãšããŠæ©èœããŸã ãNodeãã©ã€ãã§èŠãããšãã§ããæãæ¥ãŸããã ãšã³ãžã³èªäœãšãã®å·šå€§ãªæ©èœã«ã€ããŠå°ãç解ã§ããããã«ããã®èšäºãå°ãçè«çãªè³æããå§ããŸããã 次ã«ããããã®äžéšã®æ©èœã®äŸãèŠãŠã¿ãŸããããé çªã«é²ãã§
SKSpriteNodeããå§ããŸãããã
ããžã¥ã¢ã«ããŒãã¬ãã¥ãŒ
ã¬ãã¥ãŒãéå§ããåã«ãæ¹åããããã¯ããã·ãŒã³
scaleModeã®ããããã£ãå€æŽããŸããããã¯äœã®ããã§ããïŒ
å©äŸ¿æ§ã®ããã«ãåç«ããç»é¢ã§ããã»ã¹å
šäœã衚瀺ããæ¹ã䟿å©ã§ããç»é¢ãééãªãå転ãããã®ã«é£œããããšã¯ãããŸããã
ViewControllerãèŠã€ããŠããããã®ããããã£ãå€æŽããŸãããã
Objective-c scene.scaleMode = SKSceneScaleModeResizeFill;
- (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; }
ã¹ã€ãã scene.scaleMode = .ResizeFill
override func supportedInterfaceOrientations() -> Int { return Int(UIInterfaceOrientationMask.Landscape.toRaw()) }
SKSpriteNode
SKSpriteNodeã¯ããã¯ã¹ãã£ïŒã°ã©ãã£ãã¯ã€ã¡ãŒãžïŒã衚瀺ããæšæºã®ã¹ãã©ã€ãã§ãã
ãããè¿ãã§èŠãŠã¿ãŸããããäžã®ç»åã«ã¯3ã€ã®ãªããžã§ã¯ãïŒã¹ãã©ã€ãïŒããããŸãïŒ
éãæ£æ¹åœ¢ãããŒãã¹ãã©ã€ããããã³èæ¯ã¹ãã©ã€ãã
SKSpriteNodeåã®3ã€ã®ãªããžã§ã¯ããå
·äœçã«äœæããã®ã§ãäœæã®éãã確èªã§ããŸãã

éå§ããã«ã¯ãXcodeãéããŠãããžã§ã¯ãã«æ°ãããã©ã«ããŒãäœæãã
SpriteKitImageãšããååãä»ããŸãïŒå¥œããªååãä»ããããšãã§ããŸãïŒ
次ã«ã
ããããç»å
ãå«ãã¢ãŒã«ã€ããããŠã³ããŒãããããã解åããŠãäœæããã°ããã®ãã©ã«ãã«ãããã®ç»åãè¿œå ããŸãã
äœæããã»ã¹ã説æãããã¹ãŠã®ã³ãŒãã¯ä»¥äžã«ãããŸããããã§ããã€ãã®ãã€ã³ãã説æããŸãã
æåã®ã¹ãã©ã€ãã®ååã¯
BackgroundSpriteã§ã ãäœæããåã«ãã¿ã€ã
SKTextureã®ãªããžã§ã¯ããäœæããç»åã®ååããã©ã¡ãŒã¿ãŒãšããŠæž¡ããŸãã ãªããã®ãªããžã§ã¯ããå¿
èŠãªã®ã§ããïŒ
ãã¯ã¹ãã£ã¯ãã¹ãã©ã€ãèªäœãäœæããåã§ãç»åãæäœããã®ã«éåžžã«äŸ¿å©ã§ãããã¯ã¹ãã£ã䜿çšãããšããªãœãŒã¹ãçµæžçã«ç®¡çã§ããåããªããžã§ã¯ããè€æ°ã®ã¹ãã©ã€ãã§äœ¿çšã§ããŸãã
次ã«ããµã€ãºãšäœçœ®ãèšå®ããŸãã
äœçœ®ã«é¢ããããã€ãã®åèªã SKSpriteNodeã§ã¯ããªããžã§ã¯ãã®äžå€®ããã«ãŠã³ãããŸã ãã€ãŸãããã®ãããªã¹ãã©ã€ãã100pxã·ãããããšèšããšããããã¯äžå¿ç¹ã100pxã·ããããããšãæå³ããŸãã
ãµã€ãºãšäœçœ®ãèšå®ããåŸã
anchorPointããããã£ãå€æŽããŸãã å€æŽããå¿
èŠã¯ãããŸãããç»åãå
šç»é¢ã«åãããããããããã«å€æŽããŸããã ããã§ç解ã§ããŸãïŒ
æ¢ã«ãåãã®ãšããã
anchorPointã¯åç
§ãã€ã³ãã§ãããäžã§æžããããã«ãSpriteã®äœçœ®ã¯äžå€®ã®ãã€ã³ãã«ãã£ãŠæ±ºå®ãããããã
anchorPointã¯ãããå€æŽããŸãã ããããç解ããããã«ãäžã®åçãèŠãŠã¿ãŸãããã

ã芧ã®ããã«ããã«ã«ã座æšãç»åã«æãããŠããŸãã ããã©ã«ãã§ã¯ã
SKSpriteNodeãªããžã§ã¯ãã®
anchorPointã¯ ïŒ 0.5ã0.5 ïŒ ãã€ãŸãäžå€®ã«ãããŸãã ãã®äŸã§ã¯ããã®ããããã£ãå€æŽããŠ
ïŒ0ã0ïŒã«èšå®ããŸããããäžåºŠç»åãèŠããšããã®ç¹ãå·Šäžé
ã«ããããšãããããŸããã€ãŸããéå§ç¹ã¯äžå€®ã§ã¯ãªãäžããã§ããå·Šãžã ãããŠä»ããã圌ãããã®ãããªã¹ãã©ã€ãã100pxåããããšèšããªããããã¯ç§ãã¡ããã®æãäœã巊端ã®ç¹ã100pxã ãã·ããããããšãæå³ããŸãã
次ã«ãååãå²ãåœãŠãŸãããããéåžžã«éèŠãªããããã£ã§ãããããŸã§ã«ã¢ã¯ã·ã§ã³ãçºçããŠããªãããããã®å Žåã¯èšè¿°ããå¿
èŠã¯ãããŸããã§ããã
ãªãååãå¿
èŠãªã®ã§ããïŒ ããã«ãã£ãŠããªããžã§ã¯ããèŠã€ããå®çŸ©ããåºå¥ããŸãã
ååãéžã¶ãšãã¯æ³šæããŠãã ããïŒ ã
å¿
èŠãªããããã£ãèšå®ããããã·ãŒã³ã«æ»ãããã®ã¡ãœãããŸãã¯é¢æ°ãåŒã³åºããŸãã
addChild- åå«ãè¿œå ïŒ1ã€ã®ããŒããå¥ã®ããŒãã«è¿œå ïŒã㊠ããªããžã§ã¯ããã·ãŒã³ã«è¿œå ããŸãã |
äžã§æžããããã«ãç§ãã¡ã®ã·ãŒã³ã¯
SKNodeã®ç¶æ¿è
ã§ããããããããããŒããå¥ã®ããŒãã«è¿œå ããŸãã
ããšãã°ãããã¹ãã©ã€ããå¥ã®ã¹ãã©ã€ãã«è¿œå ããå Žåããã®ã¡ãœãããŸãã¯é¢æ°ã¯åãããã«æ©èœããŸãã
SimpleSpriteãšããååã®2çªç®ã®Spriteã¯ãäœææã«ãColorãšsizeã®2ã€ã®ãã©ã¡ãŒã¿ãŒãæž¡ããŸãã
äžèšã§æžããããã«ãè²ãšããŠ
UIColoråã®ãªããžã§ã¯ããæž¡ããŸã
ãSKColorãæž¡ãããšãã§ããŸãããããã¯ãšã©ãŒã«ã¯ãªããŸããã
ãã1ã€ã®ãã€ã³ãã¯
zPositionã§ã
ãzPosition -Z軞ã«å¯ŸããNodeã®äœçœ®ã決å®ããŸãã
ããã©ã«ãã§ã¯ããã®ããããã£ã¯
0ã§ãã äœããã®çç±ã§ãªããžã§ã¯ããäœæãããšãã«ã2çªç®ã®ãªããžã§ã¯ãã§ãã
SimpleSpriteãšãããªããžã§ã¯ããæ®ãã®éšåã®äžã«ãããŸãããæããã«åæåã®ç¹æ§ã®ããããã®ã¹ãã©ã€ãã«
zPositionããããã£ã1ã«å²ãåœãŠãŸããã
å¥ã®éåžžã«éèŠãªç¹ïŒ
åãå¹³é¢äžã«ãªãããŒãã¯çžäºäœçšã§ããŸããïŒã€ãŸãã1ã€ã®
zPositionã0ã§ããã1ã€ã1ã®å Žåããããã¯æ¥è§ŠããŸããïŒ
ImageSpriteãšããååã®3çªç®ã®Spriteã¯ãåæåäžã«ããã©ã¡ãŒã¿ãŒãšããŠç»åã®ååãæž¡ããŸããã
ãã¡ããããã®ã¡ãœããã¯ãã¿ã€ã
SKTextureã®ãªããžã§ã¯ããäœæããæåã®ã¡ãœãããšã¯ç°ãªããŸãããéåžžã®åæåã«éåžžã«é©ããŠããŸãã
Objective-cObjective-c #import @implementation GameScene -(void)didMoveToView:(SKView *)view { [self SceneSetting]; [self SKSpriteNodeDemo]; // } -(void)SceneSetting { self.backgroundColor = [SKColor orangeColor]; } -(void)SKSpriteNodeDemo { // SKTexture . . SKTexture *Texture = [SKTexture textureWithImageNamed:@]; // SKSpriteNode . SKTexture, . SKSpriteNode *BackgroundSprite = [SKSpriteNode spriteNodeWithTexture:Texture]; BackgroundSprite.size = CGSizeMake(640, 320); // . BackgroundSprite.position = CGPointMake(0, 0); // . BackgroundSprite.anchorPoint = CGPointMake(0, 0); // . BackgroundSprite.name = @;// . [self addChild:BackgroundSprite];// . // SKSpriteNode . . SKSpriteNode *SimpleSprite = [SKSpriteNode spriteNodeWithColor:[UIColor blueColor] size:CGSizeMake(50, 50)]; SimpleSprite.position = CGPointMake(200, 150);// . SimpleSprite.zPosition = 1;// Z. SimpleSprite.name = @;// . [self addChild:SimpleSprite];// . // SKSpriteNode . . SKSpriteNode *ImageSprite = [SKSpriteNode spriteNodeWithImageNamed:@]; ImageSprite.position = CGPointMake(250, 50);// . ImageSprite.size = CGSizeMake(100, 15);// . ImageSprite.name = @;// . [self addChild:ImageSprite];// . } @end
SwiftSwift import SpriteKit class GameScene: SKScene { override func didMoveToView(view: SKView) { SceneSetting() SKSpriteNodeDemo() // . } func SceneSetting() { self.backgroundColor = SKColor.orangeColor() } func SKSpriteNodeDemo() { // Texture SKTexture. var Texture = SKTexture(imageNamed: "desert_BG") // BackgroundSprite SKSpriteNode. // SKTexture . var BackgroundSprite = SKSpriteNode(texture: Texture) BackgroundSprite.size = CGSizeMake(640, 320) // . BackgroundSprite.position = CGPointMake(0, 0) // . BackgroundSprite.anchorPoint = CGPointMake(0, 0) // . BackgroundSprite.name = "BackgroundSprite" // . self.addChild(BackgroundSprite) // . // SimpleSprite SKSpriteNode. // . var SimpleSprite = SKSpriteNode(color: UIColor.blueColor(), size: CGSizeMake(50, 50)) SimpleSprite.position = CGPointMake(200, 150) // . SimpleSprite.zPosition = 1; // Z. SimpleSprite.name = "SimpleSprite" // . self.addChild(SimpleSprite) // . // ImageSprite SKSpriteNode. // . var ImageSprite = SKSpriteNode(imageNamed: "DerevoOpora") ImageSprite.position = CGPointMake(250, 50) // . ImageSprite.size = CGSizeMake(100, 15) // . ImageSprite.name = "ImageSprite" // . self.addChild(ImageSprite) // . } }
, SKSpriteNode , , Node â SKShapeNode .
SKShapeNode
SKShapeNode-ããã¯è€åã¹ãã©ã€ãã§ã-ã»ãšãã©ãã¹ãŠã®åœ¢åŒããšãããšãã§ãããªããžã§ã¯ãã§ããã€ãŸããåãæ£æ¹åœ¢ãäžè§åœ¢ãæ¥åãªã©ã ã»ãŒãã¹ãŠã®å¹ŸäœåŠç圢ç¶ã䜿çšã§ããŸããããã§ã¯ãã©ãŒã å
šäœãè€åã§ãããããSKSpriteNodeãããæ§ç¯ãå°ãè€éã§ããããããè€éãªãã©ãŒã ã®æ§ç¯ã«ã¯äžå¯æ¬ ã§ããã管çãªãã§ã¯éåžžã«å°é£ã§ããç³ãåãªããããžãã¹ã«åãæãããŸãããïŒ
äžèšã®å³ãå®è£
ãããŠããã¡ãœãããŸãã¯é¢æ°ãèŠãŠã¿ãŸããããå®å
šãªã³ãŒãã¯ä»¥äžã«ãããŸãããã®ããã䟿å®äžã以åã®ã¡ãœãããŸãã¯æ©èœãã³ã¡ã³ãã¢ãŠãããŸããããããã£ãŠã以åã®ãªããžã§ã¯ãã衚瀺ãããªããŠãå¿é
ããªãã§ãã ãããObjective-cObjective-c -(void)SKShapeNodeDemo { // SKShapeNode . . SKShapeNode *Circle = [SKShapeNode shapeNodeWithCircleOfRadius:20]; Circle.position = CGPointMake(50, 200); // . Circle.lineWidth = 10; // . Circle.strokeColor = [SKColor blueColor]; // . Circle.fillColor = [SKColor redColor]; // . Circle.name = @"Circle"; // . [self addChild:Circle]; // . // SKShapeNode . (CGRectMake). SKShapeNode *Quad = [SKShapeNode shapeNodeWithRect:CGRectMake(0, 0, 50, 50)]; Quad.position = CGPointMake(100, 200); // . Quad.lineWidth = 4; // . Quad.strokeColor = [SKColor whiteColor]; // . Quad.fillColor = [SKColor blackColor]; // . Quad.name = @"Quad"; // . [self addChild:Quad]; // . // SKShapeNode . (CGRectMake). // . SKShapeNode *Ellips = [SKShapeNode shapeNodeWithEllipseInRect:CGRectMake(0, 0, 50, 90)]; Ellips.position = CGPointMake(200, 200); // . Ellips.lineWidth = 2; // . Ellips.strokeColor = [SKColor greenColor]; // . Ellips.fillColor = [SKColor purpleColor]; // . Ellips.glowWidth = 5; // . Ellips.name = @"Ellips"; // . [self addChild:Ellips]; // . // UIBezierPath. (CGRectMake), // . UIBezierPath *RoundedRectPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 50, 50) cornerRadius:12]; // SKShapeNode . . // , CGPath. SKShapeNode *RoundedRect = [ SKShapeNode shapeNodeWithPath:RoundedRectPath.CGPath centered:YES]; RoundedRect.position = CGPointMake(50, 100); // . RoundedRect.lineWidth = 2; // . RoundedRect.strokeColor = [SKColor blueColor]; // . RoundedRect.fillColor = [SKColor redColor]; // . RoundedRect.name = @"RoundedRect"; // . [self addChild:RoundedRect]; // . UIBezierPath *TrianglePath = [UIBezierPath bezierPath]; // UIBezierPath. [TrianglePath moveToPoint:CGPointMake(0, 0)]; // . [TrianglePath addLineToPoint:CGPointMake(-25, -50)]; // . [TrianglePath addLineToPoint:CGPointMake(25, -50)]; // . [TrianglePath addLineToPoint:CGPointMake(0, 0)]; // . // SKShapeNode . . // , CGPath. SKShapeNode *Triangle = [SKShapeNode shapeNodeWithPath:TrianglePath.CGPath centered:YES]; Triangle.position = CGPointMake(200, 70); // . Triangle.lineWidth = 2; // . Triangle.strokeColor = [SKColor blackColor]; // . Triangle.fillColor = [SKColor blueColor]; // . Triangle.name = @"Triangle"; // . [self addChild:Triangle]; // . }
ã¹ã€ããã¹ã€ãã func SKShapeNodeDemo() { // Circle SKShapeNode. . var Circle = SKShapeNode(circleOfRadius: 20) Circle.position = CGPointMake(50, 200) // . Circle.lineWidth = 10 // . Circle.strokeColor = SKColor.blueColor() // . Circle.fillColor = SKColor.redColor() // . Circle.name = "Circle" // . self.addChild(Circle) // . // Quad SKShapeNode. // (CGRectMake). var Quad = SKShapeNode(rect: CGRectMake(0, 0, 50, 50)) Quad.position = CGPointMake(100, 200) // . Quad.lineWidth = 4 // . Quad.strokeColor = SKColor.whiteColor() // . Quad.fillColor = SKColor.blackColor() // . Quad.name = "Quad" // . self.addChild(Quad) // . // Ellips SKShapeNode. // . var Ellips = SKShapeNode(ellipseInRect: CGRectMake(0, 0, 50, 90)) Ellips.position = CGPointMake(200, 200) // . Ellips.lineWidth = 2 // . Ellips.strokeColor = SKColor.greenColor() // . Ellips.fillColor = SKColor.purpleColor() // . Ellips.glowWidth = 5 // . Ellips.name = "Ellips" // . self.addChild(Ellips) // . // RoundedRectPath UIBezierPath. // (CGRectMake), . var RoundedRectPath = UIBezierPath(roundedRect: CGRectMake(0, 0, 50, 50), cornerRadius: 12) // RoundedRect SKShapeNode. // . // , CGPath. var RoundedRect = SKShapeNode(path: RoundedRectPath.CGPath, centered:true) RoundedRect.position = CGPointMake(50, 100) // . RoundedRect.lineWidth = 2 // . RoundedRect.strokeColor = SKColor.blueColor() // . RoundedRect.fillColor = SKColor.redColor() // . RoundedRect.name = "RoundedRect" // . self.addChild(RoundedRect) // . var TrianglePath = UIBezierPath() // UIBezierPath. TrianglePath.moveToPoint(CGPointMake(0, 0)) // . TrianglePath.addLineToPoint(CGPointMake(-25, -50)) // . TrianglePath.addLineToPoint(CGPointMake(25, -50)) // . TrianglePath.addLineToPoint(CGPointMake(0, 0)) // . // Triangle SKShapeNode. // . // , CGPath. var Triangle = SKShapeNode(path: TrianglePath.CGPath, centered: true) Triangle.position = CGPointMake(200, 70) // . Triangle.lineWidth = 2 // . Triangle.strokeColor = SKColor.blackColor() // . Triangle.fillColor = SKColor.blueColor() // . Triangle.name = "Triangle" // . self.addChild(Triangle) // . }
ã§SKShapeNodeïŒåæåããããã€ãã®æ¹æ³ãããããããã¯2ã€ã®ã°ã«ãŒãã«åããããšãã§ããæšæºçãªåæåãŸãã¯ãªããžã§ã¯ãã®äœ¿çšåæUIBezierPathããããããåå¥ã«æ€èšããŸãããïŒæšæºåæå
⢠åæåãç°¡åãªãªããžã§ã¯ãã¯ãæåã®ã°ã«ãŒãã«åé¡ãããŸããããã¯ã©ãããæå³ã§ããïŒãããã¯ãããšãã°ããã©ãŒã ãæ¢ã«äœæãããŠããåæåæã®ãªããžã§ã¯ãã§ããããã©ã¡ãŒã¿ãèšå®ããã ãã§ããããã§ç解ã§ããŸãïŒãµãŒã¯ã«, Circle . , shapeNodeWithCircleOfRadius circleOfRadius (-) .
Objective-c
// SKShapeNode . . SKShapeNode *Circle = [SKShapeNode shapeNodeWithCircleOfRadius:20]; Circle.position = CGPointMake(50, 200); // . Circle.lineWidth = 10; // . Circle.strokeColor = [SKColor blueColor]; // . Circle.fillColor = [SKColor redColor]; // . Circle.name = @"Circle"; // . [self addChild:Circle]; // . Swift
// Circle SKShapeNode. . var Circle = SKShapeNode(circleOfRadius: 20) Circle.position = CGPointMake(50, 200) // . Circle.lineWidth = 10 // . Circle.strokeColor = SKColor.blueColor() // . Circle.fillColor = SKColor.redColor() // . Circle.name = "Circle" // . self.addChild(Circle) // .
, , . , , . lineWidth , (), , .
: strokeColor fillColor .
⢠strokeColor â ( ). ⢠fillColor â .
, .
, 5 â 10 nodes? , fillColor , 10 nodes, . , . |
, , .
|
ã¯ã¯ããObjective-c // SKShapeNode . (CGRectMake). SKShapeNode *Quad = [SKShapeNode shapeNodeWithRect:CGRectMake(0, 0, 50, 50)]; Quad.position = CGPointMake(100, 200); // . Quad.lineWidth = 4; // . Quad.strokeColor = [SKColor whiteColor]; // . Quad.fillColor = [SKColor blackColor]; // . Quad.name = @"Quad"; // . [self addChild:Quad]; // .
Swift // Quad SKShapeNode. // (CGRectMake). var Quad = SKShapeNode(rect: CGRectMake(0, 0, 50, 50)) Quad.position = CGPointMake(100, 200) // . Quad.lineWidth = 4 // . Quad.strokeColor = SKColor.whiteColor() // . Quad.fillColor = SKColor.blackColor() // . Quad.name = "Quad" // . self.addChild(Quad) // .
Quad , , . , (CGRectMake). CGRectMake(0, 0, 50, 50) , , : . : x â X, y â Y. . |
ãšãªãã¹Objective-c // SKShapeNode . (CGRectMake). // . SKShapeNode *Ellips = [SKShapeNode shapeNodeWithEllipseInRect:CGRectMake(0, 0, 50, 90)]; Ellips.position = CGPointMake(200, 200); // . Ellips.lineWidth = 2; // . Ellips.strokeColor = [SKColor greenColor]; // . Ellips.fillColor = [SKColor purpleColor]; // . Ellips.glowWidth = 5; // . Ellips.name = @"Ellips"; // . [self addChild:Ellips]; // .
Swift // Ellips SKShapeNode. // . var Ellips = SKShapeNode(ellipseInRect: CGRectMake(0, 0, 50, 90)) Ellips.position = CGPointMake(200, 200) // . Ellips.lineWidth = 2 // . Ellips.strokeColor = SKColor.greenColor() // . Ellips.fillColor = SKColor.purpleColor() // . Ellips.glowWidth = 5 // . Ellips.name = "Ellips" // . self.addChild(Ellips) // .
Ellips , . , . shapeNodeWithEllipseInRect ellipseInRect . (CGRectMake) , . , , glowWidth
⢠glowWidth â , , .
|
ããŠãæåã®ã°ã«ãŒããããç°¡åãªåæåã®ããã€ãã®ã¡ãœãããŸãã¯é¢æ°ãèŠãŸããããã¡ããããã¹ãŠããªã¹ãããããšã¯ã§ããŸãããèªåã§ãããç解ããæ¹ãããèå³æ·±ããšæããŸãã
UIBezierPathãªããžã§ã¯ãã䜿çšããåæå
⢠2çªç®ã®ã°ã«ãŒãã«ã¯ãUIBezierPathãªããžã§ã¯ãã䜿çšããŠåæåãå®è¡ããããªããžã§ã¯ããå«ãŸããŸããããã¯ã©ãããæå³ã§ããïŒ
ãããŸã§ã圢ç¶ãããã£ãŠãããªããžã§ã¯ããæ€èšããŠããããã©ã¡ãŒã¿ãŒãæž¡ãã ãã§æžã¿ãŸããããããšãã°äžè§åœ¢ãäœæãããå Žåã¯ã©ãã§ããããïŒãã®ãããªåæåã¡ãœããã¯ãããŸããïŒãã®ãããªå ŽåãUIBezierPathåã®ãªããžã§ã¯ããå¿
èŠã§ãããã®ãªããžã§ã¯ãã䜿çšããŠãä»»æã®ãã©ãŒã ãäœæããSKShapeNodeã«æž¡ããšè¡šç€ºãããŸããäžžã¿ã垯ã³ãObjective-c // UIBezierPath. (CGRectMake), // . UIBezierPath *RoundedRectPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 50, 50) cornerRadius:12]; // SKShapeNode . . // , CGPath. SKShapeNode *RoundedRect = [ SKShapeNode shapeNodeWithPath:RoundedRectPath.CGPath centered:YES]; RoundedRect.position = CGPointMake(50, 100); // . RoundedRect.lineWidth = 2; // . RoundedRect.strokeColor = [SKColor blueColor]; // . RoundedRect.fillColor = [SKColor redColor]; // . RoundedRect.name = @"RoundedRect"; // . [self addChild:RoundedRect]; // .
Swift // RoundedRectPath UIBezierPath. // (CGRectMake), . var RoundedRectPath = UIBezierPath(roundedRect: CGRectMake(0, 0, 50, 50), cornerRadius: 12) // RoundedRect SKShapeNode. // . // , CGPath. var RoundedRect = SKShapeNode(path: RoundedRectPath.CGPath, centered:true) RoundedRect.position = CGPointMake(50, 100) // . RoundedRect.lineWidth = 2 // . RoundedRect.strokeColor = SKColor.blueColor() // . RoundedRect.fillColor = SKColor.redColor() // . RoundedRect.name = "RoundedRect" // . self.addChild(RoundedRect) // .
, RoundedRect . , UIBezierPath , : (CGRectMake) . , () .
UIBezierPath , SKShapeNode , . UIBezierPath , centered . , CGPath , ; , ! , â centered , ! , . , . |
ãã©ã€ã¢ã³ã°ã«Objective-c UIBezierPath *TrianglePath = [UIBezierPath bezierPath]; // UIBezierPath. [TrianglePath moveToPoint:CGPointMake(0, 0)]; // . [TrianglePath addLineToPoint:CGPointMake(-25, -50)]; // . [TrianglePath addLineToPoint:CGPointMake(25, -50)]; // . [TrianglePath addLineToPoint:CGPointMake(0, 0)]; // . // SKShapeNode . . // , CGPath. SKShapeNode *Triangle = [SKShapeNode shapeNodeWithPath:TrianglePath.CGPath centered:YES]; Triangle.position = CGPointMake(200, 70); // . Triangle.lineWidth = 2; // . Triangle.strokeColor = [SKColor blackColor]; // . Triangle.fillColor = [SKColor blueColor]; // . Triangle.name = @"Triangle"; // . [self addChild:Triangle]; // .
Swift var TrianglePath = UIBezierPath() // UIBezierPath. TrianglePath.moveToPoint(CGPointMake(0, 0)) // . TrianglePath.addLineToPoint(CGPointMake(-25, -50)) // . TrianglePath.addLineToPoint(CGPointMake(25, -50)) // . TrianglePath.addLineToPoint(CGPointMake(0, 0)) // . // Triangle SKShapeNode. // . // , CGPath. var Triangle = SKShapeNode(path: TrianglePath.CGPath, centered: true) Triangle.position = CGPointMake(200, 70) // . Triangle.lineWidth = 2 // . Triangle.strokeColor = SKColor.blackColor() // . Triangle.fillColor = SKColor.blueColor() // . Triangle.name = "Triangle" // . self.addChild(Triangle) // .
Triangle . UIBezierPath . . , UIBezierPath , TrianglePath . , . ! , , , . moveToPoint UIBezierPath . (), , , addLineToPoint . , , , ( ). . TrianglePath . SKShapeNode Triangle , «» ! |
⢠ã€ã³ã¿ãŒãããã«ã¯UIBezierPathã®ãããªãªããžã§ã¯ãã«é¢ããæ
å ±ããããããããŸãã®ã§ãèŠã€ããŠèªãããšããå§ãããŸãã
ãªãäžå¿ãã©ã¡ãŒã¿ãŒãå¿
èŠãªã®ãã説æããããšãçŽæããŸãããSKShapeNodeã®ãããªãªããžã§ã¯ãã®åºæ¬æ§é ãç解ã§ããããã«ããããã«ããããè¡ã£ãããšã¯ãããŸããããã®ãããäžå€®ã®ãã©ã¡ãŒã¿ãŒãæ£ã®å€ããšãå Žåãã¿ã€ãSKShapeNodeã®ãªããžã§ã¯ãã®äœçœ®ã¯äžå€®ããã«ãŠã³ããããŸããã¿ã€ãSKSpriteNodeã®ãªããžã§ã¯ãã®äœçœ®ã«ã€ããŠèª¬æãããšãããããã®äœçœ®ã¯äžå€®ããã«ãŠã³ããããããšãæãåºããŠãã ããããããã£ãŠãäžå€®ãã©ã¡ãŒã¿ãæ£ã®å Žåããã®ãªããžã§ã¯ãã®äœçœ®ã¯äžå€®ããèšç®ãããŸããããã¯ãSKShapeNodeã¿ã€ãã®åçŽãªãªããžã§ã¯ãã®äœçœ®ãã©ã®ããã«èšç®ãããããšããéåžžã«é¢é£æ§ã®ãã質åãæããŸããªããªãããã¹ãŠã®ãªããžã§ã¯ããäžå€®ã®åæåãã©ã¡ãŒã¿ãŒã§äœæãããããã§ã¯ãªãããã§ããïŒ
äŸãšããŠã以åã«Quadãšããååã§èŠããªããžã§ã¯ããèŠãŠã¿ãŸãããã ïŒCGRectMakeïŒãšããååã®é¢æ°ããã©ã¡ãŒã¿ãŒãšããŠæž¡ãããšããå§ãŸãåæåã調ã¹ãŸãããåã«æžããããã«ããã®é¢æ°ã¯äœçœ®ãšãµã€ãºãè¿ããŸãã CGRectMake(0, 0, 50, 50).
ãã®äžã§ãæåã®2ã€ã®ãã©ã¡ãŒã¿ãŒã¯ããã®åç¹äœçœ®ïŒxãyïŒãããã³æ®ãã®å¹
ãšé·ãããããã決å®ããŸããå¹
ãšé·ããæ確ãªå Žåãåç¹ã¯å°ãæ¿ã£ãŠããŸããå®éãã¿ã€ãSKShapeNodeã®ãªããžã§ã¯ãã¯ãäœçœ®ãäžå€®ããã«ãŠã³ããããã¿ã€ãSKSpriteNodeã®ãªããžã§ã¯ããšã¯å°ãç°ãªãäœçœ®èšç®ã·ã¹ãã ã䜿çšããŸããäžèšã®ç»åãèŠãŠã¿ãŸãããããããã£ãŠããªããžã§ã¯ããQuadãšããååã§åæåãããšãã«ãCGRectMakeïŒ0ã0ã50ã50ïŒé¢æ°ããã©ã¡ãŒã¿ãŒãšããŠæž¡ããŸãããç»åã§ãããããã«ãåç¹ã¯ïŒ0ã0ïŒã§ããç»åãããäœçœ®ã¯å·Šäžé
ããå§ãŸãããšãããããŸããã§ã¯ãåç¹ãå€æŽããŠã以åã®é¢æ°ã転éããŸããã座æšã¯ç°ãªããŸãã CGRectMake(-25, -25, 50, 50).
ãããŠãç§ãã¡ã¯äœãèŠãŸããïŒåæåæã®æ£æ¹åœ¢ã«ã¯ãäžå€®ããåºæºäœçœ®ã®éå§ç¹ããããŸããã€ãŸãããªããžã§ã¯ãã«ã¯SKSpriteNodeãªããžã§ã¯ããšåãåç
§ã·ã¹ãã ããããäœçœ®ãäžå€®ããã«ãŠã³ããããŸãã⢠originã¯ãã¿ã€ãSKSpriteNodeã®ãªããžã§ã¯ãã§ä»¥åèŠããã®ãšå°ã䌌ãã¢ã³ã«ãŒã®åœ¹å²ãæãããŸãã質åããããããããŸãããããªãåç¹åº§æšãïŒ-25ã-25ïŒã«æå®ããã®ã§ããïŒâ¢å®éã«ã¯ãæ£æ¹åœ¢ã®ãµã€ãºã¯ïŒ50ã50ïŒã§ããã€ãŸãããã®äžéç¹ã¯ïŒ50/2ã50/2ïŒãã€ãŸãå¹
ãšé·ãã®ååã§ãïŒæåã®ç»åã§ã¯ãSKShapeNodeåã®ãªããžã§ã¯ãã衚瀺ãããŠããŸãéå§ç¹ã¯ïŒ0ã0ïŒã§ããããããã®äœçœ®ã¯å·Šäžé
ãã決å®ãããŸãããïŒ-25ã-25ïŒã ã移åãããšãéå§ç¹ã¯äžå€®ã«ãªããäœçœ®ã¯äžå€®ã§ã«ãŠã³ããããŸããâ¢ãã®ãããªã¹ãã©ã€ãã100ãã¯ã»ã«ç§»åãããšèšããããããã®äžéç¹ã100ãã¯ã»ã«ç§»åããããšãæå³ããŸããSKShapeNodeã奜ãã ã£ããšæããŸããã芧ã®ãšãããé£ããããšã¯äœããããŸããããããã€ãã®ç¹ãç解ããŠããªããŠãæããªãã®ã§ãç©çåŠã®ãã¢ã³ã¹ãã¬ãŒã·ã§ã³äžã«ãã¹ãŠãç解ã§ããŸããç°¡åãªãã³ãïŒãã®Spriteãªããžã§ã¯ããããããç解ããã«ã¯ãUIBezierPathã§ããããå匷ããåžžã«ç·Žç¿ããŠãã ããïŒObjective-cObjective-c #import @implementation GameScene -(void)didMoveToView:(SKView *)view { [self SceneSetting]; //[self SKSpriteNodeDemo]; [self SKShapeNodeDemo]; } -(void)SceneSetting { self.backgroundColor = [SKColor orangeColor]; } -(void)SKSpriteNodeDemo { SKTexture *Texture = [SKTexture textureWithImageNamed:@]; SKSpriteNode *BackgroundSprite = [SKSpriteNode spriteNodeWithTexture:Texture]; BackgroundSprite.size = CGSizeMake(640, 320); BackgroundSprite.position = CGPointMake(0, 0); BackgroundSprite.anchorPoint = CGPointMake(0, 0); BackgroundSprite.name = @; [self addChild:BackgroundSprite]; SKSpriteNode *SimpleSprite = [SKSpriteNode spriteNodeWithColor:[UIColor blueColor] size:CGSizeMake(50, 50)]; SimpleSprite.position = CGPointMake(200, 150); SimpleSprite.zPosition = 1; SimpleSprite.name = @; [self addChild:SimpleSprite]; SKSpriteNode *ImageSprite = [SKSpriteNode spriteNodeWithImageNamed:@]; ImageSprite.position = CGPointMake(250, 50); ImageSprite.size = CGSizeMake(100, 15); ImageSprite.name = @; [self addChild:ImageSprite]; } -(void)SKShapeNodeDemo { SKShapeNode *Circle = [SKShapeNode shapeNodeWithCircleOfRadius:20]; Circle.position = CGPointMake(50, 200); Circle.lineWidth = 10; Circle.strokeColor = [SKColor blueColor]; Circle.fillColor = [SKColor redColor]; Circle.name = @; [self addChild:Circle]; SKShapeNode *Quad = [SKShapeNode shapeNodeWithRect:CGRectMake(0, 0, 50, 50)]; Quad.position = CGPointMake(100, 200); Quad.lineWidth = 4; Quad.strokeColor = [SKColor whiteColor]; Quad.fillColor = [SKColor blackColor]; Quad.name = @; [self addChild:Quad]; SKShapeNode *Ellips = [SKShapeNode shapeNodeWithEllipseInRect:CGRectMake(0, 0, 50, 90)]; Ellips.position = CGPointMake(200, 200); Ellips.lineWidth = 2; Ellips.strokeColor = [SKColor greenColor]; Ellips.fillColor = [SKColor purpleColor]; Ellips.glowWidth = 5; Ellips.name = @; [self addChild:Ellips]; UIBezierPath *RoundedRectPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 50, 50) cornerRadius:12]; SKShapeNode *RoundedRect = [ SKShapeNode shapeNodeWithPath:RoundedRectPath.CGPath centered:YES]; RoundedRect.position = CGPointMake(50, 100); RoundedRect.lineWidth = 2; RoundedRect.strokeColor = [SKColor blueColor]; RoundedRect.fillColor = [SKColor redColor]; RoundedRect.name = @; [self addChild:RoundedRect]; UIBezierPath *TrianglePath = [UIBezierPath bezierPath]; [TrianglePath moveToPoint:CGPointMake(0, 0)]; [TrianglePath addLineToPoint:CGPointMake(-25, -50)]; [TrianglePath addLineToPoint:CGPointMake(25, -50)]; [TrianglePath addLineToPoint:CGPointMake(0, 0)]; SKShapeNode *Triangle = [SKShapeNode shapeNodeWithPath:TrianglePath.CGPath centered:YES]; Triangle.position = CGPointMake(200, 70); Triangle.lineWidth = 2; Triangle.strokeColor = [SKColor blackColor]; Triangle.fillColor = [SKColor blueColor]; Triangle.name = @; [self addChild:Triangle]; } @end
ã¹ã€ããã¹ã€ãã import SpriteKit class GameScene: SKScene { override func didMoveToView(view: SKView) { SceneSetting() //SKSpriteNodeDemo() SKShapeNodeDemo() } func SceneSetting() { self.backgroundColor = SKColor.orangeColor() } func SKSpriteNodeDemo() { var Texture = SKTexture(imageNamed: "desert_BG") var BackgroundSprite = SKSpriteNode(texture: Texture) BackgroundSprite.size = CGSizeMake(640, 320) BackgroundSprite.position = CGPointMake(0, 0) BackgroundSprite.anchorPoint = CGPointMake(0, 0) BackgroundSprite.name = "BackgroundSprite" self.addChild(BackgroundSprite) var SimpleSprite = SKSpriteNode(color: UIColor.blueColor(), size: CGSizeMake(50, 50)) SimpleSprite.position = CGPointMake(200, 150) SimpleSprite.zPosition = 1; SimpleSprite.name = "SimpleSprite" self.addChild(SimpleSprite) var ImageSprite = SKSpriteNode(imageNamed: "DerevoOpora") ImageSprite.position = CGPointMake(250, 50) ImageSprite.size = CGSizeMake(100, 15) ImageSprite.name = "ImageSprite" self.addChild(ImageSprite) } func SKShapeNodeDemo() { var Circle = SKShapeNode(circleOfRadius: 20) Circle.position = CGPointMake(50, 200) Circle.lineWidth = 10 Circle.strokeColor = SKColor.blueColor() Circle.fillColor = SKColor.redColor() Circle.name = "Circle" self.addChild(Circle) var Quad = SKShapeNode(rect: CGRectMake(0, 0, 50, 50)) Quad.position = CGPointMake(100, 200) Quad.lineWidth = 4 Quad.strokeColor = SKColor.whiteColor() Quad.fillColor = SKColor.blackColor() Quad.name = "Quad" self.addChild(Quad) var Ellips = SKShapeNode(ellipseInRect: CGRectMake(0, 0, 50, 90)) Ellips.position = CGPointMake(200, 200) Ellips.lineWidth = 2 Ellips.strokeColor = SKColor.greenColor() Ellips.fillColor = SKColor.purpleColor() Ellips.glowWidth = 5 Ellips.name = "Ellips" self.addChild(Ellips) var RoundedRectPath = UIBezierPath(roundedRect: CGRectMake(0, 0, 50, 50), cornerRadius: 12) var RoundedRect = SKShapeNode(path: RoundedRectPath.CGPath, centered:true) RoundedRect.position = CGPointMake(50, 100) RoundedRect.lineWidth = 2 RoundedRect.strokeColor = SKColor.blueColor() RoundedRect.fillColor = SKColor.redColor() RoundedRect.name = "RoundedRect" self.addChild(RoundedRect) var TrianglePath = UIBezierPath() TrianglePath.moveToPoint(CGPointMake(0, 0)) TrianglePath.addLineToPoint(CGPointMake(-25, -50)) TrianglePath.addLineToPoint(CGPointMake(25, -50)) TrianglePath.addLineToPoint(CGPointMake(0, 0)) var Triangle = SKShapeNode(path: TrianglePath.CGPath, centered: true) Triangle.position = CGPointMake(200, 70) Triangle.lineWidth = 2 Triangle.strokeColor = SKColor.blackColor() Triangle.fillColor = SKColor.blueColor() Triangle.name = "Triangle" self.addChild(Triangle) } }
SKLabelNode
SKLabelNode-ããã¯ãã·ãŒã³ã«ããã¹ãã衚瀺ã§ããã¹ãã©ã€ãã§ããããã«ãããã¹ãã¯
ããã©ã³ããµã€ãºããã©ã³ãã®è²ããã©ã³ãåã® ãã©ã¡ãŒã¿ãŒã§è¡šç€ºã§ããŸãã
ãã©ã³ãã®é
眮ãåçŽãšæ°Žå¹³ã®äž¡æ¹ã«èª¿æŽããŸãããã ããä»ã§ã¯ãã¹ãŠãèªåã§èŠãããšãã§ããŸãã
Objective-cç®çc -(void)SKLabelNodeDemo { // SKLabelNode . . SKLabelNode *First = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"]; First.position = CGPointMake(280, 200); // . First.fontSize = 25; // . First.fontColor = [SKColor whiteColor]; // . First.color = [SKColor blueColor]; // ( colorBlendFactor). First.colorBlendFactor = 0.5; // colorBlendFactor (0.0 - 1.0) First.text = @"Habra Habr!"; // . First.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeCenter; // . First.name = @"First"; // [self addChild:First]; // . // SKLabelNode . . SKLabelNode *Second = [SKLabelNode labelNodeWithText:@"----"]; Second.fontName = @"Chalkboard SE Bold"; // . Second.fontColor = [SKColor blackColor]; // . Second.position = CGPointMake(280, 50); // . Second.fontSize = 20; // . Second.name = @"Second"; // [self addChild:Second]; // . }
ã¹ã€ããã¹ã€ãã func SKLabelNodeDemo() { // First SKLabelNode. . var First = SKLabelNode(fontNamed: "Chalkduster") First.position = CGPointMake(280, 200) // . First.fontSize = 25; // . First.fontColor = SKColor.whiteColor() // . First.color = SKColor.blueColor() // ( colorBlendFactor). First.colorBlendFactor = 0.5 // colorBlendFactor (0.0 - 1.0) First.text = "Habra Habr!" // . First.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Center // . First.name = "First" // self.addChild(First) // . // Second SKLabelNode. . var Second = SKLabelNode(text: "----") Second.fontName = "Chalkboard SE Bold" // . Second.fontColor = SKColor.blackColor() // . Second.position = CGPointMake(280, 50) // . Second.fontSize = 20 // . Second.name = "Second" // self.addChild(Second) // . }
äžã®ç»åã§ã¯ã2ã€ã®ã¹ãã©ã€ãã衚瀺ãããŠããŸããäœææ¹æ³ãèŠãŠå§ããŸããããFirstãšããååã®æåã®ã¹ãã©ã€ããåæåããããšããã©ã³ãã®ååããã©ã¡ãŒã¿ãŒãšããŠæž¡ããŸããSKLabelNodeã¿ã€ãã®ã¹ãã©ã€ãã¯ãã»ãŒãã¹ãŠã®äž»èŠãªãã©ã³ãããµããŒãããŠããŸãããã®å ŽåãChalkdusterãšããååã®ãã©ã³ããæž¡ããŸãã次ã«ããã¹ãŠã®åºæ¬ããããã£ãæ§æããŸãã⢠fontSize â . . ⢠fontColor â . ⢠color â ( colorBlendFactor). ⢠colorBlendFactor â . color . (0.0 â 1.0). ⢠text â . ⢠horizontalAlignmentMode â . , . |
ãããã®ããããã£ãèšå®ããåŸãã·ãŒã³ã«ãªããžã§ã¯ããè¿œå ããŸããäžã®ç»åã§çµæã確èªã§ããŸãã2çªç®ã®ãªããžã§ã¯ãã®ååã¯Secondã§ããåæåããããšã衚瀺ããããã¹ãããã©ã¡ãŒã¿ãŒãšããŠæž¡ãããã®åŸãä»ã®ãã¹ãŠã®ããããã£ãæ§æããŸããåºæ¬çãªããããã£ã¯ä»¥åã®ã¹ãã©ã€ããšã»ãšãã©åãã§ããããããã§ã«ç¥ã£ãŠããã®ã§ãæéãç¡é§ã«ããã«å
ã«é²ã¿ãŸããObjective-cObjective-c #import @implementation GameScene -(void)didMoveToView:(SKView *)view { [self SceneSetting]; //[self SKSpriteNodeDemo]; //[self SKShapeNodeDemo]; [self SKLabelNodeDemo]; } -(void)SceneSetting { self.backgroundColor = [SKColor orangeColor]; } -(void)SKSpriteNodeDemo { SKTexture *Texture = [SKTexture textureWithImageNamed:@]; SKSpriteNode *BackgroundSprite = [SKSpriteNode spriteNodeWithTexture:Texture]; BackgroundSprite.size = CGSizeMake(640, 320); BackgroundSprite.position = CGPointMake(0, 0); BackgroundSprite.anchorPoint = CGPointMake(0, 0); BackgroundSprite.name = @; [self addChild:BackgroundSprite]; SKSpriteNode *SimpleSprite = [SKSpriteNode spriteNodeWithColor:[UIColor blueColor] size:CGSizeMake(50, 50)]; SimpleSprite.position = CGPointMake(200, 150); SimpleSprite.zPosition = 1; SimpleSprite.name = @; [self addChild:SimpleSprite]; SKSpriteNode *ImageSprite = [SKSpriteNode spriteNodeWithImageNamed:@]; ImageSprite.position = CGPointMake(250, 50); ImageSprite.size = CGSizeMake(100, 15); ImageSprite.name = @; [self addChild:ImageSprite]; } -(void)SKShapeNodeDemo { SKShapeNode *Circle = [SKShapeNode shapeNodeWithCircleOfRadius:20]; Circle.position = CGPointMake(50, 200); Circle.lineWidth = 10; Circle.strokeColor = [SKColor blueColor]; Circle.fillColor = [SKColor redColor]; Circle.name = @; [self addChild:Circle]; SKShapeNode *Quad = [SKShapeNode shapeNodeWithRect:CGRectMake(0, 0, 50, 50)]; Quad.position = CGPointMake(100, 200); Quad.lineWidth = 4; Quad.strokeColor = [SKColor whiteColor]; Quad.fillColor = [SKColor blackColor]; Quad.name = @; [self addChild:Quad]; SKShapeNode *Ellips = [SKShapeNode shapeNodeWithEllipseInRect:CGRectMake(0, 0, 50, 90)]; Ellips.position = CGPointMake(200, 200); Ellips.lineWidth = 2; Ellips.strokeColor = [SKColor greenColor]; Ellips.fillColor = [SKColor purpleColor]; Ellips.glowWidth = 5; Ellips.name = @; [self addChild:Ellips]; UIBezierPath *RoundedRectPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 50, 50) cornerRadius:12]; SKShapeNode *RoundedRect = [ SKShapeNode shapeNodeWithPath:RoundedRectPath.CGPath centered:YES]; RoundedRect.position = CGPointMake(50, 100); RoundedRect.lineWidth = 2; RoundedRect.strokeColor = [SKColor blueColor]; RoundedRect.fillColor = [SKColor redColor]; RoundedRect.name = @; [self addChild:RoundedRect]; UIBezierPath *TrianglePath = [UIBezierPath bezierPath]; [TrianglePath moveToPoint:CGPointMake(0,0)]; [TrianglePath addLineToPoint:CGPointMake(-25, -50)]; [TrianglePath addLineToPoint:CGPointMake(25, -50)]; [TrianglePath addLineToPoint:CGPointMake(0, 0)]; SKShapeNode *Triangle = [SKShapeNode shapeNodeWithPath:TrianglePath.CGPath centered:YES]; Triangle.position = CGPointMake(200, 70); Triangle.lineWidth = 2; Triangle.strokeColor = [SKColor blackColor]; Triangle.fillColor = [SKColor blueColor]; Triangle.name = @; [self addChild:Triangle]; } -(void)SKLabelNodeDemo { SKLabelNode *First = [SKLabelNode labelNodeWithFontNamed:@]; First.position = CGPointMake(280, 200); First.fontSize = 25; First.fontColor = [SKColor whiteColor]; First.color = [SKColor blueColor]; First.colorBlendFactor = 0.5; First.text = @; First.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeCenter; [self addChild:First]; SKLabelNode *Second = [SKLabelNode labelNodeWithText:@]; Second.fontName = @; Second.fontColor = [SKColor blackColor]; Second.position = CGPointMake(280, 50); Second.fontSize = 20; [self addChild:Second]; } @end
ã¹ã€ããã¹ã€ãã import SpriteKit class GameScene: SKScene { override func didMoveToView(view: SKView) { SceneSetting() //SKSpriteNodeDemo() //SKShapeNodeDemo() SKLabelNodeDemo() } func SceneSetting() { self.backgroundColor = SKColor.orangeColor() } func SKSpriteNodeDemo() { var Texture = SKTexture(imageNamed: "desert_BG") var BackgroundSprite = SKSpriteNode(texture: Texture) BackgroundSprite.size = CGSizeMake(640, 320) BackgroundSprite.position = CGPointMake(0, 0) BackgroundSprite.anchorPoint = CGPointMake(0, 0) BackgroundSprite.name = "BackgroundSprite" self.addChild(BackgroundSprite) var SimpleSprite = SKSpriteNode(color: UIColor.blueColor(), size: CGSizeMake(50, 50)) SimpleSprite.position = CGPointMake(200, 150) SimpleSprite.zPosition = 1; SimpleSprite.name = "SimpleSprite" self.addChild(SimpleSprite) var ImageSprite = SKSpriteNode(imageNamed: "DerevoOpora") ImageSprite.position = CGPointMake(250, 50) ImageSprite.size = CGSizeMake(100, 15) ImageSprite.name = "ImageSprite" self.addChild(ImageSprite) } func SKShapeNodeDemo() { var Circle = SKShapeNode(circleOfRadius: 20) Circle.position = CGPointMake(50, 200) Circle.lineWidth = 10 Circle.strokeColor = SKColor.blueColor() Circle.fillColor = SKColor.redColor() Circle.name = "Circle" self.addChild(Circle) var Quad = SKShapeNode(rect: CGRectMake(0, 0, 50, 50)) Quad.position = CGPointMake(100, 200) Quad.lineWidth = 4 Quad.strokeColor = SKColor.whiteColor() Quad.fillColor = SKColor.blackColor() Quad.name = "Quad" self.addChild(Quad) var Ellips = SKShapeNode(ellipseInRect: CGRectMake(0, 0, 50, 90)) Ellips.position = CGPointMake(200, 200) Ellips.lineWidth = 2 Ellips.strokeColor = SKColor.greenColor() Ellips.fillColor = SKColor.purpleColor() Ellips.glowWidth = 5 Ellips.name = "Ellips" self.addChild(Ellips) var RoundedRectPath = UIBezierPath(roundedRect: CGRectMake(0, 0, 50, 50), cornerRadius: 12) var RoundedRect = SKShapeNode(path: RoundedRectPath.CGPath, centered:true) RoundedRect.position = CGPointMake(50, 100) RoundedRect.lineWidth = 2 RoundedRect.strokeColor = SKColor.blueColor() RoundedRect.fillColor = SKColor.redColor() RoundedRect.name = "RoundedRect" self.addChild(RoundedRect) var TrianglePath = UIBezierPath() TrianglePath.moveToPoint(CGPointMake(0, 0)) TrianglePath.addLineToPoint(CGPointMake(-25, -50)) TrianglePath.addLineToPoint(CGPointMake(25, -50)) TrianglePath.addLineToPoint(CGPointMake(0, 0)) var Triangle = SKShapeNode(path: TrianglePath.CGPath, centered: true) Triangle.position = CGPointMake(200, 70) Triangle.lineWidth = 2 Triangle.strokeColor = SKColor.blackColor() Triangle.fillColor = SKColor.blueColor() Triangle.name = "Triangle" self.addChild(Triangle) } func SKLabelNodeDemo() { var First = SKLabelNode(fontNamed: "Chalkduster") First.position = CGPointMake(280, 200) First.fontSize = 25; First.fontColor = SKColor.whiteColor() First.color = SKColor.blueColor() First.colorBlendFactor = 0.5 First.text = "Habra Habr!" First.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Center self.addChild(First) var Second = SKLabelNode(text: "----") Second.fontName = "Chalkboard SE Bold" Second.fontColor = SKColor.blackColor() Second.position = CGPointMake(280, 50) Second.fontSize = 20 self.addChild(Second) } }
ã芧ã®ãšãããSKLabelNodeã¯éåžžã«äœ¿ãããããéåžžã«ã·ã³ãã«ã§ãããããŸãïŒ
!
! , â . â . , ! , ! «» . SKPhysicsBodySKPhysicsBody
SKPhysicsBody-ããã¯åºæ¬çã«ãªããžã§ã¯ãã®æ¬äœã§ããããã¯ç§ãã¡ã®ãªããžã§ã¯ãã®ãã¹ãŠã®åºæ¬çãªç©ççç¹æ§ãæ
ã£ãŠãããããããããã«ç©çç圢æ
ãäžããŠããããããæ©æŠã匟æ§ãæµæã質éãé床ãéå ãªã©ã®ç¹æ§ãæ
ã£ãŠããã®ã¯ããã§ãã圌ã«ã€ããŠãã£ãšè©³ããç¥ããŸãããããã¡ããã圌ã®ããããã£ãã¡ãœããããŸãã¯é¢æ°ããå§ããŸããããç©ä»¶1) dynamic â No, . 2) usesPreciseCollisionDetection â NO. YES, , , , . 3) allowsRotation â NO. YES ! 4) pinned â NO, YES , , . 5) resting â YES, . 6) friction â , . . 7) charge â . . 8) restitution â ( , ) ( 0.1 â 1.0). 0.2. 9) linearDamping â . ( 0.1 â 1.0). 0.1. 10) angularDamping â . ( 0.1 â 1.0). 0.1. 11) density â . 0.1. 12) mass â . 13) area â . 14) affectedByGravity â YES, NO . 15) fieldBitMask â , 16) categoryBitMask â , . 17) collisionBitMask â , . 18) contactTestBitMask â , 19) joints â , . (Joint â , ) 20) node â Node . 21) velocity â . 22) angularVelocity â . |
1) bodyWithCircleOfRadius â r â . 2) bodyWithCircleOfRadius â r â center â , . 3) bodyWithRectangleOfSize â s â . 4) bodyWithRectangleOfSize â s â center â , . 5) bodyWithPolygonFromPath â path â . 6) bodyWithEdgeFromPoint â p1 â p2 â , . 7) bodyWithEdgeChainFromPath â path â , â . 8) bodyWithEdgeLoopFromPath â path â , . 9) bodyWithEdgeLoopFromRect â rect â , . 10) bodyWithTexture â texture â size â . 11) bodyWithTexture â texture â alphaThreshold â size â , alphaThreshold. 12) bodyWithBodies â bodies â . |
1) applyForce â force â . 2) applyForce â force â point â . ( â ) 3) applyTorque â torque â . 4) applyImpulse â impulse â . 5) applyImpulse â impulse â point â . ( â ) 6) applyAngularImpulse â impulse â . 7) allContactedBodies㯠- 身äœãšæ¥è§ŠããŠããç©ççãªäœã®é
åãè¿ããŸãã |
ãã®ãããäžèšã§ã¯SKPhysicsBodyãªããžã§ã¯ãã®ãã¹ãŠã®ã¡ãœãããŸãã¯é¢æ°ãšããããã£ã衚瀺ãããŸããããªããèŠãããšãã§ããããã«ã圌ã¯ãããã®ããã€ããæã£ãŠããŸããäžèšã®ç¹ã®ããã€ãã¯ãããªãã«ã¯æãããããããªãããšãç§ã¯ããã«èšããªããã°ãªããŸããïŒç解ã§ããªããç解ããã®ã¯é£ããã§ããäœããç解ããªããŠãå¿é
ããªãã§ãã ãããããã«ãç§ãã¡ã¯æ°åãæ°åæ€èšããå®éšããŸãïŒããŠãç¶ããŸãããããå§ããåã«äœãããªããã°ãªããŸããïŒç§ãã¡ã®ã®ViewControllerãèŠã€ããŠãç§ãã¡ã«è¿œå ããŠã¿ãŸãããSKViewãã®ããããã£ïŒ
Objective-Cã®ã®
skView.showsPhysics = YES; ã¹ã€ãã
skView.showsPhysics = true
, . , !
|
, SceneSetting, . . Objective-c
self.physicsWorld.gravity = CGVectorMake(0, -1); Swift
self.physicsWorld.gravity = CGVectorMake(0, -1) |
身äœã®ç©çåŠã¯3ã€ã®ã«ããŽãªã«åé¡ã§ããŸãã1ïŒåç-äœã®äœçœ®ãå€æŽã§ãã身äœã2ïŒéç-äœçœ®ãå€æŽã§ããªãããã£ã3ïŒãšããž-äžçš®ã®å¢çç·ããã€ãããã¯ãã€ãããã¯ããã£ã¯ãã¹ããŒãžäžã§äœããåãããããäžç·ã«æŒããããããå Žåã«æé©ã§ããã·ã§ã«ã空é£ã¶ãªããžã§ã¯ãããã¹ãŠã®ã¢ãã¡ãŒã·ã§ã³ãã£ã©ã¯ã¿ãŒãªã©ããããŸãããããã¯è³ªéãšäœç©ãæã¡ãéåã®åœ±é¿ãåããåºæ¬çãªç©ççæ§è³ªã垯ã³ãããšããããŸããéçéçããã£ããããã¯ãã¹ãŠåçãªãã®ãšåããã®ãæã£ãŠããŸãããäž»ãªéãã¯ç§»åã§ããªãããšã§ãïŒãã ããä»ã®ãªããžã§ã¯ãã¯äŸç¶ãšããŠè¡çªããŠçžäºäœçšããããšãã§ããŸããããšãã°ãäžéšã®ãµããŒããå£ã«äœ¿çšããã®ãæé©ã§ããããã¯å€ãã®ã¹ããŒã¹ãå æããŸããEDGEEDGEã¯æ¬è³ªçã«ç©ççãªèº«äœã§ã¯ãªãããã¹ãŠã®çžäºäœçšãèµ·ããå¢çã§ãããããã«ã¯è³ªéãäœç©ããªãã移åã§ããŸããïŒEDGEã¯ããªããžã§ã¯ãã®å
éšãŸãã¯èŠããªãå¢çã«äžç©ºéšåãæäŸããããã«äœ¿çšãããŸãã
äžã®ç»åãèŠãŠã¿ãŸãããã5ã€ã®ãªããžã§ã¯ãã衚瀺ãããŸããç°ãªãã¿ã€ãã®ãªããžã§ã¯ããéžæããŠããããã®éãã確èªã§ããããã«ããŸãããããŠããããããã£ãšè©³ããèŠãŠã¿ãŸãããïŒObjective-cObjective-c -(void)CreatePhysics { // SKShapeNode . (CGRectMake). SKShapeNode *RectanglePhysics = [SKShapeNode shapeNodeWithRect:CGRectMake(-580/2, -10, 580, 20)]; RectanglePhysics.position = CGPointMake(280, 40); // . RectanglePhysics.fillColor = [SKColor whiteColor]; // . RectanglePhysics.name = @"Rectangle"; // . RectanglePhysics.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:RectanglePhysics.frame.size]; // . RectanglePhysics.physicsBody.dynamic = NO; // . [self addChild:RectanglePhysics]; // . // SKShapeNode . . SKShapeNode *CirclePhysics = [SKShapeNode shapeNodeWithCircleOfRadius:40]; CirclePhysics.position = CGPointMake(100, 160); // . CirclePhysics.strokeColor = [SKColor greenColor]; // . CirclePhysics.lineWidth = 5; // . CirclePhysics.name = @"Circle"; // . CirclePhysics.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:40]; // . CirclePhysics.physicsBody.dynamic = YES; // . [self addChild:CirclePhysics]; // . // SKTexture . . SKTexture *Texture = [SKTexture textureWithImageNamed:@"DerevoOpora"]; // SKSpriteNode . SKTexture. SKSpriteNode *TexturePhysics = [SKSpriteNode spriteNodeWithTexture:Texture]; TexturePhysics.position = CGPointMake(200, 180); // . TexturePhysics.size = CGSizeMake(100, 30); // . TexturePhysics.name = @"TexturePhysics"; // . TexturePhysics.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:TexturePhysics.frame.size]; // . TexturePhysics.physicsBody.dynamic = YES; // // . [self addChild: TexturePhysics]; // . UIBezierPath *TrianglePath = [UIBezierPath bezierPath]; // UIBezierPath. [TrianglePath moveToPoint:CGPointMake(0,0)]; // . [TrianglePath addLineToPoint:CGPointMake(-50, -100)]; // . [TrianglePath addLineToPoint:CGPointMake(50, -100)]; // . [TrianglePath addLineToPoint:CGPointMake(0, 0)]; // . // SKShapeNode . . // , CGPath. SKShapeNode *TrianglePhysics = [SKShapeNode shapeNodeWithPath:TrianglePath.CGPath ]; TrianglePhysics.position = CGPointMake(400, 190); // . TrianglePhysics.lineWidth = 2; // . TrianglePhysics.strokeColor = [SKColor blackColor]; // . TrianglePhysics.fillColor = [SKColor blueColor]; // . TrianglePhysics.name = @"Triangle"; // . TrianglePhysics.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:TrianglePath.CGPath]; // . TrianglePhysics.physicsBody.dynamic = YES; // . [self addChild:TrianglePhysics]; // . // SKLabelNode . . SKLabelNode *LabelPhysics = [SKLabelNode labelNodeWithText:@"Xcode"]; LabelPhysics.position = CGPointMake(500, 200); // . LabelPhysics.fontSize = 22; // . LabelPhysics.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(-25, -25, 50, 50)]; // . LabelPhysics.name = @"Label"; // . [self addChild:LabelPhysics]; // . }
ã¹ã€ããã¹ã€ãã func CreatePhysics() { // RectanglePhysics SKShapeNode. // (CGRectMake). var RectanglePhysics = SKShapeNode(rect: CGRectMake(-580/2, -10, 580, 20)) RectanglePhysics.position = CGPointMake(280, 40) // . RectanglePhysics.fillColor = SKColor.whiteColor() // . RectanglePhysics.name = "Rectangle" // . RectanglePhysics.physicsBody = SKPhysicsBody(rectangleOfSize: RectanglePhysics.frame.size) // . RectanglePhysics.physicsBody.dynamic = false // . self.addChild(RectanglePhysics) // . // CirclePhysics SKShapeNode. // . var CirclePhysics = SKShapeNode(circleOfRadius: 40) CirclePhysics.position = CGPointMake(100, 160) // . CirclePhysics.strokeColor = SKColor.greenColor() // . CirclePhysics.lineWidth = 5; // . CirclePhysics.name = "Circle" // . CirclePhysics.physicsBody = SKPhysicsBody(circleOfRadius: 40) // . CirclePhysics.physicsBody.dynamic = true // . self.addChild(CirclePhysics) // . // Texture SKTexture. let Texture = SKTexture(imageNamed: "DerevoOpora") // TexturePhysics SKSpriteNode. // SKTexture . var TexturePhysics = SKSpriteNode(texture: Texture) TexturePhysics.position = CGPointMake(200, 180) // . TexturePhysics.size = CGSizeMake(100, 30) // . TexturePhysics.name = "TexturePhysics" // . TexturePhysics.physicsBody = SKPhysicsBody(rectangleOfSize: TexturePhysics.frame.size) // . TexturePhysics.physicsBody.dynamic = true // . self.addChild(TexturePhysics) // . var TrianglePath = UIBezierPath() // UIBezierPath. TrianglePath.moveToPoint(CGPointMake(0, 0)) // . TrianglePath.addLineToPoint(CGPointMake(-50, -100)) // . TrianglePath.addLineToPoint(CGPointMake(50, -100)) // . TrianglePath.addLineToPoint(CGPointMake(0, 0)) // . // TrianglePhysics SKShapeNode. // // , CGPath. var TrianglePhysics = SKShapeNode(path: TrianglePath.CGPath) TrianglePhysics.position = CGPointMake(400, 190) // . TrianglePhysics.lineWidth = 2 // . TrianglePhysics.strokeColor = SKColor.blackColor() // . TrianglePhysics.fillColor = SKColor.blueColor() // . TrianglePhysics.name = "Triangle" // . TrianglePhysics.physicsBody = SKPhysicsBody(polygonFromPath: TrianglePath.CGPath) // . TrianglePhysics.physicsBody.dynamic = true // . self.addChild(TrianglePhysics) // . // LabelPhysics SKLabelNode. . var LabelPhysics = SKLabelNode(text: "Xcode") LabelPhysics.position = CGPointMake(500, 200) // . LabelPhysics.fontSize = 22; // . LabelPhysics.physicsBody = SKPhysicsBody(edgeLoopFromRect: CGRectMake(-25, -25, 50, 50)) // . LabelPhysics.name = "Label" // . self.addChild(LabelPhysics) // . }
RectanglePhysicsæåã®ãªããžã§ã¯ãã®åå㯠RectanglePhysicsã§ãããã®åºæ¬çãªããããã£ãäœããããæ¢ã«ç¥ã£ãŠããã®ã§ãç§ã¯ãããã«ãã ããããšãªããæ°ããããããã£ã«çŽæ¥è¡ããŸãããã芧ã®ãšãããæåã¯ãªããžã§ã¯ãã® physicsBodyããããã£ãåç
§ããã¿ã€ã SKPhysicsBodyã®ãªããžã§ã¯ããå²ãåœãŠãŸããããã¯ãã¹ãã©ã€ãã«èäœãäžããããã«å¿
èŠã§ããäžã§æžãã SKPhysicsBodyã®ã¡ãœãããŸãã¯é¢æ°ã泚ææ·±ã調ã¹ãå Žåãããããã£ãšããŠæž¡ããªããžã§ã¯ãã¯ã bodyWithRectangleOfSizeã¡ãœãããŸã㯠rectangleOfSizeé¢æ°ãåŒã³åºãããšã§åæåãããããšãããããŸãããããŠããããåæåããããšãã¹ãã©ã€ãã®ãµã€ãºã転éããŸãããã§ã«ãã®äžã«ç§ãã¡ã®èº«äœãæ§ç¯ãããŠããŸããèšåãã䟡å€ã®ããéèŠãªãã€ã³ãã1ã€ãããŸããã¹ãã©ã€ãèªäœã§ã¯ãªãããã®èäœã§ã¿ãããæ¥è§ŠãçºçããŸãïŒãã®å Žåãã¹ãã©ã€ãèªäœãããå°ããããã£ãµã€ãºãæå®ãããšããªããžã§ã¯ããç©çããã£ã«å«ãŸããŠããªãéšåã«è§Šãããšå¥ã®ã¹ãã©ã€ãã貫éããã¹ãã©ã€ããµã€ãºããã倧ããããã£ãµã€ãºãæå®ãããšãã¹ãã©ã€ãã·ã§ã«èªäœã¯æ¥è§ŠããŠããªãããã«èŠããŸããããã³é衚瀺ã®å¢çç·ã以äžã®ç»åã§ã¯ããããã®ã±ãŒã¹ã®äŸã瀺ããŸããïŒ
 |
身äœãèšå®ããåŸãå¥ã®ããããã£ãèšå®ããŸããããã¯dynamicã§ããäžã§æžããããã«ããªããžã§ã¯ãã®ãã€ãããºã ã®åå ãšãªã£ãŠããŸããããã§ã¯è² ã®å€ãå²ãåœãŠãŸããããã¯ããªããžã§ã¯ãã移åã§ããªããªãããšãæå³ããŸããããã¯ããµããŒããµãŒãã§ã¹ãšããŠçæ³çã§ãã
ãµãŒã¯ã«ç©çåŠCirclePhysics . . : SKPhysicsBody bodyWithCircleOfRadius circleOfRadius . dynamic , , . , , !
|
TexturePhysicsTexturePhysics . , . , , dynamic , ! |
TrianglePhysics, TrianglePhysics . , UIBezierPath . , SKPhysicsBody . polygonFromPath bodyWithPolygonFromPath . (-) ? UIBezierPath TrianglePath . ! |
LabelPhysicsLabelPhysics . , SKPhysicsBody , bodyWithEdgeLoopFromRect edgeLoopFromRect . 圌ãã¯äœãããŠããŸããïŒ , (CGRectMake) (EDGE). . , showsPhysics , . , ! EDGE, , . . , . , ; EDGE.
|
ããã€ãã®ç©ççç¹æ§ã®æ¯èŒãããŠãå人ãããªãããããŠç§ã¯ç§ãã¡ã®ãªããžã§ã¯ãã®ããã«ç©ççããã£ãäœæããæ¹æ³ãåŠã³ãŸããããããŠä»ãç©ççç¹æ§ãèŠãæã§ãã以äžã®ãããªã§ã¯ãããã€ãã®ç©ççç¹æ§ã®æ¯èŒã確èªã§ããŸããæåã«èŠãããã«ãåããµã€ãºã§åãé«ãã®2ã€ã®ããŒã«ãèœã¡ãŸããèœäžãããšãäžæ¹ã¯è·³ãè¿ããããäžæ¹ã¯è·³ãè¿ããŸãããåããµã€ãºã®2ã€ã®æ£æ¹åœ¢ã衚瀺ãããŸãããããã¯åãé«ãããèœã¡ãŸããããã§ã«åŸæããè¡šé¢ã«ãããŸããçæ¹ã¯ã¹ã©ã€ãããŠè»¢åããããäžæ¹ã¯éã«ããã«åæ¢ããŸããããã¯ãã¹ãŠãããã€ãã®ç©ççç¹æ§ã®ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã§ããã³ãŒãã«ãŸã£ããé²ãã§ãã ããïŒããã§ã¯ãã³ãŒããèŠãŠã¿ãŸãããïŒObjective-cObjective-c -(void)PhysicsProperties { float RotateAngle = 10 * (2 * M_PI)/360; SKShapeNode *Opora1 = [SKShapeNode shapeNodeWithRect:CGRectMake(-150/2, -10, 150, 20)]; Opora1.position = CGPointMake(100, 200); Opora1.strokeColor = [SKColor greenColor]; Opora1.fillColor = [SKColor greenColor]; Opora1.name = @"Opora1"; Opora1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Opora1.frame.size]; Opora1.physicsBody.dynamic = NO; Opora1.zRotation = -RotateAngle; [self addChild:Opora1]; SKShapeNode *Opora2 = [SKShapeNode shapeNodeWithRect:CGRectMake(-150/2, -10, 150, 20)]; Opora2.position = CGPointMake(468, 200); Opora2.strokeColor = [SKColor redColor]; Opora2.fillColor = [SKColor redColor]; Opora2.name = @"Opora2"; Opora2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Opora2.frame.size]; Opora2.physicsBody.dynamic = NO; Opora2.zRotation = RotateAngle; [self addChild:Opora2]; SKShapeNode *Opora3 = [SKShapeNode shapeNodeWithRect:CGRectMake(-568/2, -10, 568, 20)]; Opora3.position = CGPointMake(568/2, 10); Opora3.strokeColor = [SKColor yellowColor]; Opora3.fillColor = [SKColor yellowColor]; Opora3.name = @"Opora3"; Opora3.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Opora3.frame.size]; Opora3.physicsBody.dynamic = NO; [self addChild:Opora3]; SKShapeNode *Circle1 = [SKShapeNode shapeNodeWithCircleOfRadius:15]; Circle1.position = CGPointMake(250, 280); Circle1.strokeColor = [SKColor whiteColor]; Circle1.fillColor = [SKColor blackColor]; Circle1.name = @"Circle1"; Circle1.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:15]; Circle1.physicsBody.restitution = 0; [self addChild:Circle1]; SKShapeNode *Circle2 = [SKShapeNode shapeNodeWithCircleOfRadius:15]; Circle2.position = CGPointMake(310, 280); Circle2.strokeColor = [SKColor whiteColor]; Circle2.fillColor = [SKColor purpleColor]; Circle2.name = @"Circle2"; Circle2.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:15]; Circle2.physicsBody.restitution = 0.7; [self addChild:Circle2]; SKShapeNode *Quad1 = [SKShapeNode shapeNodeWithRect:CGRectMake(-30/2, -30/2, 30, 30)]; Quad1.position = CGPointMake(50, 320); Quad1.strokeColor = [SKColor whiteColor]; Quad1.fillColor = [SKColor whiteColor]; Quad1.name = @"Quad1"; Quad1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Quad1.frame.size]; Quad1.physicsBody.friction = 1; [self addChild:Quad1]; SKShapeNode *Quad2 = [SKShapeNode shapeNodeWithRect:CGRectMake(-30/2, -30/2, 30, 30)]; Quad2.position = CGPointMake(518, 320); Quad2.strokeColor = [SKColor blackColor]; Quad2.fillColor = [SKColor blackColor]; Quad2.name = @"Quad2"; Quad2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Quad2.frame.size]; Quad2.physicsBody.friction = 0.1; [self addChild:Quad2]; }
ã¹ã€ããã¹ã€ãã func PhysicsProperties() { let RotateAngle = 10 * (2 * M_PI)/360 var Opora1 = SKShapeNode(rect: CGRectMake(-150/2, -10, 150, 20)) Opora1.position = CGPointMake(100, 200) Opora1.strokeColor = SKColor.greenColor() Opora1.fillColor = SKColor.greenColor() Opora1.name = "Opora1" Opora1.physicsBody = SKPhysicsBody(rectangleOfSize: Opora1.frame.size) Opora1.physicsBody.dynamic = false Opora1.zRotation = Float(-RotateAngle) self.addChild(Opora1) var Opora2 = SKShapeNode(rect: CGRectMake(-150/2, -10, 150, 20)) Opora2.position = CGPointMake(468, 200) Opora2.strokeColor = SKColor.redColor() Opora2.fillColor = SKColor.redColor() Opora2.name = "Opora2" Opora2.physicsBody = SKPhysicsBody(rectangleOfSize: Opora2.frame.size) Opora2.physicsBody.dynamic = false Opora2.zRotation = Float(RotateAngle) self.addChild(Opora2) var Opora3 = SKShapeNode(rect:CGRectMake (-568/2, -10, 568, 20)) Opora3.position = CGPointMake(568/2, 10) Opora3.strokeColor = SKColor.yellowColor() Opora3.fillColor = SKColor.yellowColor() Opora3.name = "Opora3" Opora3.physicsBody = SKPhysicsBody(rectangleOfSize: Opora3.frame.size) Opora3.physicsBody.dynamic = false self.addChild(Opora3) var Circle1 = SKShapeNode(circleOfRadius: 15) Circle1.position = CGPointMake(250, 280) Circle1.strokeColor = SKColor.whiteColor() Circle1.fillColor = SKColor.blackColor() Circle1.name = "Circle1" Circle1.physicsBody = SKPhysicsBody(circleOfRadius: 15) Circle1.physicsBody.restitution = 0 self.addChild(Circle1) var Circle2 = SKShapeNode(circleOfRadius: 15) Circle2.position = CGPointMake(310, 280) Circle2.strokeColor = SKColor.whiteColor() Circle2.fillColor = SKColor.purpleColor() Circle2.name = "Circle2" Circle2.physicsBody = SKPhysicsBody(circleOfRadius: 15) Circle2.physicsBody.restitution = 0.7 self.addChild(Circle2) var Quad1 = SKShapeNode(rect: CGRectMake (-30/2, -30/2, 30, 30)) Quad1.position = CGPointMake(50, 320) Quad1.strokeColor = SKColor.whiteColor() Quad1.fillColor = SKColor.whiteColor() Quad1.name = "Quad1" Quad1.physicsBody = SKPhysicsBody(rectangleOfSize: Quad1.frame.size) Quad1.physicsBody.friction = 1 self.addChild(Quad1) var Quad2 = SKShapeNode(rect: CGRectMake (-30/2, -30/2, 30, 30)) Quad2.position = CGPointMake(518, 320) Quad2.strokeColor = SKColor.blackColor() Quad2.fillColor = SKColor.blackColor() Quad2.name = "Quad2" Quad2.physicsBody = SKPhysicsBody(rectangleOfSize: Quad2.frame.size) Quad2.physicsBody.friction = 0.1 self.addChild(Quad2) }
åãã«ãç§ã¯åã®2ã€ã®ãªããžã§ã¯ããäœæSKShapeNodeååã§ãOpora1ãšOpora2ãããããªã§ã¯ããããã¯ããããç·ãšèµ€ã®åŸæãããªããžã§ã¯ãã§ããäžã§æžããzRotationããããã£ãé€ããŠããããã®äœæã«ç°åžžãªãã®ã¯ãããŸããããä»ã®ãšãã䜿çšããŠããŸãããèŠããŠãããšããïŒzRotation-ãªã€ã©ãŒã®è§ã§ããŒãã®å転ã決å®ããŸãã |
zRotationããããã£ã¯ãã©ãžã¢ã³åäœã§å€ãåããŸãïŒãããã£ãŠããªããžã§ã¯ããç¹å®ã®è§åºŠã§å転ãããã«ã¯ããŸããã®è§åºŠãã©ãžã¢ã³ã«å€æããå¿
èŠããããŸããããã¯éåžžã«ç°¡åã«è¡ãããŸãïŒObjective-cRotateAngleãšããfloatåã®å€æ°ãäœæããŸã
float RotateAngle = 10 * (2 * M_PI)/360; 10, . 60 , :
float RotateAngle = 60 * (2 * M_PI)/360; zRotation : Opora1.zRotation = -RotateAngle;
|
Swiftlet RotateAngle
let RotateAngle = 10 * (2 * M_PI)/360 Objective-c , float
Opora1.zRotation = Float(-RotateAngle) |
ã芧ã®ãšããããªããžã§ã¯ããå転ãããã®ã«è€éãªããšã¯ãããŸããïŒæ¬¡ã«ãäžçªäžãé»è²ã®Opora3ãšããååã®å¥ã®ãªããžã§ã¯ããäœæããŸããããã®ãªããžã§ã¯ããäœæããã®ã«ãç°åžžã¯ãªããããå
ã«é²ã¿ãŸãããããŠãããã«2ã€ã®ãªããžã§ã¯ãããããŸããååã¯Circle1ãšCircle2ã®åã§ãããããã®æ§é ã§ã¯ããããã¯äºãã«éåžžã«äŒŒãŠããŸãããç©ççç¹æ§ã«éãããããŸãããããã®ç©ççãªåœ¢åŒã¯ãŸã£ããåãã§ãããããããã£ã¯ç°ãªããŸããæãåºãããã«ååã®åçºãæã€ããããã£ã¯ä»¥äžãå®çŸ©ããŸãã埩å
- è¡çªã§äœã倱ããšãã«ã®ãŒã®éïŒè¡çªã§äœãè·³ããéïŒ ã決å®ããŸãïŒ0.1ã1.0ã®å€ãåããŸãïŒãããã©ã«ãã¯0.2ã§ãã |
ãããã£ãŠãCircle1ãšããååã®ãªããžã§ã¯ãã§ã¯å€ãã0ãã«èšå®ããCircle2ãšããååã®å¥ã®ãªããžã§ã¯ãã§ã¯å€ã1ãã«èšå®ããŸãããã®ããããã£ã®å€ãå€æŽãããšãä»ã®ãªããžã§ã¯ããšã®è¡çªã«ããããªããžã§ã¯ãã®åäœã«åœ±é¿ããŸãããããªã§èŠãããšãã§ããããã«ã2ã€ã®ããŒã«ã®1ã€ãèœäžãããšè·³ãè¿ãããã1ã€ã®ããŒã«ã¯åããªãç¶æ
ã«ãªããŸããããã¯ãã¹ãŠããã®ããããã£ã®ã¢ã¯ã·ã§ã³ã®çµæã§ããå¥ã®äŸã§ã¯ãQuad1ããã³Quad2ãšããååã®2ã€ã®ä»ã®ãªããžã§ã¯ãã芳å¯ã§ããŸãããããã¯åœ¢ãæ£æ¹åœ¢ã§ãããæ©æŠãšããååã®ç©ççæ§è³ªãé€ããŠãã¹ãŠã§åãã§ããæ©æŠ - ããã£ã®è¡šé¢ã®ç²ãã決å®ããŸãã身äœãšæ¥è§Šããæ©æŠåã®èšç®ã«äœ¿çšãããŸãã |
1ã€ã®ãªããžã§ã¯ãã§ã¯ãã®å€ã¯ã1ãããã1ã€ã®ãªããžã§ã¯ãã§ã¯ã0.1ãã§ããããã®çµæã1ã€ã®æ£æ¹åœ¢ã¯è¡šé¢äžã§ã»ãšãã©ã¹ãªããããããã1ã€ã¯è¡šé¢å
šäœãã¹ãªããããŠèœäžããŸããObjective-cãããžã§ã¯ãã®å®å
šãªã³ãŒãObjective-c #import @implementation GameScene -(void)didMoveToView:(SKView *)view { [self SceneSetting]; //[self SKSpriteNodeDemo]; //[self SKShapeNodeDemo]; //[self SKLabelNodeDemo]; //[self CreatePhysics]; [self PhysicsProperties]; } -(void)SceneSetting { self.backgroundColor = [SKColor orangeColor]; self.physicsWorld.gravity = CGVectorMake(0, -1); } -(void)PhysicsProperties { float RotateAngle = 10 * (2 * M_PI)/360; SKShapeNode *Opora1 = [SKShapeNode shapeNodeWithRect:CGRectMake(-150/2, -10, 150, 20)]; Opora1.position = CGPointMake(100, 200); Opora1.strokeColor = [SKColor greenColor]; Opora1.fillColor = [SKColor greenColor]; Opora1.name = @; Opora1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Opora1.frame.size]; Opora1.physicsBody.dynamic = NO; Opora1.zRotation = -RotateAngle; [self addChild:Opora1]; SKShapeNode *Opora2 = [SKShapeNode shapeNodeWithRect:CGRectMake(-150/2, -10, 150, 20)]; Opora2.position = CGPointMake(468, 200); Opora2.strokeColor = [SKColor redColor]; Opora2.fillColor = [SKColor redColor]; Opora2.name = @; Opora2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Opora2.frame.size]; Opora2.physicsBody.dynamic = NO; Opora2.zRotation = RotateAngle; [self addChild:Opora2]; SKShapeNode *Opora3 = [SKShapeNode shapeNodeWithRect:CGRectMake(-568/2, -10, 568, 20)]; Opora3.position = CGPointMake(568/2, 10); Opora3.strokeColor = [SKColor yellowColor]; Opora3.fillColor = [SKColor yellowColor]; Opora3.name = @; Opora3.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Opora3.frame.size]; Opora3.physicsBody.dynamic = NO; [self addChild:Opora3]; SKShapeNode *Circle1 = [SKShapeNode shapeNodeWithCircleOfRadius:15]; Circle1.position = CGPointMake(250, 280); Circle1.strokeColor = [SKColor whiteColor]; Circle1.fillColor = [SKColor blackColor]; Circle1.name = @; Circle1.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:15]; Circle1.physicsBody.restitution = 0; [self addChild:Circle1]; SKShapeNode *Circle2 = [SKShapeNode shapeNodeWithCircleOfRadius:15]; Circle2.position = CGPointMake(310, 280); Circle2.strokeColor = [SKColor whiteColor]; Circle2.fillColor = [SKColor purpleColor]; Circle2.name = @; Circle2.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:15]; Circle2.physicsBody.restitution = 0.7; [self addChild:Circle2]; SKShapeNode *Quad1 = [SKShapeNode shapeNodeWithRect:CGRectMake(-30/2, -30/2, 30, 30)]; Quad1.position = CGPointMake(50, 320); Quad1.strokeColor = [SKColor whiteColor]; Quad1.fillColor = [SKColor whiteColor]; Quad1.name = @; Quad1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Quad1.frame.size]; Quad1.physicsBody.friction = 1; [self addChild:Quad1]; SKShapeNode *Quad2 = [SKShapeNode shapeNodeWithRect:CGRectMake(-30/2, -30/2, 30, 30)]; Quad2.position = CGPointMake(518, 320); Quad2.strokeColor = [SKColor blackColor]; Quad2.fillColor = [SKColor blackColor]; Quad2.name = @; Quad2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:Quad2.frame.size]; Quad2.physicsBody.friction = 0.1; [self addChild:Quad2]; } -(void)CreatePhysics { SKShapeNode *RectanglePhysics = [SKShapeNode shapeNodeWithRect:CGRectMake(-580/2, -10, 580, 20)]; RectanglePhysics.position = CGPointMake(280, 40); RectanglePhysics.fillColor = [SKColor whiteColor]; RectanglePhysics.name = @; RectanglePhysics.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:RectanglePhysics.frame.size]; RectanglePhysics.physicsBody.dynamic = NO; [self addChild:RectanglePhysics]; SKShapeNode *CirclePhysics = [SKShapeNode shapeNodeWithCircleOfRadius:40]; CirclePhysics.position = CGPointMake(100, 160); CirclePhysics.strokeColor = [SKColor greenColor]; CirclePhysics.lineWidth = 5; CirclePhysics.name = @; CirclePhysics.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:40]; CirclePhysics.physicsBody.dynamic = YES; [self addChild:CirclePhysics]; SKTexture *Texture = [SKTexture textureWithImageNamed:@]; SKSpriteNode *TexturePhysics = [SKSpriteNode spriteNodeWithTexture:Texture]; TexturePhysics.position = CGPointMake(200, 180); TexturePhysics.size = CGSizeMake(100, 30); TexturePhysics.name = @; TexturePhysics.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:TexturePhysics.frame.size]; TexturePhysics.physicsBody.dynamic = YES; [self addChild: TexturePhysics]; UIBezierPath *TrianglePath = [UIBezierPath bezierPath]; [TrianglePath moveToPoint:CGPointMake(0,0)]; [TrianglePath addLineToPoint:CGPointMake(-50, -100)]; [TrianglePath addLineToPoint:CGPointMake(50, -100)]; [TrianglePath addLineToPoint:CGPointMake(0, 0)]; SKShapeNode *TrianglePhysics = [SKShapeNode shapeNodeWithPath:TrianglePath.CGPath ]; TrianglePhysics.position = CGPointMake(400, 190); TrianglePhysics.lineWidth = 2; TrianglePhysics.strokeColor = [SKColor blackColor]; TrianglePhysics.fillColor = [SKColor blueColor]; TrianglePhysics.name = @; TrianglePhysics.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:TrianglePath.CGPath]; TrianglePhysics.physicsBody.dynamic = YES; [self addChild:TrianglePhysics]; SKLabelNode *LabelPhysics = [SKLabelNode labelNodeWithText:@]; LabelPhysics.position = CGPointMake(500, 200); LabelPhysics.fontSize = 22; LabelPhysics.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(-25, -25, 50, 50)]; LabelPhysics.name = @; [self addChild:LabelPhysics]; } -(void)SKSpriteNodeDemo { SKTexture *Texture = [SKTexture textureWithImageNamed:@]; SKSpriteNode *BackgroundSprite = [SKSpriteNode spriteNodeWithTexture:Texture]; BackgroundSprite.size = CGSizeMake(640, 320); BackgroundSprite.position = CGPointMake(0, 0); BackgroundSprite.anchorPoint = CGPointMake(0, 0); BackgroundSprite.name = @; [self addChild:BackgroundSprite]; SKSpriteNode *SimpleSprite = [SKSpriteNode spriteNodeWithColor:[UIColor blueColor] size:CGSizeMake(50, 50)]; SimpleSprite.position = CGPointMake(200, 150); SimpleSprite.zPosition = 1; SimpleSprite.name = @; [self addChild:SimpleSprite]; SKSpriteNode *ImageSprite = [SKSpriteNode spriteNodeWithImageNamed:@]; ImageSprite.position = CGPointMake(250, 50); ImageSprite.size = CGSizeMake(100, 15); ImageSprite.name = @; [self addChild:ImageSprite]; } -(void)SKShapeNodeDemo { SKShapeNode *Circle = [SKShapeNode shapeNodeWithCircleOfRadius:20]; Circle.position = CGPointMake(50, 200); Circle.lineWidth = 10; Circle.strokeColor = [SKColor blueColor]; Circle.fillColor = [SKColor redColor]; Circle.name = @; [self addChild:Circle]; SKShapeNode *Quad = [SKShapeNode shapeNodeWithRect:CGRectMake(0, 0, 50, 50)]; Quad.position = CGPointMake(100, 200); Quad.lineWidth = 4; Quad.strokeColor = [SKColor whiteColor]; Quad.fillColor = [SKColor blackColor]; Quad.name = @; [self addChild:Quad]; SKShapeNode *Ellips = [SKShapeNode shapeNodeWithEllipseInRect:CGRectMake(0, 0, 50, 90)]; Ellips.position = CGPointMake(200, 200); Ellips.lineWidth = 2; Ellips.strokeColor = [SKColor greenColor]; Ellips.fillColor = [SKColor purpleColor]; Ellips.glowWidth = 5; Ellips.name = @; [self addChild:Ellips]; UIBezierPath *RoundedRectPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 50, 50) cornerRadius:12]; SKShapeNode *RoundedRect = [ SKShapeNode shapeNodeWithPath:RoundedRectPath.CGPath centered:YES]; RoundedRect.position = CGPointMake(50, 100); RoundedRect.lineWidth = 2; RoundedRect.strokeColor = [SKColor blueColor]; RoundedRect.fillColor = [SKColor redColor]; RoundedRect.name = @; [self addChild:RoundedRect]; UIBezierPath *TrianglePath = [UIBezierPath bezierPath]; [TrianglePath moveToPoint:CGPointMake(0,0)]; [TrianglePath addLineToPoint:CGPointMake(-25, -50)]; [TrianglePath addLineToPoint:CGPointMake(25, -50)]; [TrianglePath addLineToPoint:CGPointMake(0, 0)]; SKShapeNode *Triangle = [SKShapeNode shapeNodeWithPath:TrianglePath.CGPath centered:YES]; Triangle.position = CGPointMake(200, 70); Triangle.lineWidth = 2; Triangle.strokeColor = [SKColor blackColor]; Triangle.fillColor = [SKColor blueColor]; Triangle.name = @; [self addChild:Triangle]; } -(void)SKLabelNodeDemo { SKLabelNode *First = [SKLabelNode labelNodeWithFontNamed:@]; First.position = CGPointMake(280, 200); First.fontSize = 25; First.fontColor = [SKColor whiteColor]; First.color = [SKColor blueColor]; First.colorBlendFactor = 0.5; First.text = @; First.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeCenter; [self addChild:First]; SKLabelNode *Second = [SKLabelNode labelNodeWithText:@]; Second.fontName = @; Second.fontColor = [SKColor blackColor]; Second.position = CGPointMake(280, 50); Second.fontSize = 20; [self addChild:Second]; } @end
ã¹ã€ããã¹ã€ãã import SpriteKit class GameScene: SKScene { override func didMoveToView(view: SKView) { SceneSetting() //SKSpriteNodeDemo() //SKShapeNodeDemo() //SKLabelNodeDemo() //CreatePhysics() PhysicsProperties() } func SceneSetting() { self.backgroundColor = SKColor.orangeColor() self.physicsWorld.gravity = CGVectorMake(0, -1); } func PhysicsProperties() { let RotateAngle = 10 * (2 * M_PI)/360 var Opora1 = SKShapeNode(rect: CGRectMake(-150/2, -10, 150, 20)) Opora1.position = CGPointMake(100, 200) Opora1.strokeColor = SKColor.greenColor() Opora1.fillColor = SKColor.greenColor() Opora1.name = "Opora1" Opora1.physicsBody = SKPhysicsBody(rectangleOfSize: Opora1.frame.size) Opora1.physicsBody.dynamic = false Opora1.zRotation = Float(-RotateAngle) self.addChild(Opora1) var Opora2 = SKShapeNode(rect: CGRectMake(-150/2, -10, 150, 20)) Opora2.position = CGPointMake(468, 200) Opora2.strokeColor = SKColor.redColor() Opora2.fillColor = SKColor.redColor() Opora2.name = "Opora2" Opora2.physicsBody = SKPhysicsBody(rectangleOfSize: Opora2.frame.size) Opora2.physicsBody.dynamic = false Opora2.zRotation = Float(RotateAngle) self.addChild(Opora2) var Opora3 = SKShapeNode(rect:CGRectMake (-568/2, -10, 568, 20)) Opora3.position = CGPointMake(568/2, 10) Opora3.strokeColor = SKColor.yellowColor() Opora3.fillColor = SKColor.yellowColor() Opora3.name = "Opora3" Opora3.physicsBody = SKPhysicsBody(rectangleOfSize: Opora3.frame.size) Opora3.physicsBody.dynamic = false self.addChild(Opora3) var Circle1 = SKShapeNode(circleOfRadius: 15) Circle1.position = CGPointMake(250, 280) Circle1.strokeColor = SKColor.whiteColor() Circle1.fillColor = SKColor.blackColor() Circle1.name = "Circle1" Circle1.physicsBody = SKPhysicsBody(circleOfRadius: 15) Circle1.physicsBody.restitution = 0 self.addChild(Circle1) var Circle2 = SKShapeNode(circleOfRadius: 15) Circle2.position = CGPointMake(310, 280) Circle2.strokeColor = SKColor.whiteColor() Circle2.fillColor = SKColor.purpleColor() Circle2.name = "Circle2" Circle2.physicsBody = SKPhysicsBody(circleOfRadius: 15) Circle2.physicsBody.restitution = 0.7 self.addChild(Circle2) var Quad1 = SKShapeNode(rect: CGRectMake (-30/2, -30/2, 30, 30)) Quad1.position = CGPointMake(50, 320) Quad1.strokeColor = SKColor.whiteColor() Quad1.fillColor = SKColor.whiteColor() Quad1.name = "Quad1" Quad1.physicsBody = SKPhysicsBody(rectangleOfSize: Quad1.frame.size) Quad1.physicsBody.friction = 1 self.addChild(Quad1) var Quad2 = SKShapeNode(rect: CGRectMake (-30/2, -30/2, 30, 30)) Quad2.position = CGPointMake(518, 320) Quad2.strokeColor = SKColor.blackColor() Quad2.fillColor = SKColor.blackColor() Quad2.name = "Quad2" Quad2.physicsBody = SKPhysicsBody(rectangleOfSize: Quad2.frame.size) Quad2.physicsBody.friction = 0.1 self.addChild(Quad2) } func CreatePhysics() { var RectanglePhysics = SKShapeNode(rect: CGRectMake(-580/2, -10, 580, 20)) RectanglePhysics.position = CGPointMake(280, 40) RectanglePhysics.fillColor = SKColor.whiteColor() RectanglePhysics.name = "Rectangle" RectanglePhysics.physicsBody = SKPhysicsBody(rectangleOfSize: RectanglePhysics.frame.size) RectanglePhysics.physicsBody.dynamic = false self.addChild(RectanglePhysics) var CirclePhysics = SKShapeNode(circleOfRadius: 40) CirclePhysics.position = CGPointMake(100, 160) CirclePhysics.strokeColor = SKColor.greenColor() CirclePhysics.lineWidth = 5; CirclePhysics.name = "Circle" CirclePhysics.physicsBody = SKPhysicsBody(circleOfRadius: 40) CirclePhysics.physicsBody.dynamic = true self.addChild(CirclePhysics) let Texture = SKTexture(imageNamed: "DerevoOpora") var TexturePhysics = SKSpriteNode(texture: Texture) TexturePhysics.position = CGPointMake(200, 180) TexturePhysics.size = CGSizeMake(100, 30) TexturePhysics.name = "TexturePhysics" TexturePhysics.physicsBody = SKPhysicsBody(rectangleOfSize: TexturePhysics.frame.size) TexturePhysics.physicsBody.dynamic = true self.addChild(TexturePhysics) var TrianglePath = UIBezierPath() TrianglePath.moveToPoint(CGPointMake(0, 0)) TrianglePath.addLineToPoint(CGPointMake(-50, -100)) TrianglePath.addLineToPoint(CGPointMake(50, -100)) TrianglePath.addLineToPoint(CGPointMake(0, 0)) var TrianglePhysics = SKShapeNode(path: TrianglePath.CGPath) TrianglePhysics.position = CGPointMake(400, 190) TrianglePhysics.lineWidth = 2 TrianglePhysics.strokeColor = SKColor.blackColor() TrianglePhysics.fillColor = SKColor.blueColor() TrianglePhysics.name = "Triangle" TrianglePhysics.physicsBody = SKPhysicsBody(polygonFromPath: TrianglePath.CGPath) TrianglePhysics.physicsBody.dynamic = true self.addChild(TrianglePhysics) var LabelPhysics = SKLabelNode(text: "Xcode") LabelPhysics.position = CGPointMake(500, 200) LabelPhysics.fontSize = 22; LabelPhysics.physicsBody = SKPhysicsBody(edgeLoopFromRect: CGRectMake(-25, -25, 50, 50)) LabelPhysics.name = "Label" self.addChild(LabelPhysics) } func SKSpriteNodeDemo() { var Texture = SKTexture(imageNamed: "desert_BG") var BackgroundSprite = SKSpriteNode(texture: Texture) BackgroundSprite.size = CGSizeMake(640, 320) BackgroundSprite.position = CGPointMake(0, 0) BackgroundSprite.anchorPoint = CGPointMake(0, 0) BackgroundSprite.name = "BackgroundSprite" self.addChild(BackgroundSprite) var SimpleSprite = SKSpriteNode(color: UIColor.blueColor(), size: CGSizeMake(50, 50)) SimpleSprite.position = CGPointMake(200, 150) SimpleSprite.zPosition = 1; SimpleSprite.name = "SimpleSprite" self.addChild(SimpleSprite) var ImageSprite = SKSpriteNode(imageNamed: "DerevoOpora") ImageSprite.position = CGPointMake(250, 50) ImageSprite.size = CGSizeMake(100, 15) ImageSprite.name = "ImageSprite" self.addChild(ImageSprite) } func SKShapeNodeDemo() { var Circle = SKShapeNode(circleOfRadius: 20) Circle.position = CGPointMake(50, 200) Circle.lineWidth = 10 Circle.strokeColor = SKColor.blueColor() Circle.fillColor = SKColor.redColor() Circle.name = "Circle" self.addChild(Circle) var Quad = SKShapeNode(rect: CGRectMake(0, 0, 50, 50)) Quad.position = CGPointMake(100, 200) Quad.lineWidth = 4 Quad.strokeColor = SKColor.whiteColor() Quad.fillColor = SKColor.blackColor() Quad.name = "Quad" self.addChild(Quad) var Ellips = SKShapeNode(ellipseInRect: CGRectMake(0, 0, 50, 90)) Ellips.position = CGPointMake(200, 200) Ellips.lineWidth = 2 Ellips.strokeColor = SKColor.greenColor() Ellips.fillColor = SKColor.purpleColor() Ellips.glowWidth = 5 Ellips.name = "Ellips" self.addChild(Ellips) var RoundedRectPath = UIBezierPath(roundedRect: CGRectMake(0, 0, 50, 50), cornerRadius: 12) var RoundedRect = SKShapeNode(path: RoundedRectPath.CGPath, centered:true) RoundedRect.position = CGPointMake(50, 100) RoundedRect.lineWidth = 2 RoundedRect.strokeColor = SKColor.blueColor() RoundedRect.fillColor = SKColor.redColor() RoundedRect.name = "RoundedRect" self.addChild(RoundedRect) var TrianglePath = UIBezierPath() TrianglePath.moveToPoint(CGPointMake(0, 0)) TrianglePath.addLineToPoint(CGPointMake(-25, -50)) TrianglePath.addLineToPoint(CGPointMake(25, -50)) TrianglePath.addLineToPoint(CGPointMake(0, 0)) var Triangle = SKShapeNode(path: TrianglePath.CGPath, centered: true) Triangle.position = CGPointMake(200, 70) Triangle.lineWidth = 2 Triangle.strokeColor = SKColor.blackColor() Triangle.fillColor = SKColor.blueColor() Triangle.name = "Triangle" self.addChild(Triangle) } func SKLabelNodeDemo() { var First = SKLabelNode(fontNamed: "Chalkduster") First.position = CGPointMake(280, 200) First.fontSize = 25; First.fontColor = SKColor.whiteColor() First.color = SKColor.blueColor() First.colorBlendFactor = 0.5 First.text = "Habra Habr!" First.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Center self.addChild(First) var Second = SKLabelNode(text: "----") Second.fontName = "Chalkboard SE Bold" Second.fontColor = SKColor.blackColor() Second.position = CGPointMake(280, 50) Second.fontSize = 20 self.addChild(Second) } }
, . : , . , , . SpriteKit , . , .
ããŠãå人ãããã§ç§ã¯åæ¢ããç§ãäžã§æžãããã¹ãŠãç解ã§ããããã«ããããšæããŸãããæ°ã¥ããããããŸããããSpriteKitã¯éåžžã«åŒ·åãªãšã³ãžã³ã§ããã¢ããã«ã®ã¹ãã·ã£ãªã¹ãããã¹ããå°œãããŸããããã¡ãããcocos2dã«ååšãããããªæ©èœã¯ãŸã ãããŸããããSpriteKitã¯åœŒããããã£ãšè¥ãã圌ã¯ãŸã å
ãè¡ã£ãŠãããšæããŸãïŒãã®èšäºãæžããŠããéãç§ã¯ç°¡åãªããºã«ã²ãŒã ãäœæããŠãSpriteKitã®æ©èœã®ããã€ãã瀺ããŸãããæ®å¿µãªãããç§ãå¶åŸ¡ã§ããªãäœããã®çç±ã§ãçŸæç¹ã§ã¯åœŒå¥³ã®ã¹ããŒã¿ã¹ãç¡æã«å€æŽããããšã¯ã§ããŸãããããããæ°ããããŒããæžãããšã§ããã®ã²ãŒã ã®å®å
šãªã³ãŒããGitHubã§å
¬éããããšããçŽæããŸã ã
ã²ãŒã 㯠次ã®ããã«åŒã°ããŸãïŒSoul ShiftïŒNext Generation
ã¢ããªã±ãŒã·ã§ã³ã®äœæãåŠãã§ãã人ã®ããã«ãObjective-cããã³Swiftèšèªã®éåžžã«åªãããããªãã¥ãŒããªã¢ã«ããããŸãããããã¯Alexãšããååã®ç·ã«ãã£ãŠäœæãããŸãã圌ã¯habrahabrïŒezekiã«ããŸããåãããªã§ã圌ã¯èšèªã®äž»èŠãªåŽé¢ãéåžžã«æ³šææ·±ãåæãããããæ確ã«ç€ºããŠããŸãããããã®ã¬ãã¹ã³ã¯ãåå¿è
ãšæ¢ã«iOSåãã«ç¡æã§ããã°ã©ãã³ã°ã§ãã人ã®äž¡æ¹ã«ãšã£ãŠéåžžã«åœ¹ç«ã¡ãŸããObjective-cã¹ã€ãã
PS ãã¬ã³ãºïŒããªãã¯ç§ã®ææ³äžã®èª€ãã®ããã«ç§ãå³å¯ã«å€æããªããšæããŸããããã¯ç§ãäžçæžåœå匷ããç§ã®ç¬¬äºèšèªã§ããããPPSçµè«ãšããŠããŠãŒã¶ãŒAbyssMoonã«æè¬ããããšæããŸãã