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

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

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

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

Swift

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

Q&A

0回答

290閲覧

【SpriteKit】blendmode 端末によって描画結果が異なる

ki_ki_ton

総合スコア7

SpriteKit

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

Swift

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

0グッド

0クリップ

投稿2019/02/18 03:49

背景にBlendMode=.subtractのSKSpriteNodeをaddChildし、
さらにBlendMode=.addのSKSpriteNodeをaddChildすると、
端末によって描画結果が異なってしまいます

XcodeにてFile > New > Project からGameを選択
LanguageをSwift
Game Technorogyを Spritekitに選択し、
新しくプロジェクトを作成してから

GameScene.swiftにメソッドを追加

func addRectangleNode(size:CGSize,color:UIColor,blendMode:SKBlendMode?) { let spriteNode = SKSpriteNode( color: color, size: CGSize(width:size.width, height:size.height) ) spriteNode.anchorPoint = CGPoint(x: 0.5, y: 0.5) spriteNode.zPosition = CGFloat(self.children.count + 1) spriteNode.position = CGPoint( x:0.0, y:0.0 ) if blendMode != nil{ spriteNode.blendMode = blendMode! } self.addChild(spriteNode) }

このメソッドでSpriteNodeを作ってaddChildしています。

さらにdidMoveメソッド内でこのメソッドを呼び出しています

override func didMove(to view: SKView) { self.addRectangleNode(size: CGSize(width: self.size.width, height: self.size.height), color: UIColor(red: 1.0, green: 0.5, blue: 0.5, alpha: 1.0),blendMode: nil) self.addRectangleNode(size: CGSize(width: self.size.width/2, height: self.size.height / 2), color: .white,blendMode: .subtract) self.addRectangleNode(size: CGSize(width: self.size.width/4, height: self.size.height / 4), color: .white,blendMode: .add) ~~ ~~ }

大(ピンク)、中(黒、減算)、小(白、加算)の順でSpriteNodeをaddChildしています。
その結果、端末によって描画結果が変わってしまいます。

iPhone6,iPad iPhone7,iPhoneX
中が白くなっているのがiPhone6,新型iPad、シミュレータ(iPhoneXR)での描画結果
中が大外と同じ色になっているのがiPhone7,iPhoneXRでの描画結果です。

3つのSpriteNodeをaddChildしているだけなのですが1番上にあるblendMode=.addのノードが
白いものについては自分が思った結果通りだったのですが、
大外と同じ色のものについては2つ目のblendMode=.subtractのノードにのみ影響を与えているように感じます。

できれば中が白くなってほしいのですがどうすればよいのでしょうか

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

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

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

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

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

fuzzball

2019/02/18 04:17

再現できる環境がないのですが、3つ目を全画面にするとどうなりますか?
ki_ki_ton

2019/02/18 04:58

大外が白、2つ目の範囲がピンクになりました
fuzzball

2019/02/18 05:19

全画面で、.white ではなく .darkGray にするとどうなりますか?
ki_ki_ton

2019/02/18 05:29

大外が薄いピンク、2つ目の範囲が黒に近い茶色になりました
fuzzball

2019/02/18 05:55

3つ目のサイズと色は元に戻して、2つ目の色を .gray にするとどうなりますか?
ki_ki_ton

2019/02/18 06:09

大外が薄いピンク、2つ目の範囲が赤茶色、中が真っ白になりました (シミュレータも同じ結果になりました)
fuzzball

2019/02/18 06:34 編集

.subtractしたときに0でclampされていないような気が‥というだけで解決方法は分かりませんが。 おかしくなるiPhone7とiPhoneXRは実機なんですよね? シミュレータでおかしくなるだけならシミュレータの不具合かもしれないんですけどね。
ki_ki_ton

2019/02/18 06:38

実機ですね。 もしかしておかしいのはMetalで描画、他はOpenGLで描画しているかもしれません。 substract使わない(.multiplyを使う?)、という手を使えばなんとか解決はできそうです 根本的な解決ではないですが、、、
fuzzball

2019/02/18 06:57

どういう意図でadd/subtractしているのか分からないですし、SpriteKitもほとんど使ったことがないので、これ以上は何とも‥です。
ki_ki_ton

2019/02/18 07:19

ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問