アプリ版:「スタンプのみでお礼する」機能のリリースについて

Swift初心者です。
Sprite Kitで、SKShapeNodeへのSKPhysicsBodyの設定の仕方をご教授ください。
プログラム中にある「跳ね返らない」部分が理解できません。
本来であればSKShapeNodeに沿ってSKPhysicsBodyを設定しているので、全て跳ね返るはずなのですが…
間違った部分をご指摘いただけますと幸いでございます。



----- プログラム ---------------------------------------------------------------
override func didMoveToView(view: SKView) {
self.physicsWorld.gravity = CGVector(dx: 0, dy: -1.0)

var points = [CGPoint(x: 0, y: 0),
CGPoint(x: self.frame.width, y: 0),
CGPoint(x: self.frame.width, y: 10),
CGPoint(x: 0, y: 10),
CGPoint(x: 0, y: 0)]

let hoge = SKShapeNode(points: &points, count: points.count)
hoge.fillColor = SKColor.redColor()
hoge.position = CGPoint(x: 0, y: 0)
hoge.physicsBody = SKPhysicsBody(rectangleOfSize: hoge.frame.size)
hoge.physicsBody?.dynamic = false

self.addChild(hoge)

makeBall()
}

func makeBall() {
let texture = SKTexture(imageNamed: "ball")
let sprite = SKSpriteNode(texture: texture)
sprite.physicsBody = SKPhysicsBody(texture: texture, size: sprite.size)
//sprite.position = CGPoint(x: 300, y: 300) // 跳ね返らない
//sprite.position = CGPoint(x: 200, y: 300) // 跳ね返らない
sprite.position = CGPoint(x: 100, y: 300) // 跳ね返える
self.addChild(sprite)
}
----- プログラム ---------------------------------------------------------------

※ball.pngの画像サイズは40px40pxです。
※Xcode6.3.2

A 回答 (1件)

提示いただいたコードの13行目:


hoge.physicsBody = SKPhysicsBody(rectangleOfSize: hoge.frame.size)

ここで設定した長方形(Rectangle)は、原点(SKNodeのプロパティposition)を中心にしています。おそらくあなたは、原点を左下にした長方形になっているときめてかかっているように思えます。

hoge.physicsBody = SKPhysicsBody(rectangleOfSize: hoge.frame.size, center: CGPointMake(hoge.frame.size.width / 2.0, hoge.frame.size.height / 2.0))

こう変更してみてください。

ただ、SKNodeについては、すべからくオブジェクトの中心を原点とした描画、座標設定をしたほうが、ストレスのないプログラムになるはずです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。ご教授いただきましたソースで機能を実現できました。誠にありがとうございました。

お礼日時:2015/06/02 22:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!