2015-05-07 76 views
4

我是新來的迅速Sprite套件。在應用程序中,我試圖讓我有一艘潛艇在海洋中移動。每次用戶點擊屏幕時,重力都會開始向相反的方向拉動副件。我的問題是,我無法找到一種方法來保持子離開屏幕。我試圖通過在屏幕周圍製作物理體來解決它,但是該子仍然離開了屏幕。我也嘗試了updateCurrentTime基金中的以下代碼。保持屏幕中的對象。 Swift SpriteKit

override func update(currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 
self.physicsWorld.gravity = CGVectorMake(0,gravity) 

    if (sub.position.y >= self.size.height - sub.size.height/2){ 
     sub.position.y = self.size.height - self.sub.size.height/2 
    } 
    if (sub.position.y <= sub.size.height/2) { 
     sub.position.y = self.sub.size.height/2 

    } 



} 

但是這也沒有做任何事情。

任何幫助將不勝感激!!!!!提前致謝! P.S.我無法相信這是很難保持在屏幕上的東西! 令人沮喪!

+0

我發現,添加:讓場面= GameScene(尺寸:skView.bounds.size)到gameViewController使周圍的edgeLoopF​​romRect屏幕方法的工作,但它使整個視圖做一個放大的影響,我不知道它做了什麼,所以我不想使用它。有人可以向我解釋這個應該做什麼,以及爲什麼它使得視圖放大/縮小。它也將背景變成黑色....? – BoB

+0

像這樣初始化GameScene意味着它不從sks文件加載。它使得場景的大小適合屏幕(所以邊緣循環位於屏幕邊緣),您應該更改sks文件中的場景大小(默認值大約爲1000x800),這就是爲什麼縮放比較小。 – Okapi

+0

嗨BoB,縮放可以通過設置場景的scaleMode來處理,例如'scene!.scaleMode = .AspectFit'。爲方便起見,將sks文件場景大小設置爲屏幕尺寸也是一個好主意。 – Mason

回答

-1

在更新試試這個:

if sub.frame.maxY >= view!.frame.height { 
    sub.position.y = view!.frame.height - sub.size.height/2 
    sub.physicsBody!.affectedByGravity = false 
} 
if sub.frame.minY <= 0 { 
    sub.position.y = sub.size.height/2 
    sub.physicsBody!.affectedByGravity = false 
} 

然後在要反轉重力不要忘記做這個事件的內部:

sub.physicsBody!.affectedByGravity = true 

另一方面,不是利用重力您可以使用這在我看來是更好的選擇:

// This moves the object to the top of the screen 
let action = SKAction.moveToY(view!.frame.height - character.size.height/2, duration: 5.0) // Or however much time you want to the action to run. 
action.timingMode = .EaseInEaseOut // Or something else 
character.runAction(action) 
// Change view!.frame.height - character.size.height/2 to just character.size.height/2 to move to the bottom. 
1

嘗試SKConstraint - 它不需要一個physicsBody。該代碼會是這個樣子,而且會約束sub精靈的情景:

let width2 = sub.size.width/2 
let height2 = sub.size.height/2 
let xRange = SKRange(lowerLimit:0+width2,upperLimit:size.width-width2) 
let yRange = SKRange(lowerLimit:0+height2,upperLimit:size.height-height2) 
sub.constraints = [SKConstraint.positionX(xRange,Y:yRange)]