Я взял и модифицировал кусок кода, который позволяет мне снимать пули во всех направлениях. Он работает отлично. Но он генерирует случайную пулю в момент, когда контакт игрока заканчивается. У меня 6 разных пуль, и для целей моей игры мне нужен игрок, чтобы увидеть их до, он коснется экрана. Я попытался инициализировать пулю в глобальной функции и передать ее в didMoveToView. Он не работает, пуля генерируется один раз и остается на своем месте. Это мой код для инициализации пули:Как сделать узел видимым перед любым взаимодействием с пользователем
class GameScene: SKScene, SKPhysicsContactDelegate {
var gameOver = false
let cannon = SKSpriteNode(imageNamed: "cannon")
let bulletInCannon = SKSpriteNode()
var endOfScreenRight = CGFloat()
var endOfScreenLeft = CGFloat()
let bmrArray = ["blBl", "magBl", "rBl"]
let cgyArray = ["cBl", "gBl", "yBl"]
let yrmArray = ["yBl", "rBl", "magBl"]
let bulletArray = ["rBullet","magBullet", "blBullet", "cBullet", "gBullet", "yBullet"]
override func didMoveToView(view: SKView) {
endOfScreenLeft = (self.size.width/2) * CGFloat(-1)
endOfScreenRight = self.size.width/2
cannon.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
self.addChild(cannon)
cannon.zPosition = 0
var randomBullet = Int(arc4random_uniform(6))
bulletInCannon.texture = SKTexture(imageNamed: bulletArray[randomBullet])
bulletInCannon.position = cannon.position
addChild(bulletInCannon)
bulletInCannon.zPosition = 1000
runAction(SKAction.repeatActionForever(SKAction.sequence([SKAction.runBlock(addCgyLine),
SKAction.waitForDuration(1.0)])))
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
let bullet = SKSpriteNode(texture: bulletInCannon.texture)
bullet.position = cannon.position
addChild(bullet)
let offset = location - bullet.position
let direction = offset.normalized()
let shootAmount = direction * 1000
let realDestination = shootAmount + bullet.position
let actionMove = SKAction.moveTo(realDestination, duration: 2.0)
let actionDone = SKAction.removeFromParent()
bullet.runAction(SKAction.sequence([actionMove, actionDone]))
var randomBullet = Int(arc4random_uniform(6))
bulletInCannon.texture = SKTexture(imageNamed: bulletArray[randomBullet])
}
}
func addCgyLine() {
var cgyBlock = SKSpriteNode(imageNamed: "cyanBox")
cgyBlock.position = CGPointMake(size.width + cgyBlock.size.width/2, CGRectGetMidY(self.frame) + 60)
addChild(cgyBlock)
var randomCGY = Int(arc4random_uniform(3))
cgyBlock.texture = SKTexture(imageNamed: cgyArray[randomCGY])
let actionMove = SKAction.moveTo(CGPoint(x: -cgyBlock.size.width/2, y: CGRectGetMidY(self.frame) + 60), duration: 3)
let actionDone = SKAction.removeFromParent()
cgyBlock.runAction(SKAction.sequence([actionMove, actionDone]))
SKActionTimingMode.EaseOut
}
Как я могу генерировать пулю и только потом снимать его? Я буду рад услышать любые идеи, спасибо!
Грустная новость, я до сих пор не могу видеть пулю в пушку, прежде чем я нажимаю, чтобы стрелять. Не знаю, почему, я внедрил ваш код и не было никаких ошибок – Burundanga
об ошибке с CGPoints: это потому, что я использую перегрузку оператора и не включаю код для него в вопрос – Burundanga
Odd. Убедитесь, что вы установили позицию пушки и добавили ее в сцену до создания 'bulletInCannon'. Вы также можете установить 'bulletInCannon.zPosition' примерно на 0,5, чтобы убедиться, что он выше пушки в сцене. – Gliderman