Я начинаю новую игру и имею странную проблему сразу с места в карьер. В моей функции didMoveToView я следующее положить границы на моих спрайтов в кадре (весь экран)иногда спрайты не отскакивают от границы физики
self.physicsBody=SKPhysicsBody(edgeLoopFromRect: self.frame)
Следующий код добавляет SKSpriteNode в точке касания и добавляет rotatebyangle действие с повтором навсегда
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch: AnyObject in touches {
let location = touch.locationInNode(balloonWorld)
let nodeAtPoint = self.nodeAtPoint(location)
if(nodeAtPoint.name == nil) {
let location = touch.locationInNode(self)
let randNum:Int = Int.random(min: 0, max: 7)
var stringColor:String = (balloonColors.objectAtIndex(randNum) as String)
stringColor = stringColor.stringByReplacingOccurrencesOfString("face",
withString :"")
let sprite = Balloon(theColor:stringColor)
//let spriteFileName:String = balloonColors.objectAtIndex(randNum) as String
//let sprite = SKSpriteNode(imageNamed:spriteFileName)
sprite.xScale = 0.5
sprite.yScale = 0.5
sprite.position = location
sprite.zPosition = SceneLevel.hero.rawValue
balloonWorld!.addChild(sprite)
let action = SKAction.rotateByAngle(CGFloat(-M_PI), duration:1)
sprite.runAction(SKAction.repeatActionForever(action))
} else {
nodeAtPoint.removeFromParent()
println(nodeAtPoint.name)
}
}
}
Я установки balloonWorld следующим образом:
balloonWorld = SKNode()
self.addChild(balloonWorld!)
Моя проблема заключается в том, что иногда воздушный шар спрайты не будет отскакивать от края, но только продолжайте идти по краю, чтобы его больше не видели.
Любые предложения?
Спасибо, Кен
по запросу вот код для настройки физических тел
воздушный шар:
class Balloon: SKNode {
// properties
var myColor:String?
var objectSprite:SKSpriteNode?
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
init(theColor:String){
super.init()
self.myColor=theColor
let imageFileName = "\(theColor)face"
let objectSprite:SKSpriteNode = SKSpriteNode(imageNamed:imageFileName)
objectSprite.physicsBody = SKPhysicsBody(circleOfRadius: objectSprite.size.height/2.0)
objectSprite.physicsBody?.affectedByGravity = true
objectSprite.name = theColor + " balloon"
addChild(objectSprite)
}
}
Я не создал физику тела на границе, как я хотя мне нужна была линия self.physicsBody = SKPhysicsBody(edgeLoopFrom Rect : self:frame)
, так как граница имеет тот же фрейм.
Я попытался добавить следующее, но это не изменило поведение:
let borderShape=SKShapeNode(rect: CGRectMake(self.frame.origin.x+2, self.frame.origin.y+2, self.frame.size.width-4, self.frame.size.height-4))
borderShape.fillColor=SKColor.clearColor()
borderShape.strokeColor=SKColor.blackColor()
borderShape.lineWidth=1
borderShape.physicsBody?.categoryBitMask=BodyType.boundary.rawValue
borderShape.zPosition=SceneLevel.border.rawValue
borderShape.physicsBody=SKPhysicsBody(edgeLoopFromRect: borderShape.frame)
balloonWorld!.addChild(borderShape)
Опубликовать код, в котором вы устанавливаете физические тела для границ и воздушных шаров. Имейте в виду, что если вы хотите правильного поведения при столкновении, вы не должны перемещать воздушные шары, используя SKAction moveTo/By – LearnCocos2D
rakeshbs - класс воздушного шара находится в отдельном быстром файле, поэтому ваши действия редактирования не работают – macgeezer