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

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

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

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

1479閲覧

敵が表示されない

NaNoSa

総合スコア31

SpriteKit

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

1クリップ

投稿2017/04/09 12:23

無限に敵が上から出てくるプログラムを組みたいです。このままビルドすると背景は表示されるのですが、敵が表示されません。しかも無限に繰り返せるか微妙です。どうしたら良いですか?

import SpriteKit class GameScene: SKScene { var GameField = SKSpriteNode(imageNamed: "GameField") var enemy = SKSpriteNode(imageNamed: "enemy") override func didMove(to view: SKView) { createGamefield() } func createGamefield() { let random : Int = Int(arc4random_uniform(UInt32(10))) let x : CGFloat = self.frame.width/CGFloat(random) GameField.size = CGSize(width: self.frame.width, height: self.frame.height) GameField.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) self.addChild(GameField) createEnemy(x: x) } func createEnemy(x: CGFloat) { enemy.size = CGSize(width: self.frame.width/10, height: self.frame.width/10) enemy.position = CGPoint(x: x,y: self.frame.maxY) enemy.run(SKAction.moveTo(y: self.frame.height+enemy.frame.height, duration: 0.0)) self.addChild(enemy) } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

座標系を理解出来ていないのと、移動アニメーションの時間が0になっているのが原因です。

swift

1func createEnemy(x: CGFloat) { 2 enemy.size = CGSize(width: self.frame.width/10, height: self.frame.width/10) 3 enemy.position = CGPoint(x: 500, y: self.frame.maxY + enemy.frame.height/2) //※とりあえずX座標は固定, Y座標は自機の半分だけ上へ 4 enemy.run(SKAction.moveTo(y: self.frame.minY - enemy.frame.height/2, duration: 1.0)) //※画面下はy=0 & 自機の半分だけ下へ, 1秒間で移動 5 self.addChild(enemy) 6}

投稿2017/04/10 02:04

fuzzball

総合スコア16731

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

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

NaNoSa

2017/04/10 11:22 編集

前回の質問の答えと合わせて組み直して見ました。しかし、敵が一匹しか現れずまた、クラッシュしてしまいます。どう直せば良いですか? ``` import SpriteKit class GameScene: SKScene { var GameField = SKSpriteNode(imageNamed: “GameField”) var enemy = SKSpriteNode(imageNamed: “enemy”) var last:CFTimeInterval! var currentTime:CFTimeInterval = 0.0 override func didMove(to view: SKView) { createGamefield() } func createGamefield() { GameField.size = CGSize(width: self.frame.width, height: self.frame.height) GameField.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) self.addChild(GameField) } func createEnemy(x: CGFloat) { enemy.size = CGSize(width: self.frame.width/10, height: self.frame.width/10) enemy.position = CGPoint(x: x,y: self.frame.maxY+enemy.frame.height/2) enemy.run(SKAction.moveTo(y: self.frame.minY-enemy.frame.height/2, duration: 1.0)) self.addChild(enemy) } override func update(_ currentTime: TimeInterval) { if !(last != nil) { last = currentTime } if last+1 <= currentTime { let random : Int = Int(arc4random_uniform(UInt32(10))) let x : CGFloat = self.frame.width/CGFloat(random) self.createEnemy(x: x) last = currentTime } } } ```
fuzzball

2017/04/10 23:51

コメントにコードを書かないで下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問