質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

1033閲覧

SKSpriteNodeをランダムに生成したいです。

a14123

総合スコア0

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/05/10 14:41

前提・実現したいこと

初めまして。
プログラミングを勉強し始めて、まだ1ヶ月ちょいですがswiftを使って
インベーダーゲームのようなゲームを作成しようと試みています。

つまずいている箇所が
enemy1とenemy2で別のカテゴリビットマスクを割り当てたいので
enemy1とenemy2を別々のSKSpriteNodeにして
ランダムに上から降りてくる仕様にしたいのですが
同時に降りて来てしまいます。

何が誤っているかご教示ください。
よろしくお願いします。

該当のソースコード

func moveEnemy() {

let enemy1 = SKSpriteNode(imageNamed: "enemy1") let enemy2 = SKSpriteNode(imageNamed: "enemy2") //enemy1のサイズを設定する enemy1.scale(to: enemySize) //enemy1のx方向の位置を生成する let xPos1 = (frame.width / CGFloat.random(in: 1...5)) - frame.width / 2 //enemy1の位置を設定する enemy1.position = CGPoint(x: xPos1, y: frame.height / 2) //シーンにenemy1を表示する addChild(enemy1) //enemy2のサイズを設定する enemy2.scale(to: enemySize) //enemy2のx方向の位置を生成する let xPos2 = (frame.width / CGFloat.random(in: 1...5)) - frame.width / 2 //enemy1の位置を設定する enemy2.position = CGPoint(x: xPos2, y: frame.height / 2) //シーンにenemy1を表示する addChild(enemy2) //指定した位置まで1.5秒で移動させる let move = SKAction.moveTo(y: -frame.height / 2, duration: 1.5) //親からノードを削除する let remove = SKAction.removeFromParent() //アクションを連続して実行する enemy1.run(SKAction.sequence([move, remove])) //アクションを連続して実行する enemy2.run(SKAction.sequence([move, remove]))
swift

試したこと

enemy1とenemy2をenemysにまとめた変数にして
enemys[Int(arc4random_uniform(UInt32(array.count)))]
のような型にしたりしましたが上手くいきませんでした。

補足情報(FW/ツールのバージョンなど)

XcodeのバージョンはVersion 11.4.1 です。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

こんな感じでどうでしょうか?

import SpriteKit

class GameScene: SKScene {
var timer = Timer()
override func didMove(to view: SKView) {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timeupdate), userInfo: nil, repeats: true)
}

@objc func timeupdate() {
moveEnemy()
}

func moveEnemy() {
//指定した位置まで1.5秒で移動させる
let move = SKAction.moveTo(y: -frame.height / 2, duration: 1.5)
//親からノードを削除する
let remove = SKAction.removeFromParent()

let random:UInt32 = arc4random_uniform(2)
print(random)
if random == 0 {
let enemy1 = SKSpriteNode(imageNamed: "enemy1")
let xPos1 = (frame.width / CGFloat.random(in: 1...5)) - frame.width / 2
//enemy1の位置を設定する
enemy1.position = CGPoint(x: xPos1, y: frame.height / 2)
//シーンにenemy1を表示する
addChild(enemy1)
enemy1.run(SKAction.sequence([move, remove]))
}

if random == 1 { let enemy2 = SKSpriteNode(imageNamed: "enemy2") let xPos2 = (frame.width / CGFloat.random(in: 1...5)) - frame.width / 2 //enemy1の位置を設定する enemy2.position = CGPoint(x: xPos2, y: frame.height / 2) //シーンにenemy1を表示する addChild(enemy2) enemy2.run(SKAction.sequence([move, remove])) } }

}

投稿2020/05/23 19:40

fugu

総合スコア35

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問