ダーヤス.com
OPEN:Everyday, All time free.
Today:
Yesterday:
アプリを作って好きなものを作る楽しみを味わうとともに、どのようにしてアプリが作られるのかをプログラミングレベルから学び、いずれは有意義なものを作れたら良いなというささやかな思いをこめた部活動です。
2人(イギリスに住んでたらプログラミングをやりたくなった筆者と、アメリカに住んでたらプログラミングをやりたくなった方)。人数は多ければ多いほど、質も量も高まりますし、お互いを刺激し合えるので、随時募集中です。
アプリ作成を始める際、iPhoneやiPadのアプリから始めるか、Androidから始めるかで迷うところですが、ネット上の情報をいろいろ探った結果、私はiPhone系のものから入りました。Android携帯はイギリスで買った低性能のものしか持っていなくて画面確認ができなかったのと、プログラミング経験的に、JAVAよりもCの方が経験値が高かったからです。というか、JAVAはやったことがありませんでした。しかし、いずれはAndroidも携わってみたいです。
画像をクリックすると、itunes storeのサイトに移動します。(まだ作成中)
作っていて頻繁に使うメソッド等をメモしていきます。
・ラベル
宣言
var stageLabel: UILabel = UILabel()
サイズと位置決め
stageLabel.frame = CGRectMake(UIScreen.mainScreen().bounds.width/2-150, UIScreen.mainScreen().bounds.height/2-150, 300, 150)
テキスト内容の変更
stageLabel.text = "Final Stage\r\r\(3-waitCount)"(\rは改行)
フォントサイズの変更
stageLabel.font = UIFont.systemFontOfSize(20)
フォント色の変更
stageLabel.textColor = UIColor.blackColor()
背景色の変更
stageLabel.backgroundColor = UIColor.whiteColor()
中央寄りにする
stageLabel.textAlignment = NSTextAlignment.Center
行数設定
stageLabel.numberOfLines = 3
画面に表示
self.view.addSubview(stageLabel)
画面から消す
scoreLabel.removeFromSuperview()
・ボタン
宣言
let startButton: UIButton = UIButton()
位置とサイズ決め
startButton.frame = CGRect(x: UIScreen.mainScreen().bounds.width/2-50, y: UIScreen.mainScreen().bounds.height/2, width: 100, height: 50)
ボタンに表示させるタイトル、テキスト
startButton.setTitle("START", forState: .Normal)
ボタンに表示させるタイトル、テキストの色
startButton.setTitleColor(UIColor.blackColor(), forState: .Normal)
ボタンに表示させるタイトル、テキストを中央寄りにする
startButton.titleLabel?.textAlignment = NSTextAlignment.Center
ボタンの背景色
startButton.backgroundColor = UIColor.yellowColor()
ボタンに丸みをつける
startButton.layer.cornerRadius = 30
ボタンを押すと開始されるメソッド
startButton.addTarget(self, action: "setWaitTimer", forControlEvents: .TouchUpInside)
ボタンを表示
self.view.addSubview(startButton)
・ビュー
宣言
let drawView: UIView = UIView()
位置とサイズ決め
drawView.frame = CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.width, height: UIScreen.mainScreen().bounds.height)
ビュー貫通させて奥のビューを操作させるために手前のビュー操作を無効にする
drawView.userInteractionEnabled = false
イメージビュー
宣言
var cellView = UIImageView()
ファイルから読み込む
cellView.image = UIImage(named: "1.png")
・図形描画
宣言(線)
var bezierPath = UIBezierPath()
描画開始時
UIGraphicsBeginImageContext(CGSize(width: UIScreen.mainScreen().bounds.width, height: UIScreen.mainScreen().bounds.height))
線の太さ
bezierPath.lineWidth = 2.0
初期位置
let startPoint: CGPoint = CGPoint(x: 10, y: 10)
bezierPath.moveToPoint(startPoint)
次の位置
bezierPath.addLineToPoint(currentPoint)(currentPointは別途CGPointで宣言しておく)
線の色
UIColor.redColor().setStroke()
初期座標から次の位置の座標まで結ぶ
bezierPath.stroke()
楕円の場合
let oval = UIBezierPath(ovalInRect: CGRectMake(0, 0, 10, 10))
塗りつぶし
UIColor.grayColor().setFill()
oval.fill()
ビューに描画した図形を貼り付け
drawView.layer.contents = UIGraphicsGetImageFromCurrentImageContext().CGImage UIGraphicsEndImageContext()
描画したものを消す
bezierPath.removeAllPoints()
・ラベル
宣言
var scoreLabel: SKLabelNode = SKLabelNode(fontNamed:"Hiragino Kaku Gothic ProN")
位置決め
scoreLabel.position = CGPoint(x: 70, y: self.frame.size.height-50)
テキスト内容の変更
scoreLabel.text = "Score:\(score)"
フォントサイズの変更
scoreLabel.fontSize = 20
フォント色の変更
scoreLabel.fontColor = UIColor(red:1, green:1, blue:1, alpha:1)
(例えばscoreLabel.color = UIColor.whiteColor()みたいに書いてもエラー出ないのだけどこれだとフォントカラーが変わるわけでもないし背景色が変わるわけでもない。。謎。調べればいいだけなのだけど。)
画面に表示
self.addChild(scoreLabel)
画面から消す
scoreLabel.removeFromParent()
・タイマー
宣言
var timer:NSTimer!
タイマー開始
timer = NSTimer.scheduledTimerWithTimeInterval(1(タイマー周期。ここに変数を代入して色々タイミング変えてる。その際は一旦invalidate必要), target: self, selector: "stageCountDown"(開始させる関数とか), userInfo: nil, repeats: true)
タイマー停止
timer.invalidate()
・重力を発生させる
宣言、発生
self.physicsWorld.gravity = CGVector(dx: 0, dy: -2)
デリゲート設定
self.physicsWorld.contactDelegate = self
・ノードを出現させる
宣言
let thread = SKSpriteNode(color: UIColor.grayColor(), size: CGSize(width: 5, height: 50))(長方形のノードになる)
let thread = SKSpriteNode(imageNamed: "ball.png")(画像を読み込む場合)
let thread = SKShapeNode(circleOfRadius: 20)(円形のシェイプノードが作成できる)
thread.fillColor = UIColor.cyanColor()(シェイプノードの中身の色を水色にする)
位置決め
thread.position = CGPoint(x: self.size.width*0.5, y: 50)(これは中央の座標)
ノードに重力の影響を付加
let physicsBody = SKPhysicsBody(rectangleOfSize: thread.frame.size)(ノードと同じサイズにかかる重力)
physicsBody.dynamic = false(trueだと重力がかかる)
physicsBody.contactTestBitMask = 1(とりあえず0より大きい値でこう書いておくべき)
thread.physicsBody = physicsBodyノードに重力の影響を与える
ノードに名前をつける
thread.name = "thread"(.tagみたいなものか。タグより使い易い印象)
ノードを画面に表示
self.addChild(thread)
ノードを画面から削除
thread.removeFromParent()
ノード同士がぶつかった時の処理
func didBeginContact(contact: SKPhysicsContact) {}(ぶつかったらこの処理が実行される)
ぶつかった2つのノード情報を各々取得
let nodeA = contact.bodyA.node(多分座標が小さい方のノードがA?)
let nodeB = contact.bodyB.node
if nodeA!.name == "thread" {}(一方のノード名がthreadだったら。。。このように名前で条件分岐できる)
・パーティクルを発生
let particle = SKEmitterNode(fileNamed: "MyParticle.sks")
self.addChild(particle!)
let removeAction = SKAction.removeFromParent()
let durationAction = SKAction.waitForDuration(1)
let sequenceAction = SKAction.sequence([durationAction,removeAction])(1秒発生させて消す一連のアクション)
particle?.runAction(sequenceAction)(一連のアクションを実行)
particle?.position = CGPoint(x: nodeB!.position.x, y: nodeB!.position.y)(パーティクル発生位置)>
particle?.alpha = 1(パーティクルの濃さを1)
let fadeAction = SKAction.fadeAlphaTo(0, duration: 0.5)(0.5秒かけてフェードアウトする処理宣言)
particle?.runAction(fadeAction)(フェードアウト処理を実行)
・画面タッチした時の処理
override func touchesBegan(touches: Set
if let touch:AnyObject = touches.first{}(タッチされた座標をオプジェクトとして宣言)
let location = touch.locationInNode(self)(タッチされた座標を取得)
let node:SKNode = self.nodeAtPoint(location)(タッチされた座標上のノードを宣言)
if node.name == "startButton" {}(タッチされた座標上に「スタートボタン」という名前のノードがあったら実行。これで「スタートボタン」という名前のラベルをボタンみたいに使える。)
let action = SKAction.moveTo(CGPoint(x: location.x, y: 50), duration: 0.2)(所定座標に移動させるアクションの宣言)
self.thread.runAction(action)(threadというノードを上記座標へ移動させる処理)