Я новичок в наборе спрайтов и работаю в Swift. Попытка обнаружить столкновение, когда герой сталкивается с правой стеной. Я могу обнаружить столкновение, когда герой сталкивается со всем остальным, но по какой-то причине он не обнаружит правую стену.
Снова герой обнаружит столкновение с левой стеной, но ничего не происходит с правой стеной. я в замешательстве ...
в моей игровой сцене это то, как я все настраиваю
class GameScene: SKScene, SKPhysicsContactDelegate {
enum contactType: UInt32 {
case heroCategory = 1
case fireCategory = 2
case rightTrapCategory = 4
case leftTrapCategory = 8
case leftWallCategory = 16
case rightWallCategory = 32
}
let leftTrap = SKSpriteNode()
let rightTrap = SKSpriteNode()
let fire = SKSpriteNode()
let hero = SKSpriteNode()
let leftWall = SKSpriteNode()
let rightWall = SKSpriteNode()
override func didMove(to view: SKView) {
physicsWorld.contactDelegate = self
addLeftWall()
addRightWall()
addFire()
addHero()
addLeftTrap()
addrightTrap()
}
Здесь я обнаруживаю, сортирую и воздействую на эти столкновения.
func collision(between Hero: SKNode, object: SKNode) {
switch object.name {
case "fire":
addHighscore()
destroy(hero: Hero)
gameOver()
case "rightTrap":
jumpCounter = 0
hero.color = .cyan
print("right trap")
case "leftTrap":
jumpCounter = 0
hero.color = .cyan
print("left Trap")
case "leftWall":
hero.color = .red
print("left wall")
case "rightWall":
hero.color = .red
print("right wall")
default:
print("something went wrong")
}
}
func didBegin(_ contact: SKPhysicsContact) {
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
collision(between: contact.bodyA.node!, object:contact.bodyB.node!)
}else if contact.bodyB.categoryBitMask < contact.bodyA.categoryBitMask{
collision(between: contact.bodyB.node!, object: contact.bodyA.node!)
}
}
Как настроить спрайты
func addHero(){
hero.name = "hero"
hero.zPosition = 1
hero.color = .cyan
hero.size = CGSize(width: 25, height: 50)
hero.position = CGPoint(x: frame.midX, y: (frame.midY + 100))
hero.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 25, height: 50))
hero.physicsBody?.restitution = 0.1
hero.physicsBody?.allowsRotation = false
hero.physicsBody?.categoryBitMask = contactType.heroCategory.rawValue
hero.physicsBody?.contactTestBitMask = contactType.fireCategory.rawValue
hero.physicsBody?.contactTestBitMask = contactType.leftTrapCategory.rawValue
hero.physicsBody?.contactTestBitMask = contactType.rightTrapCategory.rawValue
hero.physicsBody?.contactTestBitMask = contactType.rightWallCategory.rawValue
hero.physicsBody?.contactTestBitMask = contactType.leftWallCategory.rawValue
addChild(hero)
}
func addRightWall(){
rightWall.name = "rightWall"
rightWall.color = .red
rightWall.size = CGSize(width: 25, height: (frame.maxX / 2) + 25 )
rightWall.position = CGPoint(x: frame.maxX, y: (frame.midX + 200))
rightWall.anchorPoint = CGPoint(x: 1, y: 0.5)
let centerPoint = CGPoint(x: rightWall.size.width / 2 - (rightWall.size.width * rightWall.anchorPoint.x), y: rightWall.size.height / 2 - (rightWall.size.height * rightWall.anchorPoint.y))
rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size, center: centerPoint)
rightWall.physicsBody?.isDynamic = false
rightWall.physicsBody?.categoryBitMask = contactType.rightWallCategory.rawValue
addChild(rightWall)
}
и, чтобы вы могли видеть, спрайт левой стены.
снова столкновение работает с левой стеной, но не с правой.
func addLeftWall(){
leftWall.name = "leftWall"
leftWall.color = .red
leftWall.size = CGSize(width: 25, height: (frame.maxX / 2) + 25 )
leftWall.position = CGPoint(x: frame.minX, y: (frame.midX + 200))
leftWall.anchorPoint = CGPoint(x: 0, y: 0.5)
let centerPoint = CGPoint(x: leftWall.size.width / 2 - (leftWall.size.width * leftWall.anchorPoint.x), y: leftWall.size.height / 2 - (leftWall.size.height * leftWall.anchorPoint.y))
leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size, center: centerPoint)
leftWall.physicsBody?.isDynamic = false
leftWall.physicsBody?.categoryBitMask = contactType.leftWallCategory.rawValue
addChild(leftWall)
}