Ich versuche ein Spiel mit Spritekit in Swift zu programmieren. Ziel ist es, mit seinen Charakter entgegenkommenden Rechtecken zu entkommen. Jetzt habe ich einen Fehler mit der Methode SKPhysicsContactDelegate (didBegin ()) gemacht, so dass der Kontakt der Figur mit einem der Rechtecke nicht erkannt wird. Kann mir jemand helfen, den Fehler zu finden?
Alles anzeigen
Quellcode
- import SpriteKit
- enum colissionTypes: UInt32 {
- case rechteckRechts = 1
- case rechteckLinks = 2
- case figur = 4
- }
- class PlayScene: SKScene, SKPhysicsContactDelegate{
- let figur = SKSpriteNode(imageNamed: "Punkt.jpg")
- @objc func addRechteck(){
- let rechteckRechts = SKSpriteNode(imageNamed: "Rechteck.gif")
- rechteckRechts.physicsBody = SKPhysicsBody()
- rechteckRechts.physicsBody?.isDynamic = false
- rechteckRechts.physicsBody?.categoryBitMask = colissionTypes.rechteckRechts.rawValue
- let rechteckLinks = SKSpriteNode(imageNamed: "Rechteck.gif")
- rechteckLinks.physicsBody = SKPhysicsBody()
- rechteckLinks.physicsBody?.isDynamic = false
- rechteckLinks.physicsBody?.categoryBitMask = colissionTypes.rechteckLinks.rawValue
- let groesse = arc4random_uniform(5)+1
- print(groesse)
- switch groesse {
- case 1:
- rechteckLinks.xScale = 0.5
- rechteckRechts.xScale = 1.5
- case 2:
- rechteckLinks.xScale = 1.5
- rechteckRechts.xScale = 0.5
- case 3:
- rechteckLinks.xScale = 1
- rechteckRechts.xScale = 1
- case 4:
- rechteckLinks.xScale = 1.25
- rechteckRechts.xScale = 0.75
- case 5:
- rechteckLinks.xScale = 0.75
- rechteckRechts.xScale = 1.25
- default:
- print("Fehler in der Wahrscheinlichkeit!!!")
- }
- rechteckRechts.position = CGPoint(x: frame.minX + (rechteckRechts.size.width / 2), y: frame.maxY)
- rechteckLinks.position = CGPoint(x: frame.maxX - (rechteckLinks.size.width / 2), y: frame.maxY)
- let moveDown = SKAction.moveBy(x: 0, y: -5000, duration: 20.0)
- rechteckLinks.run(moveDown)
- rechteckRechts.run(moveDown)
- self.addChild(rechteckRechts)
- self.addChild(rechteckLinks)
- }
- override func didMove(to view: SKView) {
- physicsWorld.gravity = .zero
- physicsWorld.contactDelegate = self
- figur.xScale = 0.4
- figur.yScale = 0.4
- figur.position = CGPoint(x: frame.midX, y: frame.maxY / 4)
- figur.physicsBody = SKPhysicsBody()
- figur.physicsBody!.isDynamic = true
- figur.physicsBody!.categoryBitMask = colissionTypes.figur.rawValue
- figur.physicsBody!.contactTestBitMask = colissionTypes.rechteckRechts.rawValue | colissionTypes.rechteckLinks.rawValue
- self.addChild(figur)
- self.backgroundColor = SKColor.white
- let wait1 = SKAction.wait(forDuration: 3)
- let timer = SKAction.repeatForever(SKAction.sequence([wait1, SKAction.run {
- self.addRechteck()
- }]))
- self.run(timer, withKey: "addRechteck")
- }
- func didBegin(_ contact: SKPhysicsContact) {
- let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
- switch contactMask {
- case colissionTypes.figur.rawValue | colissionTypes.rechteckLinks.rawValue:
- print("contact")
- case colissionTypes.figur.rawValue | colissionTypes.rechteckRechts.rawValue:
- print("contact")
- default:
- return
- }
- }
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
- for touch in (touches ){
- let location = touch.location(in: self)
- if figur.contains(location){
- figur.position = location
- }
- }
- }
- override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
- for touch in (touches ) {
- let location = touch.location(in: self)
- if figur.contains(location){
- figur.position = location
- }
- }
- }
- }