swift3中的碰撞检测
我试图在玩家和敌人碰撞时发生爆炸。目前,我在检测玩家和敌人之间的碰撞时遇到了问题。我尝试了各种不同的方法,看了各种不同的文章,但还没有完全解决这个问题。下面是我目前使用的代码: 玩家等级:swift3中的碰撞检测,swift,sprite-kit,physics,collision,Swift,Sprite Kit,Physics,Collision,我试图在玩家和敌人碰撞时发生爆炸。目前,我在检测玩家和敌人之间的碰撞时遇到了问题。我尝试了各种不同的方法,看了各种不同的文章,但还没有完全解决这个问题。下面是我目前使用的代码: 玩家等级: class Player: SKSpriteNode { func initializePlayer() { physicsBody = SKPhysicsBody(circleOfRadius: size.height/2) physicsBody?.affecte
class Player: SKSpriteNode {
func initializePlayer() {
physicsBody = SKPhysicsBody(circleOfRadius: size.height/2)
physicsBody?.affectedByGravity = false;
physicsBody?.isDynamic = false;
physicsBody?.categoryBitMask = ColliderType.PLAYER
physicsBody?.contactTestBitMask = ColliderType.ENEMY
}
...
}
import SpriteKit
import UIKit
struct ColliderType {
static let PLAYER: UInt32 = 0x1 << 0;
static let ENEMY: UInt32 = 0x1 << 1;
}
class GamePlayScene: SKScene, SKPhysicsContactDelegate {
private var player: Player?;
...
override func didMove(to view: SKView) {
physicsWorld.contactDelegate = self;
initializeGame();
_ = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector:
#selector(SpawnEnemies), userInfo: nil, repeats: true)
}
...
func SpawnEnemies() {
let enemy = SKSpriteNode(imageNamed: "Enemy.png")
enemy.setScale(1.5)
let Pos = randomBetweenNumbers(firstNum: -enemy.size.height, secondNum: frame.height - enemy.size.height/4)
enemy.position = CGPoint(x: self.size.width, y: CGFloat(Pos))
enemy.zPosition = 2;
enemy.physicsBody = SKPhysicsBody(circleOfRadius: enemy.size.height/2)
enemy.physicsBody?.affectedByGravity = false
enemy.physicsBody?.categoryBitMask = ColliderType.ENEMY
enemy.physicsBody?.contactTestBitMask = ColliderType.PLAYER
...
}
func didBegin(_ contact: SKPhysicsContact) {
var body1 = SKPhysicsBody()
var body2 = SKPhysicsBody()
body1 = contact.bodyA
body2 = contact.bodyB
if body1.categoryBitMask == ColliderType.PLAYER && body2.categoryBitMask == ColliderType.ENEMY {
// if the player has hit the enemy
body2.node?.removeFromParent()
spawnExplosion(Pos: body1.node!.position)
}
}
...
private func initializeGame() {
player = childNode(withName: "Player") as? Player!
}
...
}
游戏场景类:
class Player: SKSpriteNode {
func initializePlayer() {
physicsBody = SKPhysicsBody(circleOfRadius: size.height/2)
physicsBody?.affectedByGravity = false;
physicsBody?.isDynamic = false;
physicsBody?.categoryBitMask = ColliderType.PLAYER
physicsBody?.contactTestBitMask = ColliderType.ENEMY
}
...
}
import SpriteKit
import UIKit
struct ColliderType {
static let PLAYER: UInt32 = 0x1 << 0;
static let ENEMY: UInt32 = 0x1 << 1;
}
class GamePlayScene: SKScene, SKPhysicsContactDelegate {
private var player: Player?;
...
override func didMove(to view: SKView) {
physicsWorld.contactDelegate = self;
initializeGame();
_ = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector:
#selector(SpawnEnemies), userInfo: nil, repeats: true)
}
...
func SpawnEnemies() {
let enemy = SKSpriteNode(imageNamed: "Enemy.png")
enemy.setScale(1.5)
let Pos = randomBetweenNumbers(firstNum: -enemy.size.height, secondNum: frame.height - enemy.size.height/4)
enemy.position = CGPoint(x: self.size.width, y: CGFloat(Pos))
enemy.zPosition = 2;
enemy.physicsBody = SKPhysicsBody(circleOfRadius: enemy.size.height/2)
enemy.physicsBody?.affectedByGravity = false
enemy.physicsBody?.categoryBitMask = ColliderType.ENEMY
enemy.physicsBody?.contactTestBitMask = ColliderType.PLAYER
...
}
func didBegin(_ contact: SKPhysicsContact) {
var body1 = SKPhysicsBody()
var body2 = SKPhysicsBody()
body1 = contact.bodyA
body2 = contact.bodyB
if body1.categoryBitMask == ColliderType.PLAYER && body2.categoryBitMask == ColliderType.ENEMY {
// if the player has hit the enemy
body2.node?.removeFromParent()
spawnExplosion(Pos: body1.node!.position)
}
}
...
private func initializeGame() {
player = childNode(withName: "Player") as? Player!
}
...
}
导入SpriteKit
导入UIKit
结构碰撞类型{
静态让玩家:UInt32=0x1 1)我们对玩家一无所知。2)你的SKPhysicContact Didbeng表示游戏可能崩溃。1)我们对玩家一无所知。2)你的SKPhysicContact Didbeng表示游戏可能崩溃。