Skip to content

Commit 7029d8a

Browse files
RyanRyan Soanes
Ryan
authored and
Ryan Soanes
committed
Code has been refactored to support SpriteKit as it performs better
1 parent 08977cf commit 7029d8a

File tree

9 files changed

+205
-263
lines changed

9 files changed

+205
-263
lines changed

Mobile Computing Project.xcodeproj/project.pbxproj

+16-20
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,24 @@
88

99
/* Begin PBXBuildFile section */
1010
9462424C2195E5550011450E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9462424B2195E5550011450E /* AppDelegate.swift */; };
11-
9462424E2195E5550011450E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9462424D2195E5550011450E /* ViewController.swift */; };
12-
946242512195E5550011450E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9462424F2195E5550011450E /* Main.storyboard */; };
1311
946242532195E5560011450E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 946242522195E5560011450E /* Assets.xcassets */; };
1412
946242562195E5560011450E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 946242542195E5560011450E /* LaunchScreen.storyboard */; };
15-
9462425E2196053B0011450E /* PlaneTouch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9462425D2196053B0011450E /* PlaneTouch.swift */; };
13+
94BF20A221DF808A00696638 /* GameScene.sks in Resources */ = {isa = PBXBuildFile; fileRef = 94BF20A121DF808A00696638 /* GameScene.sks */; };
14+
94BF20A421DF80B200696638 /* GameScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94BF20A321DF80B200696638 /* GameScene.swift */; };
15+
94BF20A621DF80C300696638 /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94BF20A521DF80C300696638 /* GameViewController.swift */; };
16+
94BF20A821DF876C00696638 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 94BF20A721DF876C00696638 /* Main.storyboard */; };
1617
/* End PBXBuildFile section */
1718

1819
/* Begin PBXFileReference section */
1920
946242482195E5550011450E /* Mobile Computing Project.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Mobile Computing Project.app"; sourceTree = BUILT_PRODUCTS_DIR; };
2021
9462424B2195E5550011450E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
21-
9462424D2195E5550011450E /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
22-
946242502195E5550011450E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
2322
946242522195E5560011450E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
2423
946242552195E5560011450E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
2524
946242572195E5560011450E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
26-
9462425D2196053B0011450E /* PlaneTouch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaneTouch.swift; sourceTree = "<group>"; };
25+
94BF20A121DF808A00696638 /* GameScene.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = GameScene.sks; sourceTree = "<group>"; };
26+
94BF20A321DF80B200696638 /* GameScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameScene.swift; sourceTree = "<group>"; };
27+
94BF20A521DF80C300696638 /* GameViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = "<group>"; };
28+
94BF20A721DF876C00696638 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = "<group>"; };
2729
/* End PBXFileReference section */
2830

2931
/* Begin PBXFrameworksBuildPhase section */
@@ -57,9 +59,10 @@
5759
isa = PBXGroup;
5860
children = (
5961
9462424B2195E5550011450E /* AppDelegate.swift */,
60-
9462424D2195E5550011450E /* ViewController.swift */,
61-
9462424F2195E5550011450E /* Main.storyboard */,
62-
9462425D2196053B0011450E /* PlaneTouch.swift */,
62+
94BF20A121DF808A00696638 /* GameScene.sks */,
63+
94BF20A321DF80B200696638 /* GameScene.swift */,
64+
94BF20A521DF80C300696638 /* GameViewController.swift */,
65+
94BF20A721DF876C00696638 /* Main.storyboard */,
6366
946242522195E5560011450E /* Assets.xcassets */,
6467
946242542195E5560011450E /* LaunchScreen.storyboard */,
6568
946242572195E5560011450E /* Info.plist */,
@@ -125,9 +128,10 @@
125128
isa = PBXResourcesBuildPhase;
126129
buildActionMask = 2147483647;
127130
files = (
131+
94BF20A221DF808A00696638 /* GameScene.sks in Resources */,
132+
94BF20A821DF876C00696638 /* Main.storyboard in Resources */,
128133
946242562195E5560011450E /* LaunchScreen.storyboard in Resources */,
129134
946242532195E5560011450E /* Assets.xcassets in Resources */,
130-
946242512195E5550011450E /* Main.storyboard in Resources */,
131135
);
132136
runOnlyForDeploymentPostprocessing = 0;
133137
};
@@ -138,23 +142,15 @@
138142
isa = PBXSourcesBuildPhase;
139143
buildActionMask = 2147483647;
140144
files = (
141-
9462425E2196053B0011450E /* PlaneTouch.swift in Sources */,
142-
9462424E2195E5550011450E /* ViewController.swift in Sources */,
145+
94BF20A421DF80B200696638 /* GameScene.swift in Sources */,
146+
94BF20A621DF80C300696638 /* GameViewController.swift in Sources */,
143147
9462424C2195E5550011450E /* AppDelegate.swift in Sources */,
144148
);
145149
runOnlyForDeploymentPostprocessing = 0;
146150
};
147151
/* End PBXSourcesBuildPhase section */
148152

