2015-01-06 1 views
1

저는 스프라이트 키트로 첫 게임을 만들었습니다. 그것은 Flappy Bird 타입 게임입니다. 왼쪽 이미지는 오늘 게임이 어떻게 보 였는지 보여줍니다. 나는 완전히 새로운 프로젝트를 만드는 것을 끝내었다. 이전 프로젝트의 코드를 복사하여 현재 프로젝트에 붙여 넣었습니다. 이전 프로젝트와 똑같은 이미지를 현재 프로젝트에 배치했습니다. 컴파일 오류가 없으며 게임이 이제 오른쪽 이미지처럼 보이는 것을 제외하고는 모든 것이 동일하게 작동합니다. 보시다시피 이미지 너비는 더 작습니다. 어떤 조언을 주시면 감사하겠습니다.이 질문에있는 모든 코드를 알려 주시면 감사하겠습니다.내 스프라이트가 Swift를 사용하여 스프라이트 키트에 맞춰졌습니다

enter image description here

이것은 양궁 장면에 대한 모든 코드는 다음과 같습니다

// 
// ArcheryScene.swift 
// FlappyBird (swift) 
// 
// Created by Brandon Ballard on 1/6/15. 
// Copyright (c) 2015 Brandon Ballard. All rights reserved. 
// 

import UIKit 
import SpriteKit 

class ArcheryScene: SKScene, SKPhysicsContactDelegate { 

var bird = SKSpriteNode() 
var pipeUpTexture = SKTexture() 
var pipeDownTexture = SKTexture() 
var pipesMoveAndRemove = SKAction() 
var score = 0 

let pipeGap = 150.0 

enum ColliderType:UInt32 { 
    case BIRD = 1 
    case PIPE = 2 
} 


override func didMoveToView(view: SKView) { 
    /* Setup your scene here */ 


    backgroundColor = SKColor.cyanColor() 

    //physics 
    self.physicsWorld.gravity = CGVectorMake(0.0, -15.0); 
    self.physicsWorld.contactDelegate = self 



    //Bird 
    var birdTexture = SKTexture(imageNamed:"Bird") 
    birdTexture.filteringMode = SKTextureFilteringMode.Nearest 

    bird = SKSpriteNode(texture: birdTexture) 
    bird.setScale(0.6) 
    bird.position = CGPoint(x: self.frame.width * 0.35 + 20, y: self.frame.size.height * 0.95) 

    bird.physicsBody = SKPhysicsBody(circleOfRadius: bird.size.height/2.0) 
    bird.physicsBody?.dynamic = true 
    bird.physicsBody?.allowsRotation = true 
    bird.physicsBody?.affectedByGravity = true 
    bird.physicsBody!.collisionBitMask = ColliderType.BIRD.rawValue 
    bird.physicsBody!.contactTestBitMask = ColliderType.PIPE.rawValue 
    self.addChild(bird) 

    //Ground 
    var groundTexture = SKTexture(imageNamed: "Ground") 

    var sprite = SKSpriteNode(texture: groundTexture) 
    sprite.setScale(2.0) 
    sprite.position = CGPointMake(self.size.width/2, sprite.size.height/2.0) 


    self.addChild(sprite) 

    var ground = SKNode() 

    ground.position = CGPointMake(0, groundTexture.size().height + 0) 
    ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.size.width, groundTexture.size().height * 2.0)) 
    ground.physicsBody?.dynamic = false 
    self.addChild(ground) 



    //Pipes 

    //Create the Pipes 

    pipeUpTexture = SKTexture(imageNamed: "PipeUp") 
    pipeDownTexture = SKTexture(imageNamed: "PipeDown") 

    //Movement of Pipes 

    let distanceToMove = CGFloat(self.frame.size.width + 2.0 * pipeUpTexture.size().width) 
    let movePipes = SKAction.moveByX(-distanceToMove, y: 0.0, duration: NSTimeInterval(0.01 * distanceToMove)) 
    let removePipes = SKAction.removeFromParent() 

    pipesMoveAndRemove = SKAction.sequence([movePipes,removePipes]) 

    //Spawn Pipes 

    let spawn = SKAction.runBlock({() in self.spawnPipes()}) 
    let delay = SKAction.waitForDuration(NSTimeInterval(2.0)) 
    let spawnThenDelay = SKAction.sequence([spawn,delay]) 
    let spawnThenDelayForever = SKAction.repeatActionForever(spawnThenDelay) 

    self.runAction(spawnThenDelayForever) 
} 

