2016-04-14 16 views
2

Bu kod burada SKSpriteNode alt sınıfları ve Bir alt sınıf SKSpriteNode içinde bir SKSpriteNode oluşturmak için iyi bir uygulamadır?

import SpriteKit 

class Spaceship: SKSpriteNode{ 

var spaceship:SKTexture 
var hitpoint = 100 
var thescene:SKScene 

var lazer5:SKSpriteNode? 
var lazer5_pathofdestruction:SKSpriteNode? 

init(skScene:SKScene) { 

    thescene = skScene 
    self.spaceship = SKTexture(imageNamed:"Spaceship") 
    super.init(texture: spaceship, color: SKColor.clearColor(), size: spaceship.size()) 
    self.name = "Spaceship" 
    self.setScale(0.10) 
    self.position = CGPointMake(CGRectGetMidX(skScene.frame), CGRectGetMidY(skScene.frame)) 

} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 
....... 

Bu Sınıf (Uzay gemisi) SKScene

kabul ettiğini bunu başlatır dualcanon ateş edeceği bir yöntem vardır: Eğer kullandığım başlatma görebileceğiniz gibi

func firedualcanon() { 

    let canonposition = [10.00 , -10.00] 
    let fireSound = SKAction.playSoundFileNamed("dualcanon.wav", waitForCompletion: false) 
    let targeting = SKAction.sequence([ 


     SKAction.runBlock{ 

      for position in canonposition { 

       let canon = SKSpriteNode(color: SKColor.whiteColor(), size: CGSize(width:4, height: 3)) 
       canon.name = "weapon" 
       canon.position = CGPointMake(self.position.x - CGFloat(position), self.position.y) 
       let projectile = SKAction.moveTo(CGPoint(x: self.position.x - CGFloat(position), y: self.thescene.frame.height + 200),duration: 1.50) 

       GlobalReference.setPhysicsBody(canon,collidertype: GlobalVariable.ColliderType.Light) 

       self.thescene.addChild(canon) 
       let bulletaction = SKAction.sequence([projectile,SKAction.removeFromParent()]) 
       canon.runAction(bulletaction) 

      } 


     } 


     , SKAction.waitForDuration(0.10) 

     ]) 

    self.thescene.runAction(
     SKAction.repeatActionForever(SKAction.group([fireSound,targeting])), 
     withKey: "fireweapons") 



} 

SKTexture ancak şimdi yöntemde firedualcanon() SKSpriteNode kullanarak bir kanon oluşturdum.

Bu güzel bir Swift Programlama uygulaması mıdır?

cevap

1

sprite tabanlı oyunları kodlama, sizin oyun nesneleri bile Swift ve SpriteKit önce sprite sınıfının alt (veya daha genel düğümler), olmak zorunda oldukça yaygın bir uygulama (örneğin, Cocos2d/Objective-C) .

Bazı sadelik yanlısı sen modeli (veri) ayrıştırarak gerektiğini görüşlerini (sprite) ve ayrı nesneler içine denetleyicileri (oyun mantığı), ancak çok sayıda sahip yol açabilir basit oyunlarda iddia edebilir Her biri çok az olan sınıflar.

(Bence yılında , bu tercihi hakkında gerçekten ne olduğunu ve belirli bir uygulama için uygundur) yine, her nesnenin mantık/devlet bir temsil olabilir o yönde gitmek isterseniz

SpriteKit sınıfı (ör., Swift kök sınıfı veya NSObject alt sınıfı), her bir nesne bir şekilde ekranda temsil eden hareketli grafiğe (referans, benzersiz bir kimlik, vb.), ayrıntılara bağlı olarak. Daha sonra, her bir çerçeve üzerinde, temsil ettikleri model nesnesinin (ör. "Uzay gemisi") mantıksal (oyun) durumuna bağlı olarak her hareketli grafiğin görsel durumunu (konum, vb.) Güncelleştirin. Üste |

Bunun mantıklı olmasını umuyorum.

+0

Yep anlaşıldı :) –

1

NicolasMiari'ye katılıyorum. Bu, oyununuza göre değişir, ancak doğru olarak göstermek için bir, iki veya daha fazla SKSpriteKitNode üzerinde bulunan bir SKNode sınıfının olması normaldir. Örneğin, uzay geminiz, özel eylemleri, animasyonları, çarpışmaları vb. Ile uydu olarak küçük bir uzay gemisine sahip olabilir mi? Böyle durumlarda, ayrı bir sprite gibi olması daha kolaydır.

İlgili konular