のーとぶっく

学んだことをまとめておく学習帳および備忘録

【Swift/SpriteKit】SKSceneでタッチイベント

タッチイベント時にしょっちゅう使いそうなことをメモ。

タッチ感知の種類

// 画面に指が触れた瞬間の処理
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // code
}

// 指が触れたまま動かした時の処理
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    // code
}

// 画面から指が離れた時の処理
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    // code
}

タッチ情報を取得

取得した情報(オプショナル)をアンラップする

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    // nilチェックとアンラップ
    guard let touch = touches.first else { return }
        
}

タッチされた位置

画面上の座標を取得

let touchedPos = touch.location(in: self)

タッチされた位置のノードを取得

let node = self.atPoint(touchedPos)

特定のノードをタッチした時の処理

「このオブジェクトをタッチしたらこうしたい」という時の処理。

// タッチ位置を取得
let touchedPos = touch.location(in: self)

// タッチした位置にあるノードを取得
let node = self.atPoint(touchedPos)

// タッチされたノードが任意のオブジェクトだった時
if node == self.sampleSprite {
    // code
}

【Swift/SpriteKit】SKActionを制御する【繰り返しなど】

SKActionを扱う際の基本的なことだけの簡単なメモを。

アクションを順番に実行する(シーケンス)

// 右へ50移動
let move = SKAction.moveBy(x: +50, y: 0, duration: 0.2)

// 左へ50移動
let moveRev = move.reversed()

// アクション配列をシーケンスにする
let sequence = SKAction.sequence([move,moveRev,moveRev,move])

// 実行
sprite.run(sequence)

アクションを繰り返す

繰り返す回数を指定

// 繰り返すアクション(シーケンス含む)と回数を指定
let repeatAction = SKAction.repeat(move, count: 5)

// 実行
sprite.run(repeatAction)

永遠に繰り返す

// 繰り返すアクション(シーケンス含む)を指定
let repeatForever = SKAction.repeatForever(action)

// 実行
sprite.run(repeatForever)

同時に実行

// 同時に起こすアクション
let move = SKAction.moveBy(x: +50, y: 0, duration: 0.2)
let rotate = SKAction.rotate(byAngle: CGFloat(M_PI * 2), duration: 0.2)

// グループにまとめる
let group = SKAction.group([move,rotate])

// 実行
sprite.run(group)

ウェイト(間を空ける)

秒数固定

// 1秒ウェイト
let wait = SKAction.wait(forDuration: 1.0)

秒数をランダムにする

//2秒を中心として4秒の開きの中でランダムする
let wait = SKAction.wait(forDuration: 2, withRange: 4)

アクション実行中に変数や関数を処理する

シーケンスに組み込んだり

let numPlus1 = SKAction.run({
    num += 1
})

【Swift/SpriteKit】SKActionでオブジェクトを動かす

オブジェクトを動かす際の基本的なことだけの簡単なメモを。

移動

移動量を指定して移動

// アクションのインスタンスを生成
// 移動距離と速度を指定
let move = SKAction.moveBy(x: +10, y: -50, duration: 0.2)

// 実行
sprite.run(move)

到着点を指定して移動

// アクションのインスタンスを生成
// 到着点と速度を指定
let move = SKAction.move(to: CGPoint(x: 100, y: 500), duration: 0.2)

// 実行
sprite.run(move)

回転

回転量を指定した回転

// アクションのインスタンスを生成
// 回転量と速度を指定
let rotate = SKAction.rotate(byAngle: CGFloat(M_PI * 2), duration: 0.5)

// 実行
sprite.run(rotate)

角度を指定した回転

// アクションのインスタンスを生成
// 最終的な角度と速度を指定
let rotate = SKAction.rotate(toAngle: CGFloat(-M_PI / 2), duration: 0.2)

// 実行
sprite.run(rotate)

拡大縮小

現在のサイズからの変化量を指定した伸縮

// アクションのインスタンスを生成
// 何倍の大きさにするかと速度を指定
let scale = SKAction.scale(by: 1.5, duration: 0.2)

// 実行
sprite.run(scale)

元のサイズからの変化量を指定した伸縮

// アクションのインスタンスを生成
// 何倍の大きさにするかと速度を指定
let scale = SKAction.scale(to: 1.5, duration: 0.2)

// 実行
sprite.run(scale)

サイズを指定した伸縮

// アクションのインスタンスを生成
// サイズと速度を指定
let scale = SKAction.scale(to: CGSize(width: 300, height: 300), duration: 0.2)

// 実行
self.sprite.run(scale)

フェードイン・フェードアウト

フェードイン

// アクションのインスタンスを生成
let fade = SKAction.fadeIn(withDuration: 0.5)

