2017-09-25 7 views
0

나는 게임을 일하고 있어요 게임은 모든 아이폰에서 완벽하게 작동하고 아이 패드는 아이폰 X와 아이폰 8 플러스게임 충돌이

나는 장면 게임 충돌에 스프라이트를 추가 할 때 기대 (스프린트가 이미 장면에 추가 되었기 때문에 (iPhone X 및 iPhone 8 Plus에서만), 다른 앱에서는 충돌이 발생하지 않았으며, 버그가 내 타이머에 있다고 생각합니다. 어쩌면 iPhone 시뮬레이터 버그일까요? 어떻게 생각해?

코드 :

class GameScene: SKScene, SKPhysicsContactDelegate { 

var finger = SKSpriteNode(imageNamed: "Finger") //Finger to swipe the biscuit 

var biscuit = SKSpriteNode(imageNamed: "Biscuit") 

var glass = SKSpriteNode(imageNamed: "Glass") 

var defaultbiscuitpos:CGPoint = CGPoint() 

var defaultfingerpos:CGPoint = CGPoint() 

/*** Drag Biscuit vars ***/ 
var touchpoint:CGPoint = CGPoint() 
var istouching:Bool = false 

var fadeoutfinger = SKAction() 
var fadeinfinger = SKAction() 
var fingergroup = SKAction() 
var burnanimtion = SKAction() 
var movefinger = SKAction() 

let fingertimer:String = "fingertimer" 

var isGameover:Bool = false 

//Game mode enum 

enum gamemode { 
case dip 
case ready 
case out 
case gameover 

} 

//Game mode (Dip,Ready,Out or game over by enum) **Now is Dip 
var mymode = gamemode.dip 

override func didMove(to view: SKView) { 

//Finger 
finger.name = "Finger" 
finger.position = CGPoint(x: biscuit.position.x + finger.frame.width, y: biscuit.position.y) 
defaultfingerpos = finger.position 
finger.alpha = 1.0 
finger.zPosition = 5 

//Start finger timer to make animation 
    createTimer(name: fingeranimation, waitt: 3.0, sprite: finger, actioname: fingertimer) 

} 

//Finger timer func 
func fingeranimation() { 


//Check if timer is over 4 seconds and the title is dip 
if mymode == gamemode.dip { 

    //Add finger to screen 
    addChild(finger) 

    //Set fade in animation for finger 
    fadeinfinger = SKAction.fadeIn(withDuration: 2.0) 

    //Set move animation for finger 
    movefinger = SKAction.moveTo(y: glass.frame.midX, duration: 2.0) 

    //Set fade out animation for finger 
    fadeoutfinger = SKAction.fadeOut(withDuration: 2.0) 

    fingergroup = SKAction.group([fadeinfinger,movefinger,fadeoutfinger]) 

    finger.run(fingergroup, completion: { 

     //Remove finger from screen 
     self.finger.removeFromParent() 

     //Return the finger to apper and return the finger to default position 
     self.finger.alpha = 1.0 
     self.finger.position = self.defaultfingerpos 

     }) 

    } 

    } 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

let touch = touches.first! as UITouch 
let location = touch.location(in: self) 

//Tap on biscuit 
if biscuit.contains(location) && mymode != gamemode.gameover { 
    touchpoint = location 
    istouching = true 
    biscuit.physicsBody?.pinned = false 

    //Stop the finger animation timer 
    stopTimer(actioname: fingertimer, sprite: finger) 
    } 
} 

//Make timer function 
func createTimer (name:@escaping os_block_t , waitt:TimeInterval, sprite:SKSpriteNode?,actioname: String) { 

    let myaction = SKAction.sequence([SKAction.wait(forDuration: waitt), SKAction.run(name)]) 

    run(SKAction.repeatForever(myaction), withKey: actioname) 
} 

//Stop timer function 
    func stopTimer(actioname:String, sprite:SKSpriteNode?) { 

    removeAction(forKey: actioname) 
} 

override func update(_ currentTime: TimeInterval) { 

// Called before each frame is rendered 
if istouching && isGameover == false { 
    let dt:CGFloat = 1.0/15 
    let distance = CGVector(dx: touchpoint.x - biscuit.position.x, dy: touchpoint.y - biscuit.position.y * 1.65) 
    let velocity = CGVector(dx: distance.dx/dt, dy: distance.dy/dt) 
    self.biscuit.physicsBody!.velocity = velocity 

    } 
    } 
} 
+0

X와 다른 시뮬레이터간에 차이점은 없습니다. 읽을 수 있도록 여기에 코드를 정리해야합니다. 지금 우리는 클래스에있을 때 또는 함수에있을 때 구별 할 수 없기 때문에 어떤 일이 일어나는지 알지 못합니다. – Knight0fDragon

+0

GameScene 클래스에있는 코드를 편집했습니다 –

+1

이 코드는 계속 실패하고 생성 타이머는 다음과 같습니다. floating – Knight0fDragon

답변

0

이 문제는 현재 엑스 코드 9.1의 출시와 함께 고정됩니다.