2017-08-18 1 views
1

私は現在、1人のプレーヤーを特色にしたゲームを作っています。私はまた、ユーザーが彼/彼女が遊びたいキャラクターを選ぶことができるキャラクタースクリーンを作った。特定のハイスコアが特定のキャラクターのロックを解除し、ユーザーがこのキャラクターにゲームで使用できるようにするにはどうすればよいですか?Swift 3でSpriteKitゲームのロック解除可能な文字を更新するにはどうすればよいですか?

今の私のプレーヤーが彼のすべてのプロパティを定義して、自分の迅速なファイルがあります。

import SpriteKit 
class Player: SKSpriteNode, GameSprite { 
var initialSize = CGSize(width:150, height: 90) 
var textureAtlas: SKTextureAtlas = SKTextureAtlas(named: "Rupert") 

let maxFlyingForce: CGFloat = 80000 
let maxHeight: CGFloat = 900 
var health:Int = 1 
var invulnerable = false 
var damaged = false 
var damageAnimation = SKAction() 
var dieAnimation = SKAction() 
var forwardVelocity: CGFloat = 190 
var powerAnimation = SKAction() 



init() { 
super.init(texture:nil, color: .clear, size: initialSize) 
createAnimations() 
self.run(soarAnimation, withKey: "soarAnimation") 
let bodyTexture = textureAtlas.textureNamed("pug3") 
self.physicsBody = SKPhysicsBody(texture: bodyTexture, size: self.size) 
self.physicsBody?.linearDamping = 0.9 
self.physicsBody?.mass = 10 
self.physicsBody?.allowsRotation = false 

self.physicsBody?.categoryBitMask = PhysicsCategory.rupert.rawValue 
self.physicsBody?.contactTestBitMask = PhysicsCategory.enemy.rawValue | PhysicsCategory.treat.rawValue | PhysicsCategory.winky.rawValue | PhysicsCategory.ground.rawValue 


func createAnimations() { 
let rotateUpAction = SKAction.rotate(toAngle: 0.75, duration: 0.475) 
rotateUpAction.timingMode = .easeOut 
let rotateDownAction = SKAction.rotate(toAngle: 0, duration: 0.475) 
rotateDownAction.timingMode = .easeIn 
let flyFrames: [SKTexture] = [ 
textureAtlas.textureNamed("pug1"), 
textureAtlas.textureNamed("pug2"), 
textureAtlas.textureNamed("pug3"), 
textureAtlas.textureNamed("pug4"), 
textureAtlas.textureNamed("pug3"), 
textureAtlas.textureNamed("pug2") 
    ] 
let flyAction = SKAction.animate(with:flyFrames, timePerFrame: 0.07) 
flyAnimation = SKAction.group([SKAction.repeatForever(flyAction), rotateUpAction]) 
let soarFrames:[SKTexture] = [textureAtlas.textureNamed("pug5")] 
let soarAction = SKAction.animate(with: soarFrames, timePerFrame: 1) 
soarAnimation = SKAction.group([SKAction.repeatForever(soarAction), rotateDownAction]) 

をこれは、すべてのコードではありませんが、あなたはポイントを得ます。

次に、Gamesceneに表示されるプレイヤーファイルにすべての属性をプレーヤーファイルに結び付けているGamesceneファイルには、と表示されます。最初のプレイヤーをあるプレーヤーと置き換えることができても、一度にすべてを置き換える方法がわからないようなアニメーションがたくさんあります。 gamesceneクラスとプレーヤークラスの両方にまたがる条件を設定して、特定のイメージを他のイメージに差し替えるだけで、同じアクションを維持できるようにしたい。

ありがとうございました!ここで

答えて

0

は、あなたがこのようなものがより扱い作るために使用できるいくつかのテクニックです:あなたはに名前を渡すことができるように

  • は、あなたのキャラクターの画像および/またはスプライトシートの命名規則を持っていますPlayer()コンストラクタ。次に、テクスチャ名( "pug3")を読み込む代わりに、テクスチャ名( "\(playerName)3")をロードします。あなたのキャラクターの唯一の違いがスプライトシートの場合、これは実際にプレイヤー側で必要なものです。

  • キャラクターがより複雑で、イメージだけでなく、より大きなイメージや健康状態などの違いがある場合は、よりデータ指向のアプローチを採用することをお勧めします。これにはいくつかのアプローチがありますが、硬いコーディングではなく、.plistファイルからテクスチャ名、ヒットボックスサイズ、ヘルスレベルなどを読み出すのが便利です。次に、.plistファイルの名前を渡して、必要な文字を読み込みます。新しい文字を作成するには、新しい.plistファイルを作成するだけです。もう1つのアプローチは、プレーヤを構築するために必要な情報を含むPlayerコンストラクタに渡すことができる "文字定義"構造体を作成することです(これは.plistファイルからロードすることもできますが、コーディング可能なシリアル化を使用してそれらをハードコーディングしたり、直接保存することもできます。

  • 文字間で異なる動作が必要な場合は、いつでもサブクラス化ルートに進むことができます。さまざまなパーツとピースを関数に引き出し、これらの関数をオーバーライドして特定のより複雑な文字に必要な機能

関連する問題