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

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

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

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

Xcode

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

Swift

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

Q&A

0回答

1286閲覧

ボールを跳ね返させる方法

Byon-0421

総合スコア6

SpriteKit

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

Xcode

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

Swift

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

0グッド

1クリップ

投稿2020/04/27 21:25

編集2020/04/28 17:29

前提・実現したいこと

Swift5でピンボールのアプリを作っています。
ボールが物体にぶつかると跳ね返るようにしたいのですが跳ね返らずに通り抜けてしまいます。

発生している問題・エラーメッセージ

アームは問題なく跳ね返るのですが壁やモンスターは通り抜けてしまいます。 何故アームだけがうまくいくのか分からず困っています。

該当のソースコード

Swift

1import SpriteKit 2import GameplayKit 3 4class GameScene: SKScene,SKPhysicsContactDelegate { 5 //ゲームオーバーフラグ 6 var gameoverFlg = false 7 8 //ポイント 9 var count:NSInteger = 0 10 11 //ラベル 12 let gameoverLabel = SKLabelNode(fontNamed: "Hiragino kaku Gothic ProN")//ゲームオーバーを表示するラベル 13 14 let pointLabel = SKLabelNode(fontNamed: "Hiragino kaku Gothic ProN")//得点を表示するラベル 15 16 //オブジェクト 17 var ball = SKSpriteNode(imageNamed: "ball") 18 var armRight = SKSpriteNode(imageNamed: "rightarm") 19 var armLeft = SKSpriteNode(imageNamed: "leftarm") 20 var back = SKSpriteNode(imageNamed: "back") 21 var wallLeft = SKSpriteNode(imageNamed: "wallleft") 22 var wallRight = SKSpriteNode(imageNamed: "wallright") 23 var triangleLeft = SKSpriteNode(imageNamed: "triangleleft") 24 var triangleRight = SKSpriteNode(imageNamed: "triangleright") 25 var monster1 = SKSpriteNode(imageNamed: "monster1a") 26 var monster2 = SKSpriteNode(imageNamed: "monster2a") 27 var monster3 = SKSpriteNode(imageNamed: "monster3a") 28 let playSound = SKAction.playSoundFileNamed("click.mp3", waitForCompletion: false) 29 30 31 override func didMove(to view: SKView) { 32 33 //背景 34 back.position = CGPoint(x: 0, y: 0) 35 back.anchorPoint = CGPoint(x: 0, y: 0) 36 self.addChild(back) 37 self.size = CGSize(width: 320, height: 568) 38 //重力の設定とcontactDelegateの設定 39 self.physicsWorld.gravity = CGVector(dx: 0, dy: -3.0) 40 self.physicsWorld.contactDelegate = self 41 self.physicsBody = SKPhysicsBody(edgeLoopFrom: self.frame) 42 43 //ボールを作成 44 makeBall() 45 46 //壁左半分 47 wallLeft.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "wallleft.png"), size: wallLeft.size) 48 wallLeft.physicsBody?.restitution = 1.5 49 wallLeft.physicsBody?.isDynamic = false 50 wallLeft.physicsBody?.contactTestBitMask = 1 51 wallLeft.position = CGPoint(x: 80, y: 284) 52 self.addChild(wallLeft) 53 54 //壁右半分 55 wallRight.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "wallright.png"), size: wallRight.size) 56 wallRight.physicsBody?.restitution = 1.5 57 wallRight.physicsBody?.isDynamic = false 58 wallRight.physicsBody?.contactTestBitMask = 1 59 wallRight.position = CGPoint(x: 240, y: 284) 60 self.addChild(wallRight) 61 62 63 //モンスター 64 monster1.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "monster1a.png"), size: monster1.size) 65 monster1.physicsBody?.restitution = 0.1 66 monster1.physicsBody?.isDynamic = false 67 monster1.physicsBody?.contactTestBitMask = 1 68 monster1.position = CGPoint(x: 100, y: 70) 69 self.addChild(monster1) 70 71 //アーム右 72 armRight.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "rightarm.png"), size: armRight.size) 73 armRight.physicsBody?.restitution = 0.1 74 armRight.physicsBody?.isDynamic = false 75 armRight.physicsBody?.contactTestBitMask = 1 76 armRight.position = CGPoint(x: 220, y: 70) 77 self.addChild(armRight) 78} 79 80 //ボール(勇者)を作成 81 func makeBall(){ 82 //ボールのスプライト 83 let ballSprite = SKSpriteNode(imageNamed: "ball.png") 84 85 //ボールのphysicsBodyの設定 86 ball.physicsBody = SKPhysicsBody(circleOfRadius: 15) 87 ball.physicsBody?.contactTestBitMask = 1 88 89 //ボールを配置 90 ball.position = CGPoint(x: 100, y: 500) 91 self.addChild(ball) 92 } 93} 94

イメージ説明

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

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

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

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

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

fugu

2020/05/23 17:15

コードをコピーして試しましたが、 私の環境ではすり抜けは確認出来ませんでした。 跳ね返りはアームほどではなくちゃんとぶつかっています。 GameScene.sksなどで何か変更されていませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問