149153
/* Begin PBXVariantGroup section */
150-
9462424F2195E5550011450E /* Main.storyboard */ = {
151-
isa = PBXVariantGroup;
152-
children = (
153-
946242502195E5550011450E /* Base */,
154-
);
155-
name = Main.storyboard;
156-
sourceTree = "<group>";
157-
};
158154
946242542195E5560011450E /* LaunchScreen.storyboard */ = {
159155
isa = PBXVariantGroup;
160156
children = (

Mobile Computing Project/Base.lproj/LaunchScreen.storyboard

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
3+
<device id="retina4_7" orientation="landscape">
4+
<adaptation id="fullscreen"/>
5+
</device>
36
<dependencies>
4-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
7+
<deployment identifier="iOS"/>
8+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
59
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
610
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
711
</dependencies>
@@ -11,7 +15,7 @@
1115
<objects>
1216
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
1317
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
14-
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
18+
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
1519
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
1620
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
1721
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>

Mobile Computing Project/Base.lproj/Main.storyboard

-60
This file was deleted.
3.52 KB
Binary file not shown.
+118
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
//
2+
// GameScene.swift
3+
// Mobile Computing Project Sprite Kit
4+
//
5+
// Created by Ryan Soanes on 15/12/2018.
6+
// Copyright © 2018 Ryan Soanes. All rights reserved.
7+
//
8+
9+
import SpriteKit
10+
import GameplayKit
11+
12+
class GameScene: SKScene {
13+
14+
let player = SKSpriteNode(imageNamed: "plane1")
15+
let background = SKSpriteNode(imageNamed: "road1")
16+
17+
override func didMove(to view: SKView) { //similar to viewDidLoad
18+
setupBackground()
19+
setupPlayer()
20+
run(SKAction.repeatForever(
21+
SKAction.sequence([
22+
SKAction.run(setupEnemy),
23+
SKAction.wait(forDuration: 1.0)
24+
])
25+
))
26+
27+
}
28+
29+
override func update(_ currentTime: TimeInterval) {
30+
// Called before each frame is rendered
31+
}
32+
33+
func setupPlayer() {
34+
let f0 = SKTexture.init(imageNamed: "plane1")
35+
let f1 = SKTexture.init(imageNamed: "plane2")
36+
let f2 = SKTexture.init(imageNamed: "plane3")
37+
let f3 = SKTexture.init(imageNamed: "plane4")
38+
let f4 = SKTexture.init(imageNamed: "plane5")
39+
let f5 = SKTexture.init(imageNamed: "plane6")
40+
let f6 = SKTexture.init(imageNamed: "plane7")
41+
let f7 = SKTexture.init(imageNamed: "plane8")
42+
let f8 = SKTexture.init(imageNamed: "plane9")
43+
let f9 = SKTexture.init(imageNamed: "plane10")
44+
let f10 = SKTexture.init(imageNamed: "plane11")
45+
let f11 = SKTexture.init(imageNamed: "plane12")
46+
let f12 = SKTexture.init(imageNamed: "plane13")
47+
let f13 = SKTexture.init(imageNamed: "plane14")
48+
let f14 = SKTexture.init(imageNamed: "plane15")
49+
let frames: [SKTexture] = [f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14]
50+
player.position = CGPoint(x: size.width * 0.2, y: size.height * 0.5)
51+
let animation = SKAction.animate(with: frames, timePerFrame: 0.05)
52+
player.run(SKAction.repeatForever(animation))
53+
addChild(player)
54+
}
55+
56+
func setupBackground() {
57+
let f0 = SKTexture.init(imageNamed: "road1")
58+
let f1 = SKTexture.init(imageNamed: "road2")
59+
let f2 = SKTexture.init(imageNamed: "road3")
60+
let f3 = SKTexture.init(imageNamed: "road4")
61+
let f4 = SKTexture.init(imageNamed: "road5")
62+
let f5 = SKTexture.init(imageNamed: "road6")
63+
let f6 = SKTexture.init(imageNamed: "road7")
64+
let f7 = SKTexture.init(imageNamed: "road8")
65+
let f8 = SKTexture.init(imageNamed: "road9")
66+
let f9 = SKTexture.init(imageNamed: "road10")
67+
let f10 = SKTexture.init(imageNamed: "road11")
68+
let f11 = SKTexture.init(imageNamed: "road12")
69+
let f12 = SKTexture.init(imageNamed: "road13")
70+
let f13 = SKTexture.init(imageNamed: "road14")
71+
let f14 = SKTexture.init(imageNamed: "road15")
72+
let f15 = SKTexture.init(imageNamed: "road16")
73+
let f16 = SKTexture.init(imageNamed: "road17")
74+
let f17 = SKTexture.init(imageNamed: "road18")
75+
let f18 = SKTexture.init(imageNamed: "road19")
76+
let frames: [SKTexture] = [f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18]
77+
background.position = CGPoint(x: size.width / 2, y: size.height / 2)
78+
background.size = CGSize(width: size.width, height: size.height)
79+
let animation = SKAction.animate(with: frames, timePerFrame: 0.04)
80+
background.run(SKAction.repeatForever(animation))
81+
addChild(background)
82+
}
83+
84+
func random() -> CGFloat {
85+
return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
86+
}
87+
88+
func random(min: CGFloat, max: CGFloat) -> CGFloat {
89+
return random() * (max - min) + min
90+
}
91+
92+
func setupEnemy() {
93+
let enemy = SKSpriteNode(imageNamed: "bird1")
94+
let f0 = SKTexture.init(imageNamed: "bird1")
95+
let f1 = SKTexture.init(imageNamed: "bird2")
96+
let f2 = SKTexture.init(imageNamed: "bird3")
97+
let f3 = SKTexture.init(imageNamed: "bird4")
98+
let f4 = SKTexture.init(imageNamed: "bird5")
99+
let f5 = SKTexture.init(imageNamed: "bird6")
100+
let f6 = SKTexture.init(imageNamed: "bird7")
101+
let f7 = SKTexture.init(imageNamed: "bird8")
102+
let f8 = SKTexture.init(imageNamed: "bird9")
103+
let f9 = SKTexture.init(imageNamed: "bird10")
104+
let frames: [SKTexture] = [f0, f1, f2, f3, f4, f5, f6, f7, f8, f9]
105+
let actualY = random(min: enemy.size.height/2, max: size.height - enemy.size.height/2)
106+
enemy.position = CGPoint(x: size.width + enemy.size.width/2, y: actualY)
107+
enemy.size = CGSize(width: size.width / 6, height: size.height / 4)
108+
let animation = SKAction.animate(with: frames, timePerFrame: 0.04)
109+
enemy.run(SKAction.repeatForever(animation))
110+
addChild(enemy)
111+
let actualDuration = random(min: CGFloat(2.0), max: CGFloat(4.0))
112+
let actionMove = SKAction.move(to: CGPoint(x: -enemy.size.width/2, y: actualY),
113+
duration: TimeInterval(actualDuration))
114+
let actionMoveDone = SKAction.removeFromParent()
115+
enemy.run(SKAction.sequence([actionMove, actionMoveDone]))
116+
}
117+
}
118+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//
2+
// GameViewController.swift
3+
// Mobile Computing Project Sprite Kit
4+
//
5+
// Created by Ryan Soanes on 15/12/2018.
6+
// Copyright © 2018 Ryan Soanes. All rights reserved.
7+
//
8+
9+
import UIKit
10+
import SpriteKit
11+
import GameplayKit
12+
13+
class GameViewController: UIViewController {
14+
15+
override func viewDidLoad() {
16+
super.viewDidLoad()
17+
18+
if let view = self.view as! SKView? {
19+
// Load the SKScene from 'GameScene.sks'
20+
if let scene = SKScene(fileNamed: "GameScene") {
21+
// Set the scale mode to scale to fit the window
22+
scene.scaleMode = .aspectFill
23+
24+
// Present the scene
25+
view.presentScene(scene)
26+
}
27+
}
28+
}
29+
30+
override func didReceiveMemoryWarning() {
31+
super.didReceiveMemoryWarning()
32+
// Dispose of any resources that can be recreated.
33+
}
34+
}
35+

0 commit comments

Comments
 (0)