2015-04-05 81 views
0

我加入didMoveToView如下:雪碧去關閉屏幕的邊框

var ground = SKNode() 
    ground.position = CGPointMake(0, 0) 
    ground.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame) 
    ground.physicsBody?.dynamic = false 
    ground.physicsBody?.friction = 1 
    self.addChild(ground) 

,並在touchesBegan,我增加了以下內容:

mainChar.physicsBody?.velocity = CGVectorMake(0, 0) 
    mainChar.physicsBody?.applyImpulse(CGVectorMake(85, 0)) 

哪裏mainChar是定義一個SKSpriteNode早。我通過改變y方向上的applyImpulse的方向來測試上面的代碼,並且看到mainChar沒有超出屏幕的頂部。但是,當我將其保留爲85或將其更改爲-85時,它將從屏幕的右側和左側消失。

我能做些什麼不同以確保mainChar保持在屏幕的粘接盒內?

謝謝。

+0

你給過場景一個物理機體嗎? – ZeMoon 2015-04-05 18:34:22

+0

錯......不這麼認爲。我怎麼做? – user3369038 2015-04-05 18:36:13

+0

嗨..我剛纔沒注意到你已經在地面節點上設置了所需的物理體,這看起來是正確的。我認爲你的立場是錯誤的。爲了確保,在didMoveToView方法中調用'self.view.showsPhysics = true'。 – ZeMoon 2015-04-06 05:37:40

回答

0

將dynamic設置爲false可防止節點受到衝突的影響。

更改您的代碼如下:

var ground = SKNode() 
ground.position = CGPointMake(0, 0) 
ground.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame) 
ground.physicsBody?.dynamic = true //This should be set to true 
ground.physicsBody?.affectedByGravity = false 
ground.physicsBody?.friction = 1 
self.addChild(ground) 

您還必須設置類別每個physicsBody。

+0

因此,我改變它的代碼這樣:? 變種地面= SKNode() ground.position = CGPointMake(0,0) ground.physicsBody。動態=假 ground.physicsBody .friction = 1 self.physicsBody = SKPhysicsBody(edgeLoopF​​romRect:self.frame) ,不幸的是它不起作用。 – user3369038 2015-04-05 18:49:02

+0

還有什麼我可以嘗試? – user3369038 2015-04-05 20:31:16

1

賠率是你的場景是不一樣的大小作爲您的框架,你正在使用.AspectFill

如果你打開物理調試,你會發現你的頂部和底部或左右都有一條綠線。

skView.showsPhysics = true 

如果你這樣做......

scene.scaleMode = .AspectFit 

一切都可能會神奇地工作,但如果你在didMoveToView打印(如果.AspectFill)

,你會發現一些黑網吧

println("\(self.frame)") 
println("\(view.frame)") 

您可能會看到您正試圖將一個非常大的場景融入小視野。你的場景縮小到你的視野,但尺寸保持不變。這會導致一些事情被切斷(甚至是你的基礎節點)。你將不得不做一些數學計算出什麼在頂部和底部被切斷。之後,您將需要基於此創建一個框架並抵消您的節點。

對不起,我不能爲你做數學,但認爲如果我至少讓你指出正確的方向,你知道爲什麼然後你可能會找出其餘的。

+0

老兄你是一個絕對的天才!這正是問題所在。對不起,因爲我離開了,所以遲到了。 self.frame和view.frame的尺寸如下(分別):'(0.0,0.0,1024.0,768.0)'和'(0.0,0.0,375.0,667.0)'。 我修改了代碼: http://tinypic.com/view.php?pic=r88ggh&s=8#.VaQm_kKBBUE 我用數字玩和2.0和iPhone 6 1.7工作然而,對於其他情況下,邊界似乎在其他地方(如屏幕中間等)。你能否指點我正確的方向,以便它可以以編程方式發生?非常感謝! – user3369038 2015-07-13 21:09:48

+0

@ user3369038你在爲iPad設計嗎? – 2015-07-13 23:24:31

+0

基本上我是遊戲開發新手,所以只是通過嘗試來學習東西。理想情況下,我想創建適用於所有設備的通用遊戲。那可能嗎?或者我必須將我的開發人員僅限於某個特定設備?我意識到這不僅僅是屏幕分辨率,還有像dx和dy(衝動)的數量會有所不同,這取決於遊戲運行的設備。 將感謝您的任何建議像你一樣經驗豐富。謝謝!! – user3369038 2015-07-14 18:33:04