// 実行
sprite.run(fade)

フェードアウト

// アクションのインスタンスを生成
let fade = SKAction.fadeOut(withDuration: 0.5)

// 実行
sprite.run(fade)

不透明度

変化量を指定した変更

// アクションのインスタンスを生成
// 変化量と速度を指定
let fadeAlpha = SKAction.fadeAlpha(by: -0.5, duration: 0.2)

// 実行
sprite.run(fadeAlpha)

不透明度を指定した変更

// アクションのインスタンスを生成
// 不透明度と速度を指定
let fadeAlpha = SKAction.fadeAlpha(to: 0.5, duration: 0.2)

// 実行
sprite.run(fadeAlpha)

動作を反転させる

// 右に50移動
let move = SKAction.moveBy(x: +50, y: 0, duration: 0.2)

// 左に50移動
let moveRev = move.reversed()

【Swift/SpriteKit】SKShapeNodeで図形オブジェクトを置く

図形オブジェクトを置く際の基本的なことだけの簡単なメモを。四角以外の多角形は省略。

四角

// 図形ノードのインスタンス生成・サイズ指定
let rectShape = SKShapeNode(rectOf: CGSize(width: 30, height: 30))

// 塗りの色
rectShape.fillColor = .black

// 枠線の色
rectShape.strokeColor = .white

// 任意のビューやノードに追加
view.addChild(rectShape)

正円

// 図形ノードのインスタンス生成・半径の大きさ
let circleShape = SKShapeNode(circleOfRadius: (50))

// 塗りの色
circleShape.fillColor = .black

// 枠線の色
circleShape.strokeColor = .white

// 任意のビューやノードに追加
view.addChild(circleShape)

楕円(原点左下)

// 図形ノードのインスタンス生成・位置とサイズを指定
let ellipseShape = SKShapeNode(ellipseIn: CGRect(x: -50, y: -100, width: 100, height: 200))

// 塗りの色
ellipseShape.fillColor = .black

// 枠線の色
ellipseShape.strokeColor = .white

// 任意のビューやノードに追加
view.addChild(ellipseShape)

楕円(原点中央)

// 図形ノードのインスタンス生成・サイズを指定
let ellipseShape = SKShapeNode(ellipseOf: CGSize(width: 50, height: 100))

// 塗りの色
ellipseShape.fillColor = .black

// 枠線の色
ellipseShape.strokeColor = .white

// 任意のビューやノードに追加
view.addChild(ellipseShape)

【Swift/SpriteKit】SKLabelNodeで文字オブジェクトを置く

文字オブジェクトを置く際の基本的なことだけの簡単なメモを。

// ラベルノードのインスタンスを生成
let sampleText = SKLabelNode()

// 表示する文字列を指定
sampleText.text = "Hello!"

// 文字の大きさを指定
sampleText.fontSize = 60

// 文字色を指定
sampleText.fontColor = .white

// ラベルノードを置く位置を指定
sampleText.position = CGPoint(x: 0, y: 0)

// 任意のビューやノードに追加
view.addChild(sampleText)

【Swift/SpriteKit】SKSpriteNodeで画像のオブジェクトを置く

画像オブジェクトを置く際の基本的なことだけの簡単なメモを。

// スプライトのインスタンスを生成
let sampleSprite = SKSpriteNode()

// スプライトの画像をセット
sampleSprite.texture = SKTexture(imageNamed: "sampleImage")

// スプライトのサイズを指定
sampleSprite.size = CGSize(width: 30,height: 30)

// スプライトを置く位置を設定
sampleSprite.position = CGPoint(x: 0, y: 0)

// スプライトのどの箇所を指定の位置に置くかを設定
// 0,0で左上端、1,1で右下端、初期値は中央の0.5,0.5
self.dynamite.anchorPoint = CGPoint(x: 0, y: 0)

// 任意のビューやノードに追加
view.addChild(sampleSprite)

【デザイン】デザインの4原則を学ぶ

デザインの4原則とは

情報をわかりやすく伝えるためには欠かせない、デザインレイアウトの基本中の基本。

  1. 近接
  2. 整列
  3. 反復
  4. 対比

4つの原則それぞれが相互に関係しあって成り立つため、基本的には、どれかひとつの原則を独立させることはない。

1. 近接

同じ括りの情報同士を近くに寄せて配置し、関連性があることを強調する表現方法。

f:id:hirakana:20210514210949p:plain

2. 整列

図版や文字などの各要素の並びを揃えて整え、整然とした美しさと秩序的な一体感を持たせる表現方法。

f:id:hirakana:20210514211013p:plain

3. 反復

視覚的な特徴を繰り返して、全体に一貫性を持たせる表現方法。

f:id:hirakana:20210514211031p:plain