2015-07-21 2 views
0

Я недавно начал кодирование, и моя первая попытка - игра iOS, часть игры, над которой я работаю, имеет следующие элементы.Быстрое копирование изображений/копирование изображений - iOS

Прокрутка переднего плана и заднего плана Кошка, которая прыгает при нажатии Ракета дождя сверху вниз.

Мне недавно удалось развернуть ракету каждые несколько секунд, но при этом я думаю, что я что-то испортил.

Теперь у меня две ошибки: первая - это кошка, фоновые и фоновые изображения, дублирующие и укладывающиеся друг на друга по всему экрану, а другая - ошибка сборки при override func update(currentTime. Я прокомментировал вращение Z кота, поскольку иначе игра не будет построена.

Если кто-нибудь может помочь мне разобраться, как исправить, я был бы очень благодарен.

Извините, если это перебор, но вот код ....

import SpriteKit 

class GameScene: SKScene, SKPhysicsContactDelegate { 


var cat = SKSpriteNode() 
var crow = SKSpriteNode() 
var crowTexture1 = SKTexture() 
var skyColor = SKColor() 
var moveAndRemoveCrow = SKAction() 
var spawn = SKAction() 
var lastMissileAdded : NSTimeInterval = 0.0 

let missileVelocity : CGFloat = 5.0 



override func didMoveToView(view: SKView) { 

    self.addMissile() 

} 


func addMissile() { 
    // Initializing missile node 
    var missile = SKSpriteNode(imageNamed: "red-missile") 
    missile.setScale(0.15) 

    // Adding SpriteKit physics body for collision detection 
    missile.physicsBody = SKPhysicsBody(rectangleOfSize: missile.size) 
    //  missile.physicsBody?.categoryBitMask = UInt32(obstacleCategory) 
    missile.physicsBody?.dynamic = true 
    //  missile.physicsBody?.contactTestBitMask = UInt32(shipCategory) 
    missile.physicsBody?.collisionBitMask = 0 
    missile.physicsBody?.usesPreciseCollisionDetection = true 
    missile.name = "missile" 

    // Selecting random y position for missile 
    var random : CGFloat = CGFloat(arc4random_uniform(300)) 
    missile.position = CGPoint(x: self.frame.size.width/1.8, y: self.frame.size.height/1.2) 
    self.addChild(missile) 
} 

func moveObstacle() { 
    self.enumerateChildNodesWithName("missile", usingBlock: { (node, stop) -> Void in 
     if let obstacle = node as? SKSpriteNode { 
      obstacle.position = CGPoint(x: obstacle.position.x - self.missileVelocity, y: obstacle.position.y) 
      if obstacle.position.x < 0 { 
       obstacle.removeFromParent() 
      } 
     } 
    }) 


    skyColor = SKColor(red:113.0/255.0, green:197.0/255.0, blue:207.0/255.0, alpha:1.0) 
    self.backgroundColor = skyColor 

    var catTexture1 = SKTexture(imageNamed: "Cat1") 
    catTexture1.filteringMode = SKTextureFilteringMode.Nearest 
    var catTexture2 = SKTexture(imageNamed: "Cat2") 
    catTexture2.filteringMode = SKTextureFilteringMode.Nearest 

    var anim = SKAction.animateWithTextures([catTexture1, catTexture2], timePerFrame: 0.2) 
    var run = SKAction.repeatActionForever(anim) 

    cat = SKSpriteNode(texture: catTexture1) 
    cat.position = CGPoint(x: self.frame.size.width/2.2, y: self.frame.size.height/7.0) 
    cat.runAction(run) 

    cat.physicsBody = SKPhysicsBody(circleOfRadius: cat.size.height/2.0) 
    cat.physicsBody!.dynamic = true 
    cat.physicsBody!.allowsRotation = false 

    self.addChild(cat) 


    var groundTexture = SKTexture(imageNamed: "Ground") 
    groundTexture.filteringMode = SKTextureFilteringMode.Nearest 

    var moveGroundSprite = SKAction.moveByX(-groundTexture.size().width, y: 0, duration: NSTimeInterval(0.01 * groundTexture.size().width)) 
    var resetGroundSprite = SKAction.moveByX(groundTexture.size().width, y: 0, duration: 0.0) 
    var moveGroundSpritesForever = SKAction.repeatActionForever(SKAction.sequence([moveGroundSprite,resetGroundSprite])) 

    for var i:CGFloat = 0; i < 2 + self.frame.size.width/(groundTexture.size().width); ++i { 
     var sprite = SKSpriteNode(texture: groundTexture) 
     sprite.position = CGPointMake(i * sprite.size.width, sprite.size.height/2) 
     sprite.runAction(moveGroundSpritesForever) 
     self.addChild(sprite) 

    } 

    var dummy = SKNode() 
    dummy.position = CGPointMake(0, groundTexture.size().height/2) 
    dummy.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.size.width, groundTexture.size().height)) 
    dummy.physicsBody!.dynamic = false 
    self.addChild(dummy) 

    var skylineTexture = SKTexture(imageNamed: "Skyline") 
    skylineTexture.filteringMode = SKTextureFilteringMode.Nearest 

    var moveSkylineSprite = SKAction.moveByX(-skylineTexture.size().width, y: 0, duration: NSTimeInterval(0.1 * skylineTexture.size().width)) 
    var resetSkylineSprite = SKAction.moveByX(skylineTexture.size().width, y: 0, duration: 0.0) 
    var moveSkylineSpritesForever = SKAction.repeatActionForever(SKAction.sequence([moveSkylineSprite,resetSkylineSprite])) 

    for var i:CGFloat = 0; i < 2 + self.frame.size.width/(skylineTexture.size().width); ++i { 
     var sprite = SKSpriteNode(texture: skylineTexture) 
     sprite.zPosition = -20; 
     sprite.position = CGPointMake(i * sprite.size.width, sprite.size.height/2 + groundTexture.size().height) 
     sprite.runAction(moveSkylineSpritesForever) 
     self.addChild(sprite) 
    } 

} 

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    /* Called when a touch begins */ 

    cat.physicsBody!.velocity = CGVectorMake(0, 0) 
    cat.physicsBody!.applyImpulse(CGVectorMake(0, 15)) 

} 

func clamp(min: CGFloat, max: CGFloat, value: CGFloat) -> CGFloat { 
    if(value > max) { 
     return max; 
    } else if(value < min) { 
     return min; 
    } else { 
     return value; 
    } 

} 
override func update(currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 
    //  cat.zRotation = self.clamp(-1, max: 0.5, value: cat.physicsBody!.velocity.dy * (cat.physicsBody!.velocity.dy < 0 ? 0.003 : 0.001)); 
    if currentTime - self.lastMissileAdded > 1 { 
     self.lastMissileAdded = currentTime + 1 
     self.addMissile() 
    } 

    self.moveObstacle() 
} 


} 
+0

Ну, вы вызываете 'moveObstacle' из своей функции' update', которая часто вызывается, и ваш 'moveObstacle' добавляет спрайты в вашу сцену, чтобы вы натолкнулись на тонны спрайтов на вашем экране. Ваш метод препятствий перемещения должен делать то, что подразумевается под именем, и перемещать ваши препятствия, а не создавать новые спрайты. – dan

ответ

0

Я понял это,

Я имел функции в 'didMoveToView'. После перемещения их вне блока код теперь работает плавно.

Смежные вопросы