func spawnPipes() { 

    let pipePair = SKNode() 
    pipePair.position = CGPointMake(self.frame.size.width + pipeUpTexture.size().width * 2, 0) 
    pipePair.zPosition = -10 

    let height = UInt32(self.frame.size.height/4) 
    let y = arc4random() % height + height 

    var pipeDown = SKSpriteNode(texture: pipeDownTexture) 
    pipeDown.setScale(2.0)//////// 
    pipeDown.position = CGPointMake(3.0, CGFloat(y) + pipeDown.size.height + CGFloat(pipeGap)) 

    pipeDown.physicsBody = SKPhysicsBody(rectangleOfSize: pipeDown.size) 
    pipeDown.physicsBody?.dynamic = false 
    pipeDown.physicsBody!.affectedByGravity = false 
    pipeDown.physicsBody!.collisionBitMask = ColliderType.PIPE.rawValue 
    pipePair.addChild(pipeDown) 

    var pipeUp = SKSpriteNode(texture: pipeUpTexture) 
    pipeUp.setScale(2.0) 
    pipeUp.position = CGPointMake(0.0, CGFloat(y)) 

    pipeUp.physicsBody = SKPhysicsBody(rectangleOfSize: pipeUp.size) 
    pipeUp.physicsBody?.dynamic = false 
    pipeUp.physicsBody!.affectedByGravity = false 
    pipeUp.physicsBody!.collisionBitMask = ColliderType.PIPE.rawValue 
    pipePair.addChild(pipeUp) 

    pipePair.runAction(pipesMoveAndRemove) 
    self.addChild(pipePair) 

} 



func didBeginContact(contact: SKPhysicsContactDelegate) { 
    scene?.view?.paused = true 
    //gameOver() 

} 

func createScoreNode() -> SKLabelNode { 
    let scoreNode = SKLabelNode(fontNamed: "Brandon Ballard") 
    scoreNode.name = "scoreNode" 

    let newScore = "\(score)" 

    scoreNode.text = newScore 
    scoreNode.fontSize = 125 
    scoreNode.fontColor = SKColor.cyanColor() 
    scoreNode.position = CGPointMake(CGRectGetMidX(self.frame), 58) 
    self.addChild(scoreNode) 
    return scoreNode 
} 

func gameOver() { 
    let scoreNode = self.createScoreNode() 
    self.addChild(scoreNode) 
    let fadeOut = SKAction.sequence([SKAction.waitForDuration(3.0), SKAction.fadeOutWithDuration(3.0)]) 

    let welcomeReturn = SKAction.runBlock({ 
     let transition = SKTransition.revealWithDirection(SKTransitionDirection.Down, duration: 1.0) 
     let welcomeScene = GameScene(fileNamed: "GameScene") 
     self.scene!.view?.presentScene(welcomeScene, transition: transition) 
    }) 

    let sequence = SKAction.sequence([fadeOut, welcomeReturn]) 
    self.runAction(sequence) 
} 


override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    /* Called when a touch begins */ 


    for touch: AnyObject in touches { 

     let location = touch.locationInNode(self) 

     bird.physicsBody?.velocity = CGVectorMake(0, 0) 
     bird.physicsBody?.applyImpulse(CGVectorMake(0,25)) 

    } 
} 

override func update(currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 
} 
} 
+0

코드없이 답하기가 어렵습니다. 변환 매트릭스를 어떻게 구축합니까? – nielsbot

+1

아마도 장면 크기 (로그!) 또는 scene.scaleMode가 다릅니다 – LearnCocos2D

+0

사과드립니다.하지만이 모든 것을 처음 접했고 실제로 변환 행렬이 무엇인지 알지 못합니다. 그러나 나는 이것이 도움이되기를 희망하는 코드를 추가했다 – BCRwar1

답변

0

나는 내 문제를 해결하기 위해 할 필요가 내 모든 GameScene 파일에 코드의 간단한 줄을 추가했다.

welcomeNode?.runAction(fadeAway, completion: { 
       let doors = SKTransition.pushWithDirection(SKTransitionDirection.Down, duration: 1.0) 
       let archeryScene = ArcheryScene(fileNamed: "ArcheryScene") 
       self.view?.presentScene(archeryScene, transition: doors) 
      }) 

내가해야 할 일을했을 모든 내가 "archeryScene"를 만든 후이 코드 줄을 추가했다 :

archeryScene.scaleMode = .AspectFill 
여기가 ArcheryScene를 제공 ​​문제를 해결하기 전에 나는 GameScene 파일에 있던 코드는

이렇게하면 이미지가 "화면 크기에 맞춤"이됩니다. Apple에서 사용하는 ".AspectFill"에 대한 정확한 설명은 다음과 같습니다.

"각 차원의 배율 인수가 계산되고 두 배 중 큰 값이 선택됩니다. 장면의 각 축은 동일한 배율 인수로 조정됩니다. 보기의 전체 영역이 채워지지만 장면의 일부가 잘릴 수 있습니다. "

관련 문제